Homebrew midi-cv box

midiDAC and double bass pitch and amplitude tracker.

Homebrew midiDAC with integrated double bass pitch and amplitude tracker.

After having built a x0xb0x this summer which I fitted with Brian Castro’s x0xio back panel mod I decided a good project to make would be to make a midi-cv converter box. Although the x0x comes with it’s own midi in, the firmware is a bit tempremental and I was getting a lot of skipped notes and no control over slides when programming midi sequences for the x0x in Ableton. After having played for more time than I care to admit to with the x0x I’ve come to the conclusion that although the internal sequencer rocks, especially when using the SokkOS firmware (funky pattern randomise not to mention the other extra features) the midi response is a bit naff.

This formed half the motivation for building a midi-cv box, the other came from my practice as a double bass player. The double bass being fretless lends itself to slides just like the 303, with my new pitch CV in could I take the pitch and amplitude of double bass and use it as a control signal for my x0x ? More on this side of the project later. The brief I set myself for the midi-cv side was simply that it should supply at least 5 cv outs with a resolution high enough to allow for some interesting tuning options later on. I also wanted proper midi in although I knew while I was programming the firmware I’d probably just send the midi byte code over USB .

midiDAC with integrated double bass pitch and amplitude tracker.

midiDAC close up, the lid contains the inputs and outputs for the pitch tracker

Having looked around the Arduino forums I found a lot of people using the PWM outputs on the Arduino and just running them through a low pass RC filter to get a smooth variable DC voltage out. This has the benefit of being quick to make but the downside of non-linearity across the domain of the duty cycly and the range of voltage out and the small portamento this approach will neccessarily come with. Having decided against using the PWM out and having recently been introduced to the analog devices catalogue by an a electronics friend I decided to get hold of one of their AD5668 DAC chips and dive into the world of surface mount chips and SPI. I’m not claiming to be the first to hook up a DAC chip to the Arduino as there’s a fair amount of evidence people have taken the same approach when building their own cv boxes but the approach worked and I’m pretty pleased with the results.

The AD5668 and an adaptor to make soldering wires on to a 5mm chip slightly easier, came to about twenty quid from Farnell. The rest of the box materialised over a period of about two weeks as I made nightly visits to my long suffering local Maplin (I swear they hate me in there, there’s only so many times you can roll in at ten to eight and ask for an opto-isolator and a bag load of assorted components).

Under the hood of the midiDAC

Under the hood of the midiDAC

Although optoisolators aren’t technically neccessary for midi input I’m a bit of a stickler for standards and seeming as I’d never used one before I figured I might as well. This Arduino forum post came in handy for the midi in part of the circuitry and the midi byte parsing, I particularly enjoyed the mspaint circuit diagram. As you can see the box is packed pretty tight and the eight outputs which are on switched mini-jacks and quarter inch jacks barely fitted in the enclosure. The pitch and amplitude tracker I built for my double bass is on a circuit board blu-tacked to the inside of the lid so you can’t see it in this photo but I’ll cover that in another post.

The most time consuming part was reading the AD5668 datasheet forwards, backwards and in random access until I’d squeezed all the functionality I wanted out of it. It uses a 32 bit address space with 4 bit padding at either end, 8 bits for commands and 16 for resolution on the output which swings between 0 and 5v. There’s a fair bit of left and right shifting in the arduino source code as well as some bit masking which is kind of funky if you’re into powers of two.

There already exists a fair wealth of material (e.g. here, here and here) on how to get the Arduino to deal with midi byte code so after having successfuly hooked up the Arduino to the DAC chip (SPI really isn’t that hard given the Arduino’s built in shiftOut method, reading this helped) I just started hacking apart kuk’s midi parsing code for my own purposes. I’ve put the source code here so you can get a head start on making your own if you’re interested in using the AD5668 or just seeing a project that makes broader use of the midi specification. There’s a fair amount of code dedicated to getting pitch and amplitude data from the double bass which you’ll have to scroll past.

Having documented the insides of my midiDAC I’ll leave you with two videos showing its implementation with my x0xb0x. I cooked up a little random scale generator in Max to play on 16th notes and synched the whole thing up to my drum machine via Ableton and Rewire (Max 5’s new transport still doesn’t accept MTC as a clock source, hence Ableton and Rewire joining the party). Enjoy.

