I want to build a device that serves the audio experimenter in the same way the Arduino serves the artist community. The Arduino won't do the job for audio because AVR8s are woefully underpowered (max clock speed, multiplier performance, very little RAM). The AVR8 also doesn't have an I2S or AC97 interface to a true audio codec. In shopping around, I've settled on the STM32F205RB, a 120MHz ARM Cortex-M3 processor. It has I2S interfaces, so I can hook it up to a real audio codec – I'm thinking the inexpensive but very functional Wolfson WM8731. This should be a powerful platform for running bare-metal audio synthesis and processing algorithms, and some limited Pure Data (pd) or Supercollider patches.
In this design, I'm rapidly running into a bunch of competing constraints:
- Arduino shield compatibility. This makes the board design bigger and awkward to lay out, especially if I include lots of built-in peripherals like MIDI in/out and headphone jack (see below). I'll never be 100% compatible with all Arduino shields anyway, since my processor architecture is totally different than Arduino. So my compatibility would be limited to shields I (or others) make the effort to support on the STM32Fxxx platform. LeafLabs has done some good work on this front already. As an alternative, I can develop my own custom shield format and provide shield kits that customers can hand-assemble.
- Built-in MIDI in/out. It'd be nice to plug my device straight into a keyboard or controller and go to town. But MIDI connectors are big and clumsy and would make my device bigger and harder to build into a hand-held instrument. MIDI ports also add a fair bit of cost – the connectors and opto-isolator, through-hole assembly, and the extra circuit board space. Are MIDI interfaces still important if I can instead provide USB MIDI using the STM32F205's USB OTG functionality (e.g. just plug your USB-MIDI controller straight into my device and play)?
- Headphone output. I'm already building in 1/8" stereo line input and line output. The WM8731 also provides a headphone output. Would you want to listen on headphones, or would a line-out into a headphone amplifier work just fine for you?
- Microphone input. The WM8731 has a mono microphone input, designed for cheap little electret capsules (like those you find built into laptops). It's not a high-quality input. Would it still be worth having a jack where you could plug in a cheap Logitech computer microphone – instead of connecting some sort of microphone pre-amplification to my device's line input?
- Micro SD card slot. Would it be important to have access to vast amounts of data stored on an SD card? Or would the 128K or so of flash inside the ARM chip be enough for most applications?
Leave a comment and let me know what you think.