Before heading out to Maker Faire Bay Area, I managed to polish off a new version of the Healer synth code for use with MidiVox - woohoo!
Version 2 of the firmware saves customized parameters (filter, waveform, etc) to the Arduino’s built in EEPROM. Whenever the MidiVox’s RESET button is pushed, two quick flashes of the DATA LED confirm that a save+reset has occurred.
I’ve also disabled the velocity response and its relevant control parameter after figuring out they were to blame for some notes becoming ‘stuck’ on. Personally, I’m not a big fan of note velocity and never thought it felt quite right on a monophonic synth like this. That being said, if anyone’s sad to see velocity go (is that a pun?), please let me know in the comments and I’ll consider reimplementing it as an option in the next revision.
Healer v2 can be downloaded here.
A second round of hacking has turned up a much better method for controlling the SX-150 via MidiVox+Arduino. (is it still “hacking” if it’s your own design?)
After running a wire directly from the DAC’s output to the SX’s stylus (bypassing the shield’s low-pass filter) octaves 0-5 are now usable. During my initial testing, the SX has stayed acceptably in tune over a 4-octave range - which I can hardly believe myself! A simple one-line conversion did the trick -
noteOut = (noteOut+1) * 20.45;
Download the MidiVox->SX-150 code here. (updated, see below)
To use the sketch, you’ll need to remove the 909Ω resistor running off the DAC chip’s output (pin 8, shown above), run a wire from the DAC’s output to the SX-150 stylus, and connect one of the available GND pads to the SX-150’s ground (outer ring from either “EXT. SOURCE” or “OUTPUT” jacks will work)
Update: In my gleeful haste to post the above info, I overlooked the very likely possibility that not all SX-150s will respond to a certain control voltage level in the same way. In fact, because these little analog synths use such inexpensive parts, it’s pretty much guaranteed no two will respond exactly the same way. I acquired a second SX for testing, and it seems to be ‘tuned’ a little less than 3 whole notes higher than the one I originally used.
Here’s a new version of the sketch that uses the variable “tuningVal” to achieve an acceptably in-tune output from the SX. Use a guitar tuner or tuner app to measure the output of the SX while controlling it via MidiVox + MIDI keyboard controller. Choose a reference note (ie - middle C ), and adjust the value of tuningVal (in the file named MIDISetup.pde) until the SX’s output matches that reference note. Example: Updating the code to “ tuningVal = 8.5; “ got my SX to play pretty nicely in tune.
After a request in the forums, I took a stab @ generating control voltage for the ever-lovable Gakken SX-150 mini analog synth. This initial sketch will convert MIDI note values 47-84 into varying pitches w/ envelope triggers on the SX. Those interested can grab the code here -
- Switch the MidiVox AUD/CV jumper over to CV side (connecting the center and inner-most pin)
- Connect the shield’s signal output (left or right channel from the onboard 1/8” output jack) to the metal contact on the SX-150 stylus.
- Also, make a connection between GND on the shield to any ground point on the SX-150 (the exposed metal barrels on either of the SX 1/8” jacks will work)
The notes played won’t be in tune (that’s a tall order for the lil’ SX), but I’ve found that using a keyboard to control the Gakken is a lot big improvement compared to the standard stylus/ribbon interface.
Damian wrote in wondering how the MidiVox can be used as a MIDI to control voltage converter. I figure my response might shed some light on the topic for others as well -
I hope to have an example MIDI->CV sketch up soon, but suffice it to say -
a DAC (such as the MCP4921 chip) outputs a specific voltage level set by according to data sent out by the Arduino (or other microcontroller). The example synth sketch I have up now continuously sets the DAC's output to varying levels to create a waveform, (the speed or frequency at which it does this determines the pitch of the note). To use the DAC as a control voltage generator we only need to set the DAC to one specific voltage level for every MIDI note - no need to be concerned with any specific frequencies.
if (incomingNote = C4) outgoingVoltage = 3.250;
if (incomingNote = D4) outgoingVoltage = 3.417;
… and when no note is being played, we turn the outgoing voltage to zero.
Anyway, that's the basic idea. In order to be used with analog synthesizers and the like, we’ll probably need to solder a wire/connection to one of the digital output pads on the shield and set that pin high whenever a note is being played (aka - Gate)There’s also a jumper on the board labelled "AUD/CV", which disables the 10uF DC-blocking capacitor - which needs to be set to (yup, you guessed it) “CV” to enable control voltage out ;)
The first batch of MidiVox kits are now available for purchase - big thanks to the crew over @ Maker Shed for making this happen!
The relevant parts list & build instructions are now up as well (my apologies for excessive puns used therein)
Schematic + PCB files will be posted ASAP.
Update: almost forgot this little demo vid of the kit in action -
Apologies for the delay - the 1st of March has come and gone and still no method for acquiring a MidiVox kit exists. Rest assured they will be available soon (about a week from now) from a suitable online distributor. Reason being - after packing up the first batch, I realized my current studio (as seen in all those MAKE videos) is just not able to accommodate the shipping process. In the meantime, please watch this video over and over again, kthnx! -
Packed up the first 50 MidiVox kits and sent out a couple for test builds - still have a couple things to do in software before I consider it “done”.
PCBs are in from the fab house and I’ll be packing up kits this week!. I’ll be updating the MidiVox page with more content as I go. Looks like these things are actually, finally, truthfully, honestly gonna get done - at last! Yes really - FOR REALS!!