More MidiDuino02.01.2009 18:39:52
Lately, besides producing the midicommands and monojoysticks (pics soon in the new year!), milling, layouting, soldering, I worked on my talk "Algorithmic Music in a Box" at the 25C3 in Berlin. I wanted to present all the nice weird ideas I came up while developing the firmwares for our devices (controllers + synthesizers), and also wanted to do a workshop so that people could try hands on the good fun to be had with custom programmed MIDI controllers. While looking for how I could best do a workshop, I decided to build a few barebones "minicommand" boards, with a textdisplay, 4 encoders, 4 buttons, USB and midi. I didn't want to take midicommands because they would be too expensive for the workshop, and being way overfeatured for just trying out things. So I designed this nice board and decided to integrate it into the arduino environment, because I think that arduino (like processing) is really today's "Logo Turtle", allowing people who never came in contact with programming to quickly have fun and get up to speed. I integrated my MIDI bootloader into the Arduino GUI, and rewrote all my code to be more "arduino-like" in C++.
When I did my first tries, I was immediately completely enthusiastic, because it was so much fun to write a few lines, upload them, and have a new firmware, compared to what I would do before which would involve starting a new project, creating a makefile, copying libraries over, etc... In the first few hours, with a semi-empty library, I wrote down more firmware ideas and hacks than in the whole month before. So I decide to put some real work into the library and this is what exists at the moment:
- MIDI input and output (parsing incoming MIDI data)
- GUI library: display, encoders, buttons
- USB MIDI input and output
- USB MIDI and normal MIDI bootloader
- MIDI Clock, very very tight, both internal and external sync
- Sequencer framework
- MIDI Tools: scalers, random functions, mapping
- MachineDrum support: pitched machines, fx machines, parameters and tracks, parsing of incoming sysex
- external EEPROM storage
So in the last 2 days, I wrote firmwares that do: control the MachineDrum with additional LFOs, make some nice random wind chimes, a 4-track euclidean polyrhythmic sequencer, an arpeggiated polyrhythmic arpeggiator, a random mutator for the MachineDrum, a beat-slicer for the machinedrum, just check it out in this video (click on fullscreen to be able to read the code, or go to blip.tv). The funky stuff starts at 7:50. For those of you who don't have a MachineDrum: the MachineDrum normally can't do polyphonic pitched sound "easily". Also it can't really do polyrythms.
This is pretty early state, but I am completely amazed by it, and I think the long time and thought that went into this at a subliminal level while developing the MidiCommand really helped shape this. So what will this bring to the MidiCommand: the MidiCommand also can be programmed through arduino, just plug the controller into the PC, and upload either the "standard" firmwares, or a sketch of your own. Share your sketches, download sketches by other people, basically it's an opensource midi controller that you can program on your own without big setup difficulties. Also, I put a lot of work and effort into the libraries, and where can you just write MidiClock.mode = MidiClock.EXTERNAL; and have tight external midi sync! Stay tuned for more goodness, I'll first post the slides and pdf of my talk at 18:00 on sunday at 25c3, then write up on the workshop on monday (11:00 - 14:30 at 25c3), and then in january post the first release version of the environment along with a nice pdf book, timed to be up with the first MidiCommands shipping. Also, I will probably build a completely barebones development kit with just USB and MIDI, because good quality mechanical hardware and display is pretty expensive.