Roast

Roast pork, crackling, several veg, yum !

Roast pork, crackling, several veg, yum !

This isn’t strictly speaking news and I don’t know how to post date wordpress entries so I can’t put this where it should be chronologically speaking but BLOODY HELL would you look at that roast! My lurvely gf cooked me this last month before we both went home to our respective families for Christmas. I just thought the world should know, just look at that crackling.

Introducing the ir2midi box

Another part of my forthcoming interactive tv installation is the hardware infrared to midi box I built for interfacing old tv remotes with max and jitter. This was a pretty simple project based around the now ubiquitous Arduino microcontroller and a rather handy i.r. receiver chip I picked up for next to nothing from Sparkfun.

The IR remote control to midi tool box.

The IR remote control to midi tool box.

The box plugs in to my computer using USB and a max patch takes care of churning out the midi to whatever application I fancy. As well as using it for my installation I use it for controlling Ableton while standing a.f.k practicing bass. I included a hardware reset switch on the top which I hardly ever use since the latest Arduino’s support software reset when loading firmware and seem much happier with Max’s port object.

I stuck on two LEDs to give some user feedback, green for power and red for code received. I initially tried to write my own firmware for decoding the signals but after googling around a bit I came across this guy’s code which worked much better than my own attempts and saved me about three weeks work. Basically the box just chucks out a unique hex code for any button on any remote that’s sufficiently close to the RC5 Philips standard which seems to be most of the ones in my house. Max takes care of assigning each code/button to a MIDI message, like note, program change or continous controller but I might in the future go back and shift this functionality from Max into the hardware. When I’m using it with Ableton I just route the midi back from Max to Live using midiYoke.

Under the hood of the ir2midi.

Under the hood of the ir2midi.

Looking inside you can see there’s not much going on here, just the Vishay TSOP85 receiver and the circuitry for the LEDs and reset switch (this is on the flip side of the vero board but it’s just some pull down resistors). The nice thing about the receiver was it came with the neccessary circuitry integrated so all I had to do was wire it up to the power and one of the digital inputs on the Arduino. I’ve recently become obsessed with socketing things so I can pull them out and swap/replace them as I see fit so I used a few of these yummy modular connectors from Maplin. That’s where I got hold of the frosted blue enclosure which lets through the i.r. signal unimpeded as well as looking quite shhhexy (as much as a blue see through box can).

Introducing the Vishay TSOP85

Introducing the Vishay TSOP85

That pretty much covers it. I’m pretty pleased with it as it is, the whole thing only cost about £30 and took not too long to build. In the future I’ll post up the Max patch, circuit diagram and a video showing it’s integration with Ableton. Changing scene with the channel change and controlling volume, stop, start, record, etc by remote is really quite handy for me as I play double bass and constantly putting it down just to stop/start is a pain in the arse.

Rutt-etra videosynth nearly ready

Since my last post I’ve been working on a few things, details of which I hope to post soon but I’ve spent most of my time working on my Rutt-etra inspired jitter/open-gl video synth. This along with a database youtube video harvester I wrote in Python will form a major part of my next piece I’m hoping to submit to the 2009 conference. I’m aware that it’s not entirely an original idea to build a software version of the famous 70s video synth and I have to admit to being inspired by vade’s work in the same area.

As well as the version of the software developed for my own use I’m working on stand alone and max patch versions for distribution to interested third parties. I’m pretty pleased with the vsynth, it basically displays an input video on to a set of parallel lines each of which can be deformed, point by point along the line, with the luminosity of the image controlling the height of each point. On top of this it does some pretty open-gl feedback and a nice feature I just added is to allow the mixing of the feedback with the source footage to give some pretty pyschedelic results.

Although it’s a bit of a cpu hog it runs fine on my old 1.8 GhZ single-core laptop as I went to great pains to move as much of the process on to the GPU as possible. I’m hoping to post a first general release of the patch by the end of next week so for now you’ll have to make do with some screenshots.

Original Dr Who title sequence Rutt stylee

Original Dr Who title sequence Rutt stylee

Rutt-etra psychedelic colour disco

Rutt-etra psychedelic colour disco