I've been selected to take part in the element14 Open Source Music Tech Design Challenge. I'll be blogging in the element14 Community site as I go. Here's my project overview.
What is Hexynth?
My vision for Hexynth is to be an open source system of snap-together, hexagonal, electronic music building blocks, which can be programmed using JavaScript, and used for teaching music synthesis and coding. I believe that computer music is a great platform for teaching the basics of coding and electronics, and it appeals to a diverse audience. I’d love to see more students from an arts / music background turn their passion for music into a passion for coding and circuit bending.
Design
Each hexagonal module will have a different function: some of these will be synth modules, for example: different types of oscillator, envelopes or filters, but others will be generic input or output hardware modules to add a physical aspect to turn the music synthesis circuit into an instrument. Examples of generic input modules might include a Light-Dependent-Resistor, pressure sensor or potentiometers that can be used to control gain or any other aspects of the sound, while examples of output modules include RGB outputs to blink lights along with the music, or a speaker.
Why hexagons? Because they look cool! Also because hexagons have more sides than rectangles, allowing multiple inputs and outputs to each module without having to use splitters. The modules snap together so they can be powered by and communicate via the same bus, and so that students don't have to fiddle around with solder or breadboards.
I'm designing a 3D printed hexagonal base plate to be the chassis for each module and looking into using multi-pin pogo pin connectors with small neodymium magnet on the sides of the modules to allow them to be snapped together. This system is similar to charging cables used for mobile devices and the Pebble SmartWatch, and a little bit like the littleBits system, but will not be limited to just 3 pins, to support more sophisticated control of and communication between modules. The BeagleBoneBlack will be mounted on a larger 3D printed "hub" that the hexagonal modules will dock to.
Although the modules will be snapped together and will have some basic analog default functionality, I want each module to be separately addressable (e.g. via i2c) so they can be individually controlled by software. So the interactions between modules will extend beyond which ones are physically snapped together when they are being controlled via a program.
Software
I’ll be developing a Node.js library for making sound with the Hexynth hardware modules by programming them using JavaScript, building on top of the Johnny-Five (NodeBots) Robotics Framework, which already runs on the BeagleBone Black platform. To go along with the modules, I'm writing a series of interactive web-based tutorials aimed to step students through the basics of music synthesis by programming Hexynth modules using JS. The idea is that the tutorials can be hosted on the BeagleBone Black and accessed via a Web Browser in a classroom setting.
Hardware
Initially I'll be prototyping the circuits for the modules using perfboard, but I'm looking forward to learning about designing custom PCBs (something I've never been brave enough to attempt before!). Each module will incorporate a micro-controller to communicate back and forth to the “hub” (i.e Node.js program running on the BBB). I have a few ATMega328P chips that I'm going to start to use for prototyping the module communication - these might be overkill for this purpose, but I've salvaged the chips from some old Arduino Unos that were fried during NodeBots workshops! I'm drawing inspiration from work that is happening in the NodeBots community on developing i2c backpacks to support specialised sensors and actuators.
Challenges
I want to make this an open platform that can be extended with many different types of modules, so one challenge will be developing the communication protocol for messages to support all types of capabilities. So while I wait for the kit to arrive, I’m reading up on OSC, OSC Serial, MIDI and Firmata to make sure I build on an existing open solution.
I have no idea if communication with the modules via i2c will be fast-enough for the real-time demands of electronic music making, but I can't wait to try to build it to find out!