Currently reading David Crombie’s The Complete Synthesizer. I understand that for a synth to be polyphonic needs essentially more than one voice. I understand highest note/lowest note/last note priorities etc and that a duophonic synth has two voices that are usually assigned lowest note priority to one voice and the other voice assigned highest note priority. So my question now relates to say sounding full chords - so lets just say we are going to play a C maj chord made of the notes C, E, G. Does this mean that the synth needs at least three voices to play the chord and likewise if we need a 7th chord, 4 voices? Now let’s go back to the C maj chord for the mo. If we assume control voltage is standard 1v/oct and C is on 1V, then E would be 333mV more and G 249mV more again, yes? So how are three different control voltages 1.000V, 1.332V, 1.581V sent from the keyboard/midi controller to the three different voices simultaneously? Understand you need some kind of microprocessor etc but how do you actually send each of those three voltages to a different voice to sound the chord?
Cheers Chris
I have built around 7 polysynths from scratch, yes you need a voice per note to be played, minimum of 4 upto the max that you can control. Typical budget polys are 4-6 voice and more expensive can be 8-16 if they are analogue as its all expensive. Yes a micro is required, maybe more than one depending on the architecture. Digital oscillators are often used for stabilty as when you get in to the realm of analogue VCO’s then you need to look at tuning, stability and autotune capablilities to stop the unwanted drifting of the oscillator pitch. I still have not mastered a decent autotune routine yet so I’m still using digital VCOs. You alo need to consider common parts such as LFO and noise, power etc. A single LFO can modulate all your voices and a single noise source can feed all the voice filters.
As for the microprocessor, then you need to consider inputs to read from pots and outputs to send to the voices, some parts again are common and some are unique. For example the attack control for the filter ADSR would be common across all voices where as the pitch CV would be unique to each voice. So you would need to generate one CV for the filter attack and upto 8 pitch CV’s for your voices. You need a MUX to read pots and a DEMUX to write the CV’s to the outputs for voices and a generous helping of shift registers for switched outputs and LED control etc.
Jan Knipper (polykit) made an excellent 6 voice polysynth based on the juno 106 DCO design and the matrix 12 filters. It is not programmable, but later he created another with the programmer facility over MIDI. I took his original design and added a second set of oscillators to the DCO’s and some other bells and whistles and made it fully programmable and rack mounted.
Building a polysynth is no easy task, maybe Jan Knippers boards will help you create a good polysynth or you can read through my designs and build your own.
I’m currently building an 8 voice hybrid, Digital oscillators and analogue filters polysynth. Dual DCO’s per voice, matrix 12 filters and a hands on interface.
Hi Craig, thanks for taking the time to reply. A lot of useful information there and definitely some projects to take a look at. However, at this point in time, i certainly don’t have the skills to undertake such a project. I thought to start with i might build some modular stuff to get more of an understanding of the building blocks required and the control processes involved, interfacing with midi etc, then progressing from there by adding greater complexity or perhaps trying to build a polyphonic synth but in stages, so to begin vco/dco/vcf etc and then increase voices etc. If it’s indeed possible to do that, so an entire rebuild is not required between each stage. Essentially a working synth gradually increasing functionality with time, but something playable at the end of each phase. I produce drum and bass music and have an Arturia Minibrute2, unfortunately it’s monophonic, my ultimate goal would to be able to build a bassline synth (3 octaves maybe) similar to the Minibrute2 but make it polyphonic and maybe with just three voices for simiple beefy low bassline chords.
Cheers, Chris.
Hi Chris, in that case you could build voice cards, rather than a huge board with all voices on it, you can build a voice card for each voice, that was Jan Knippers approach with his designs, he made some PCBs for voice cards and Im sure there are some modular “voice cards” out there too for future reference. Only thing with voice cards is you need some sort of back plane to deliver signals and controls to them and you still need the common components such as the LFO, noise circuits etc.
Also some of my designs were on daughter cards, where I built complete mixer sections, filters, envelopes and VCAs on each card, but I had a seperate DCO section with 8 oscillators to feed each card, it was built up gradually.
That sounds like a very good idea, building up by daughter boards etc. I do have a 3d printed modular rack and have printed pcbs for the psu and associated power supply filter etc that i’m just setting up, so i might use that to perhaps test vca, vco, dco, lfo designs and builds. I haven’t really decided yet on what i really want to end up with but i guess ultimately something that works and i can continually modify and add too.
There is a project that uses a main micro based controller and additional voice cards, each voice card has it’s own Pico controller and an AS3394 or 7 synth on a chip, plus some associated components. It allows you to build as many cards as you like. Currently they have a 10 voice prototype, but you could just build a 3 voice.
That’s definitely worth a look, at least as a starting point for some ideas but wow the cost of a teesy-lc here in Australia.
I think it’s not important to use a Teensy LC that’s pretty much obsolete anyway, it’s function is to convert MIDI to i2c messages, so you could probably use a cheaper, readily available and much faster Teensy 4.0. Just transpose the pins to the T4.0 I would say. In fact for such a modern project I’m very surprised they have used an old obselete Teensy LC. On the PJRC.com website it doesn’t recommend using the LC for any new projects.
So, I’ve been looking at yourr Midi to CV converter and I think that if I cut it down to 3 voices, I can use the Arduino Uno (which I have lying around) which would get me three quarters of the way there for my bass synth controller. I can then add VCO/VCA/VCA and use the CV/gate/trigger/note etc to control the three voicings.
I’m not sure an Arduino nano/uno has enough pins to support 3 channels, 1 midi in, 3 gates, you can lose the triggers, 5 SPI pins including the chip enables, 3 encoder pins, 2 SDA pins. Might be just enough available. You would have to map the pin requirements to your nano pins to check.
Edit: not looked at a nano/uno for a while, should be enough pins with 2 or 3 to spare.
Yes that’s what i thought just enough pins and gives me somewhere to start and learn the midi interfacing, dac control etc and then can build a couple of boards with vco, i could perhaps then do as you suggest create daughter boards with vco/vcf/vca with just manual controls for the vcf/vca
The encoder lib is teensy specific, so you will need to find a different encoder library, although you could just use buttons instead to increment the menus etc.
Just had a look on the net there is a bounce2 for Arduino so shouldn’t have a problem with the encoders, the one that I might is the USBHost_t36.h which is Teensy specific. (Learning Arduino too!)
Well thats used for USB hosting which the Teensy 3.6 and 4.1 support natively, so if you are only using MIDI and not usbHOST then you can remove all references to that including the midi section that sets up the usbHOST input.
Yeah looks like I’ll have to delete anyway because there is a USBHost.h but it’s only for DUE not UNO and I can’t seem to find one for UNO. So like you said removing this part of the code will be the go.
You know, thinking about this, the best front end would be the Pico DCO by Polykit or my variant, it uses a cheap Pico and some opamps, is scalable from 1 to 8 voices and has a stack and detune configuration. It’s probably perfect for what you need as it has stability and the usual saw and pulse with PWM outputs. It is also controllable from standard midi or usb midi. So you don’t need a midi to CV converter, you don’t need to keep analogue VCOs stable and in tune. My variant will give you two DCOs per voice for fatter detuned sounds without the need for a chorus, but you can always add one.
I posted a stripboard version of the polykit build - would definitely be scaleable, the bottom image on the link shows what you’d need to get two voices going (except for the vca and mixer board, which shows what you’d need for 6 voices). There’s no filter here as I just mixed the voices down and passed to a single ms20 filter, which is a limitation.
I later did a version for my brother with polyphonic filters too using AS3350 chips, but I did that on pcb. Would be simple enough to use one of the AS filter chips and build a stripboard for each, though you’d also need to double up on the envelope generators.
If you built a 4 voice version then there would be enough pins on a Pico or YD-rp2040 with extra pins to build a dual DCO version with 4 gates and a DAC output for CV outputs for filter tracking and velocity if required. One 8 channel DAC for $5 and two quad op amps for all 8 CVs. You could even use a couple of cc messages sent to the Pico to turn on/off the keytrack or vary the amount from 0-127 steps which is what I’m doing in my latest build.
Yeah that might make sense, as i could use midi out from either my akai mini mkiii via usb or yamaha mx61 via midi. (Hmm, wonder if the Arturia Minibrute2 sends monophonic or polyphonic data from its keyboard to midi out even though it’s only mono).
Did you use the polykit code to program your the picos for the DCOs, did you alter the code or rewrite entirely? Just looked through your repository for the polyphonic duo and i can see the source code for teensy 3.6 master controller but can’t see any code for the DCOs. Was thinking that’s where i might start.