The Big Idea - wrightflyer/Synth GitHub Wiki
Long story short. I owned a Casio VL-1 VLTone...
It was too cool for cucumbers. Google it if you don't know it. Ostensibly a calculator but with a piano keyboard, a number of tones, a number of rhythms and possibly coolest of all... an ADSR. If you just said "WTF?" you may be in the wrong place.
My VL-1 died, something about the zebra strip that connected the small LCD to the main PCB.
Ever since I've wanted a portable keyboard that would have a small set of keys and some way to fiddle with noise sources to "shape" the tone.
This idea resurfaced recently and I started to wonder how one could build a "synth" from scratch. At first I looked at the old Yamaha chips used in home computers and whether something like that could be bolted onto a micro to make a "noise box". But then I hit sites where others who wanted to build their own synths were asking how to do it. Perhaps key to all this was this page:
5 Things to consider when building your own synth
This particular site was a bit of revelation as the 4 types of "brain" it suggested for the heart of your synth were:
- Axoloti
- Arduino (Uno)
- Teensy
- Linux SBC (like RPi etc)
As I have strong interest in AVR micros then 2 interested me most but as the original Teensy were just "small Arduino" but also with AVR CPUs I thought that was possible but surely neither an Arduino nor a Teensy have the kind of sound processing power you might need for a Synth and would need some kind of additional hardware support like some kind of "sound chip". How wrong I was.
Now by a strange irony I was actually the author of this thread:
https://www.avrfreaks.net/forum/whatever-next-fastest-arduino-so-far
In that I pointed out to AVR users that there was an "Arduino" but instead of the usual 16/20/32MHz AVR it had a 600MHz ARM processor. Now that is the kind of computing power that could do a LOT of realtime audio processing.
So I looked into Teensy and found that the Teensy 4.0 and Teensy 4.1 (for about £20 and £28 resp) also had an "Audio Adapter" which is basically a fancy DAC that uses I2S (serial interface specifically for PCM audio) to connect to the I2S peripheral in the Teensy and act as a sound output (and possibly input).
Apart from the fact that Paul Stoffregen at PJRC who designed and built Teensy had also developed a rich audio library to work with the powerful little micro board perhaps the coolest thing of all is this:
https://www.pjrc.com/teensy/gui/?info=AudioSynthWaveformModulated
This is so cool - it really is like a Lego set - you pick your building blocks from down the left, drag them into the middle then use the mouse to drag connecting wires between them and all of a sudden you have a synth design and it will then generate the source code that defines the connection arrangement..
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
// GUItool: begin automatically generated code
AudioSynthWaveform LFO1; //xy=140,147
AudioSynthWaveform LFO2; //xy=142,201
AudioSynthWaveformModulated waveformMod1; //xy=302,148
AudioSynthWaveformModulated waveformMod2; //xy=303,191
AudioSynthNoisePink pink1; //xy=308,232
AudioMixer4 mixer1; //xy=464,193
AudioFilterStateVariable filter1; //xy=600,196
AudioMixer4 Filter_Select; //xy=755,199
AudioEffectEnvelope envelope1; //xy=913,199
AudioOutputI2S i2s1; //xy=1074,200
AudioConnection patchCord1(LFO1, 0, waveformMod1, 0);
AudioConnection patchCord2(LFO2, 0, waveformMod2, 0);
AudioConnection patchCord3(waveformMod1, 0, mixer1, 0);
AudioConnection patchCord4(waveformMod2, 0, mixer1, 1);
AudioConnection patchCord5(pink1, 0, mixer1, 2);
AudioConnection patchCord6(mixer1, 0, filter1, 0);
AudioConnection patchCord7(filter1, 0, Filter_Select, 0);
AudioConnection patchCord8(filter1, 1, Filter_Select, 1);
AudioConnection patchCord9(filter1, 2, Filter_Select, 2);
AudioConnection patchCord10(Filter_Select, envelope1);
AudioConnection patchCord11(envelope1, 0, i2s1, 0);
AudioConnection patchCord12(envelope1, 0, i2s1, 1);
AudioControlSGTL5000 sgtl5000_1; //xy=644,111
// GUItool: end automatically generated code
With any block in the design highlighted (or selected at the left) the panel on the right gives full documentation of the functionality available.
Having seen all this I started to look at what you could do with Teensy 4 + Audio Adapter to make a synth and that's when I found this inspirational set of YouTube videos by Dave at "Notes & Volts":
- Pt 1, details: https://www.notesandvolts.com/2018/05/teensy-synth-part-1.html video: https://youtu.be/UJcZxyB5rVc
- Pt 2, details: https://www.notesandvolts.com/2018/06/teensy-synth-part-2.html video: https://youtu.be/qWd60HWCCVI
- Pt 3, details: https://www.notesandvolts.com/2018/06/teensy-synth-part-3-keyboard.html video: https://youtu.be/IoADj8dvTQc
- Pt 4, details: https://www.notesandvolts.com/2018/07/teensy-synth-part-4-adsr.html video: https://youtu.be/wHkcb9NAnzs
- Pt 5, details: https://www.notesandvolts.com/2018/07/teensy-synth-part-5-waveform-select.html video: https://youtu.be/RQWKPd6XH54
- Pt 6, details: https://www.notesandvolts.com/2018/08/teensy-synth-part-6-filter.html video: https://youtu.be/6VDNHlFealo
- Pt 7, details: https://www.notesandvolts.com/2018/08/teensy-synth-part-7-pitch-bend.html video: https://youtu.be/O1TU3DiBy4E
- Pt 8, details: https://www.notesandvolts.com/2018/09/teensy-synth-part-8-lfo.html video: https://youtu.be/zphkBTkOIyQ
- Pt 9, details: https://www.notesandvolts.com/2018/11/teensy-synth-part-9-midi-input.html video: https://youtu.be/l34CNfwfuIY
- Pt 10, details: https://www.notesandvolts.com/2019/01/teensy-synth-part-10-hardware.html video: https://youtu.be/Inwbu9DgVeU
Thus inspired I ordered up some Components
I then tried some initial Experiments
Update: Should have done this sooner but if you search "VL-1" on Youtube there's loads of good stuff about it. In particular there's a set of videos by "Keen on Keys" and in that he tells you about easily playing simulated VL-1 on a PC. First go to:
https://www.tone2.com/nanohost.html
At the bottom of the download page get the free download of NanoHost, unpack that somewhere - you basically want the 32 or 64 bit .exe file. Next go to:
https://vst4free.com/plugin/259/
or
http://www.vstplanet.com/News/2012/Cheapo_Tone.htm
or
https://vst4free.com/plugin/813/
and get one (or both) of the free DLL. In some directory unpack either DLL (CheapoTone.dll or VL1.dll) then copy into the same directory one of the NanoHost EXE files (start with 32 bit) and make sure the copy has the exact same name as the DLL so you end up with CheapoTone.exe or VL1.exe. Then run it and the world is your oyster! Great memories. Maybe also watch the videos on YouTube too. The key thing is the 8 digit number you put in the calculator memory before you switch to "ADSR" play mode. The 8 digits control:
- 8th - waverform (0..9 = piano, fantasy, violin, flute, guitar1, guitar2, horn, electro1, electro2, eletro3)
- 7th - Attack
- 6th - Decay
- 5th - Sustain Level
- 4th - Sustain Time
- 3rd - Release
- 2nd - Tremolo (lower digits = more effect)
- 1st - Vibrato (ditto)
If this doesn't inspire you to design your own synthesizer I don't know what will ;-)