So, it turns out that the performance of sending low-latency and accurately timed musical data over WiFi is pretty poor. This presents me with a little bit of a problem for this project, and I've also come to realise a few other related points:

  1.  WiFi is rubbish.
  2. The Raspberry Pi, whilst attractive as a platform for it's potential capabilities, is perhaps capable of too much on the software side (meaning much development distraction) and not enough on the hardware side (cannot be used as USB device).
  3. I might have to drop the OSC protocol, since the networking transport it requires performs poorly.
  4. I might have to drop the OSC protocol and use MIDI, meaning I can be instantly more compatible with most digital musical devices.
  5. I might have to drop the OSC protocol and use MIDI, but then be limited to 7-bit data to feed a 12-bit DAC.

So, where does this lead me ? On a semi-impulse I went ahead and bought one of these : a small ARM Cortex-M0+ development board. At one third of the cost of a Raspberry Pi, too I might add. This board is in Arduino R3 form-factor too, I can plug in and use any number of existing Arduino shields to provide any functionality I need, though most is already built right in.

With this board, I get also to use the simply awesome mbed.org on-line collaborative embedded development service, libraries and compiler. I cannot begin to explain how impressed I am with this site and how easy they've made it to code for their supported platforms; suffice to say that it's really impressive what they've done, and that makes me happy as I don't have to waste time learning or configuring or otherwise faffing about with embedded tool-chains and development environments.

In summary, I can do the following with this new platform:

  1. Implement a plug-and-play USB MIDI device.
  2. Use the same DAC I already bought and tested.
  3. Implement something quite simple to sit in between a MIDI device/sequencer and the analogue world.
  4. Implement something quickly due to the existing libraries I can leverage from mbed.org.