We’ve spent a bit of time working with the ATSAM2195 synthesiser chip on the Fluxamasynth board that we’re using for the Modular Music Box.
The ATSAM conforms to a bewildering selection of MIDI specifications: as well as responding to core MIDI messages, it supports General MIDI, The Roland MT-32 sound set, Roland’s GS MIDI extensions, a bunch of additional NRPN and SysEx controls and its own “DREAM” command set. There are at least three completely different ways to control the device’s master volume, and three more to control per-channel part volumes. Having skimmed the manual a few times, we embarked on a near total rewrite of the Fluxamasynth support library to layer out the various classes of parameter and SysEx change.
The ATSAM’s sound, and voice architecture, are pretty similar to the MT-32: there are some rather wimpy voice-specific low-pass resonant filters, rudimentary LFO and envelope controls, a dual effects processor, built-in parametric EQ and (apparently) sound spatialisation. The sound quality is probably not something you’d want to commit to an album (despite the fact that the MT-32 was a hot studio item in 1987), but it’s pretty impressive from something the size of a lentil.
For testing, we have the Fluxamasynth – essentially the ATSAM chip on a bare-bones Arduino – connected via I2C to an Arduino Mega as “host”, with the Mega running a protocol layer for talking to a MacBook. The Mac side of the link is implemented in Python within MaxMSP, which means we’ve been able to drop the entire thing into Max for Live and play bits of Beethoven and Mozart from General MIDI files directly through to the ATSAM. The tracks sound… acceptable. (The onboard EQ will help a lot.)
Next task: code up some sequences that will work on the music box’s playback disc: 64 steps, 13 pitch rings. That’s not very much Mozart, so quite a bit of manual quantising will be necessary to shoe-horn pieces into a playable form which will last more than four or five seconds.