Hello all! My name’s Evan, and I’m starting development on an idea I had a few years ago. The Synharmonium is (going to be) a microcontroller-based synthesizer with control elements based on the accordion and the Suzuki Omnichord, and an algorithm to solve the centuries old musical problem of versatile just intonation. Best case, this could have a huge impact on how western music is written and performed. Worst case, its a fun and easy synthesizer you can build at home.
But right now its not much more than an idea and a janky keyboard prototype. I am a student of computer engineering, and I have a non-zero amount of programming skill, but there’s still a lot of gaps that I just don’t have the experience needed to fill. I need someone who’s good at programming, familiar with open-source development, has some spare time, and finds this idea interesting, to help me get the software side of the instrument going. If you can become a major contributor, I’d love to have you, but if you can just hang out in the matrix room and answer questions from time to time that would help a lot.
I love the idea but I’m not sure how you’d choose which scale to use in real-time. I’ll be interested to see how it comes along
There are a few ways.
-
The tuning root can be played manually (aloud or just for tuning) on the bass keyboard
-
another open source algorithm whose name has left me can recognize chords in real time and my algorithm can tune based on that
-
players can write a midi tuning track ahead of time to play along with
-
This looks fucking cool.
Thanks! Render is by a friend of mine, based on my concept sketch
Is there a reason why you’re looking at firmware rather than using a USB port to send midi to a DAW?
I love the design, and as someone who’s been using FL Studio for a long time with keyboard controllers, I’d look at developing a midi specification that it or similar software can read. Then you have access to their algorithms for any sort of tone/sound modification you need. If there’s not what you’re looking for in the basic software package, you can look at 3rd party .vst plugins (or write your own).
The algorithm will ideally be written to be portable the first time around, but its starting out on the instrument because I think the stradella bass layout lends itself to controlling the algorithm manually. Pressing a chord button simultaneously declares what notes you want played, the harmonic funtion you expext them to fulfill, and thereby how they should be tuned in relation to eachother. Other control schemes have a bit of ambiguity of intent, which we can work around, bit i think Stradella is better.
As for midi specifications, the instrument will have midi input and MPE output (look into MPE if you’re not familiar, great stuff) to controll other digital hardware or software instruments. Once the algorithm is written, I hope it will be repackaged into various other formats (like a VST plugin, or a midi/MPE passthrough that runs on a PC or a dedicated midi hub).
Gotcha - makes sense. Hadn’t heard of MPE yet - thanks, I’ll check it out.
Regarding the construction of the algorithm to dictate the tuning through the bass input, this sounds very similar to what arpeggiators do - set the tonic note and the scale type, octaves to travel and melodic direction and you’re good to go. While I had a hard time finding a readily available example of an actual algorithm, here’s a list of free arpeggiator vst plugins that may have developer pages or files you might be able to use as a starting point. I’m thinking that the bass sets the tonic note, reseting the middle C on the melodic keyboard and arranging the subsequent notes in the scale - just like an arpeggiator does, except rather than playing your notes for you, it’s arranging the pitch of your inputs.
But then, I’m not familiar with the stradella bass layout at all, so I may be just talking out my ass. Nonetheless, cool project, and I look forward to seeing it when you’ve got it complete!
Hey just took a look at the GitHub and I see one main.cpp so far are, you set on c++ or have you considered other languages such as rust?
C++ is the only language I have any experience with, and it’s a common enough choice for embedded development that i didnt see a need to learn a different language. If i had a programmer join who could work on the firmware and show me the ropes, id be willing to consider another language.