Wow! I decided to give Reason 6 a good try. First of all I wanted to recreate the sound of my last analog prototype (see and listen to the previous post). Oh, here’s a picture of that prototype btw:
In Thor I recreated the sound of a single analog oscillator like so:
A single Analog Osc generating a sawtooth waveform, no filters, enveloppe only sustain. Sounds… the same! Listen for yourself:
This recording was made via the buildin soundcard of my MacBook. Sound quality will improve when better audio interface hardware equipment is being used. The soundcloud conversion didn’t work out, not in PCM nor FLAC…
My soundcloud comment:
Tough upload, still sounds horrible. It’s not that important, just wanted to let you hear the hard-to-hear difference between my own VCO prototype and a construction in Propellerhead Reason’s Thor synthesizer.
This sawtooth is generated through an orange drop capacitor (sounded better then its wima counterpart) in a 100% analog sound path. Reset pulses are generated by an Arduino and the rise of the sawtooth waveform is controlled by a MCP4921 DAC. Each frequencies requires an exact voltage to level out the sawtooth. I haven’t calibrated these voltages yet so the sawtooth isn’t very precise yet. I like the raw sound though!
Long time no post. Sorry, real-life is sometimes getting in the way ;)
Recently I bought a Leaflabs Maple R5 to replace my Arduino’s. I really like it. Eventually I ported ChibiOS (realtime OS) to it and tried some software filter algorithms from musicdsp.org. Didn’t make me happy; 72Mhz isn’t enough to do serious audio filtering (at least not using my prototype coding).
New plan: use the Maple for the VCO’s (kind of DCO). Number of voices to be determined. Anti-aliasing virtual analog oscillator code will be constructed using research by Valimaki and Huovilainen. The first hardware voltage controlled versions of the VCF(s) and VCA(s) will be based on my own research regarding the VCF/VCA filter chip in the Roland Juno series. These original Roland chips last usually 15 to 20 years. Right now I’m working on a to be open sourced hardware version of these filterchips. The VCA part is solved using a BA6110 voltage controlled opamp. These aren’t in production anymore (as I know of) but easily obtainable via ebay. I used mooger5′s very valuable research to construct a BA6110 based VCA. His solution (using an SSM2044 for the VCF part):
mooger5, http://www.electro-music.com/forum/topic-17995-25.html, 15 march 2011
The VCA part like drawn by mooger5 is working perfectly! In the next few weeks (busy, busy) I’m going to start working on a VCF part using the LM13700 OTA. Fingers crossed! Resources are the great courses of Aaron Lanterman (Georgia Tech) and, ofcourse, the 80017 VCF/VCA teardown from obsoletetechnology. When the VCF part is working, my plan is to replace the BA6110 with, probably, a LM13700 OTA. This solution will be the base on which I’ll build my own hardware filter and amplifier.
Looking for an original solution for a voice generator (instead of the Juno 82c54 solution), I decided to dedicate an entire Arduino to voice generation.
Time to start work on waveshaping. My synth is now able to generate 6 voices of musically tuned square waves. Nice, but pretty boring ;). First step is to shape the square wave to a sawtooth wave. This is the square wave from 1 voice:
Inspired by the following waveshaping schematic from the Roland Juno 6,
I came up with the following solution:
The OpAmp is a LM324N, suitable for single +5V power (remember my USB requirement). The transistor is a 2N3904 NPN instead of the PNP used in the Roland schematics. All resistor and capacitor values are determined by the parts I have in my stock. The minus voltage on the capacitor integrator loop is generated via an ICL7660 IC (transforms + voltages into – voltages). Result:
Tada: a sawtooth wave. The peak of the wave is not at 5v because of the maximum output swing of the LM324N OpAmp (+V – 1.5V).
Now I have to find the best values for all the components to generate a normalised saw wave (peak at 3.6v) for all frequencies. My synth should be able to handle all frequencies between 8Hz (midinote 0) and 4000Hz (around midinote 107).
mmmm what if the entire synth could run on 5v? Just power it over USB. It would make a perfect companion for your laptop but also very easy to install with your desktop PC. The development is also a lot more “portable”. Now I have to work with my own bulky +/-15V power supply. It would be fantastic to just work with an USB cable connection. My MacBook can charge my iPad (1A) so the USB power connection should be powerful enough to drive a (tiny) synthesizer.
Leading to this idea was also the fact that I received my sample MAX7403 8th order lowpass filter chips from Maxim today. These operate at a single 5V power supply and I think they’ll make great audio filters! Cutoff is addressed via square wave so the Arduino PWM can operate this…
Because I did not pay in time for my .com domain (I do have some excuses but won’t bore you with them ;) ), it got cancelled and I had to switch to a .net domain. Thinking about it, a .net does actually fit perfectly for this website about the build of a synthesizer. So from now on it’s sinneb.net!
At the bottom of this post you’ll find the newest code for the prototype. This code has some nice enhancements over the previous:
A first begin with ADSR code
A better midi implementation. The Arduino keeps track of the order of notes played so note-off commands are treated right. A note-off “resounds” the previously played note. If there is no previous note (all notes-off), the output is silent; no note is played. This new implementation also leads to a better legato management.
A 128 values linear to logarithmic lookup table to give the ADSR (MCP42100) a musical course.
Sketch for proto 7:
Here I’m going to use 1 dataline and 1 clockline for all components. This saves on the digital out pins from the Arduino. There’s going to be a lot of data shifting through the 4 74hc595′s and the 3 mcp42100′s… A challenge ;)
Where’s the quantize when you need it the most? ;)
Proto 5 has a first ASR (attack sustain release). The MCP42100 (the programmable potentiometer from a previous prototype) generates the enveloppe. Sounds pretty ok, though the attack is a little off which made the playing difficult ;). I will start working on a logarithmic scale instead of a linear scale.