Seeking feedback on Version 0 of my synthesizer project

Hello wonderful people! Over the last several months I have become completely taken by synthesizers and am in the process of creating one on a Teensy 4.1. While I have some experience coding and many years of playing the bass guitar, this project has brought me into so many new worlds: sound synthesis, digital signal processing, C++, development boards and microcontrollers, electronic schematics, and of course... TONS of synthesizer music. It has been one of the most fun and stimulating experiences of my life.

I recently achieved the very exciting milestone of building a somewhat usable synthesizer! It's mostly on a breadboard, but I soldered all the peripherals and mounted them in a cigar box. You can check it out on Github, but here are the key details:
  • Teensy 4.1 with Audio Adapter RevD
  • Powered through the micro USB
  • Peripherals: 1 push-button rotary encoder, 1 standard push button, 1 toggle switch, 7 potentiometers (all of my potentiometers) connected via mux

I have big dreams for this project, and very clear plans for my next iteration, such as creating a more robust signal chain, and designing a PCB with many more knobs, buttons, switches, etc. Before I go too far in that direction, however, I am hoping to solicit your feedback. As I mentioned, everything I have done for this project is completely new for me and I have most definitely made mistakes or at least missed some important best practices. I am curious for any thoughts you have to share, and am particularly hoping for input on:
  • The signal chain - does anyone have advice for a signal chain that is versatile and fun while still being manageable for a beginner?
  • The code - any suggestions for structuring it as the signal chain gets more complicated? Did I do anything in a roundabout way that could be cleaner? ChatGPT helped a bit, so I expect there are still some "idiosyncrasies."
  • The schematic - I had never read a schematic in my life, let alone created one before this project. As I get ready for PCB design next, I really want to make sure I haven't missed anything major here.
All the project documentation, including photos and a youtube video, are on the GitHub project. Thanks in advance for your help!

Also, I'd be remiss if I didn't share that my newfound love for synthesizer music is taking me to a Magic Sword show this week! Can't wait to hear some synth shredding live!
 
You need to get knobs on those pots! Watch out for loose wires if you remain with it breadboarded - a more permanent construction will pay off the first time it gets dropped perhaps!

I suspect your volume issue is the pots are linear and you are not converting the output from the volume pot exponentially for the gain setting? For a 50dB range on the volume you could use something like:
Code:
float potNormalized = ??;  // convert raw value to 0..1 range
float dB = potNormalized * 50.0 - 50.0;  // -50 to 0 range
float ratio = pow (10.0, dB / 20.0);
uint16_t gain = uint16_t (0x7FFF * ratio);
 
Looks like a wonderful project!

Is there a reason to use the Teensy 4.1? Wouldn't the 4.0 be sufficient? Seems that there a some more pins you could use which are covered mechanically by the audio board.

For the encoder it could be helpful to use debouncing capacitors to make it more robust. Possible that it runs without problems now.
There is an encoder library available which could be handy (included in examples of Teensyduino).

Structuring the code and audio library parts if it gets bigger:
Potentiometer mapping: try to use nonlinear mappings as logarithmic or a simple square function. This makes the control of times and frequencies much more intuitive. E.g. it doesn't make much sense for the frequency control of the filter to have the same angle for 9000 to 1000Hz and from 0 to 1000 Hz. Usually a finer control for lower frequencies is desired.

Keep us updated!
 
Back
Top