I recently started working on making my own synth because I can’t afford to buy one but I have already a Teensy 3.2 with its Audio Board.
So I made a simple polyphonic FM synth, that is also standalone, meaning I can connect my Launchpad to it to play notes without a computer in between.
The setup is really simple, I just have a USB Host chip connected to the Teensy, and then I can plug the Launchpad or any Midi instrument to it via USB.
Here is a demo:
For now I don’t have any potentiometer connected to it to adjust parameters while playing so the envelope and the modulator frequency are fixed but I’m planning on doing that.
I open sourced it on my GitHub. It’s at a very early stage but you can already use it or even contribute:
This project is very inspiring!! Your design is simple but very precise. I think this is an excellent framework for beginners who are looking to program a simple hardware synth. I am reading through the git and have learned quite a bit!
I started getting into synths through modular. More recently I’ve really come to appreciate hybrid hardware like this, mozzi, axoloti, and norns. It’s so much more accessible in a way.
Do you think this code could run on something like an ESP32?
Yes if you have some skills you could make your own modular things for cheap. I’m starting with this synth that I will improve and then I’ll make a simple drums synth too. My goal is to be able to play dawless on a budget.
I never tried myself the audio library on another chip, but I asked on the Pjrc forum, apparently Adafruit did a fork of it to use it with their hardware so it might be compatible with other chips:
The later Teensys are ARM M4 devices so anything with an ARM M4 chip should be able to run teensy code with just a little effort. Not for a novice, but someone who has worked with at least two different ARM devices with the same core would have the general sense of what’s required to port it. The bulk of the heavy lifting here is done by the audio library so the synth logic, voice allocation and MIDI mapping layer would be instantly portable if the audio library is.
Nice project too, just quickly looking at it I noticed it’s using the ubs.h library that apparently is made specifically for the Arduino Due: https://www.arduino.cc/en/Reference/USBHost
This should be changed if used with a different board like I’m doing with the Teensy+usb host chip.
oh you’re right, i forgot teensy can’t use that lib directly.
theres this, maybe similar/same API?
[ed] hm… no, not really the same.
[ed ed] but… not too bad. (Task exists, &c)
[ed ed ed] BUT… sorry i finally realized you said teensy 3.2 and a shield.
i haven’t really looked at this project for 5 years. port for both USBHostShield arduinos, and teensy 3.6+ would be useful. and i think all the FTDI and monome protocol stuff would translate.
maybe there is some newer / better option for usb host middleware across arduino types / shields.
for clarity: FTDI is the usb->uart chip in older monome grids. these devices definitely require a host-side driver. on linux these are in the kernel. in 2012 i had to roll one for aleph and in 2014 i had to roll one for Due, both modeled on the linux sources. is there an official driver built into teensy libs these days?
With Teensy 4, you could do the audio board and USB-host all in one - and not have to rely on a separate USB host chip. There’s a new Audio shield for Teensy 4
Yes Teensy 4 is like Teensy 3.6 on the USB Host part so it is included.
Wow the audio board is now updated to work with it! I was waiting for that. I’ll get one soon then!
My solution was an intermediary one where I had a 3.2 with no USB Host and I though maybe it’s more valuable to have a separate USB chip that I can reuse with other micro-controllers later instead of getting a Teensy 3.6 (at the time there was no 4.0 yet). But unfortunately they discontinued that USB chip now… so not a long term solution finally.