I have lurked a long time without posting but this seems like a great spot for this question since there are a lot of like minds here. I should probably mention I have been into modular for 4 or 5 years now, and definitely am a huge fan of Olivier’s products and philosophies.
I’d like to learn to code, specifically for the purpose of programming music hardware (modules of course). It would seem like C++ is the language of choice? I have looked into learning it, and I am not sure what the very best approach would be. I am 47 with zero coding experience. I am not in a huge hurry but I’m also not going back to university, so hopefully I can learn it quicker (and cheaper) than that. I am also not naive enough to think it will be easy, I am up for a challenge. Any and all suggestions are greatly appreciated. I thank you all kindly!
I found this on the FAQ page for VCV rack module creation. And making a VCV module would probably be a good starting point
Oh and Coursera has a pretty good free course on DSP. It’s not specific to C++ but is covers the mathematical idioms and conventions of DSP so when you see frequency in terms of radians you won’t freak out.
99% of the “C++ knowledge” is irrelevant for coding music hardware, and there’s a lot of stuff taught in a C++ class that won’t work at all on a small memory, single-application embedded system. Then there are many things you have to know (DSP, embedded systems stuff) that are not going to be taught in a C++ class… So maybe learning C++ is not the right place to start… Here’s my recommended “learning path”:
I have been having a lot of fun recently working with lua/supercollider on the Monome Norns. I would think that could be potentially a cool way to get started on some things similar to the steps 1, 2 and (a little bit of) 4 mentioned in that (great) post from @pichenettes
Reviving this topic as I noticed that there was a slight update and some links to the fantastic answer from @pichenettes on the website. It is under https://mutable-instruments.net/contact/ and the “I want to apply for a job or internship, or collaborate on a module idea” topic. The answer is below
What do I need to learn to do your job?
Let’s say your starting point is a deep passion for patching and synthesis!
Learn a graphical patching language like pd or Reaktor. You can very well stop here if you’re only interested in creating virtual instruments.
Learn a synthesis/composition programming language like Csound, SuperCollider or Faust. This will teach you how to think in terms of linear code rather than in terms of boxes and virtual patch cables.
Back to basics: write simple command line python programs doing stuff on .wav files, or programs generating .wav files (don’t get distracted with real-time processing, user interface, etc). Write signal generators, filters, etc using what you learnt from the signal processing book.
Your new-found understanding of signal processing theory will allow you to dig into Udo Zolzer’s “DAFX” book and learn about synthesis techniques, FX, etc. Try implementing some effects in the book as Python programs, or with pd. This is something you’ll end up doing a lot anyway to sketch ideas.
Understand that python or pd are towers of abstractions and that writing code for an embedded processor is done at a much lower level. A good online course for understanding towers of abstraction, and what’s going on inside processors is Nand 2 Tetris.
At this stage, you can learn a low-level programming language like C. Write C equivalents of the oscillators, filters, etc. you wrote in Python. “The Audio Programming Book” by Boulanger is great at this stage!
If you ever decide to make your own hardware, start with a development board (like the STM32F4 discovery). And study the code/schematics of Mutable Instruments’ products. If you want, you can spend a couple of weeks playing with Arduino boards, but don’t spend too much time learning it: to make it simple for beginners they often do things the “wrong” way (especially on questions related to timing, multi-tasking that are of prime importance in musical instruments), so remember that whatever arduinese you learn will have to be unlearned later.
If you ever want to get into analog electronics (for music), it’s easy at this stage to grab a book like “Operational Amplifiers & Linear Integrated Circuits” (beginner-ish, slow, but without too much handwaving), then follow Aaron Lanterman’s video lectures on analog electronics for sound synthesis (if you can find them online). Learn how to use a simulator (LTSpice) to test your circuits, but always breadbord them too! Every week, spend some time breadboarding, simulating, understanding a classic circuit from DIY modular resources like Yusynth or EFM.
When you’ll get closer to having devices manufactured, look into “The Circuit Designer’s Companion” by P. Wilson - which covers many practical aspects and “deviations from theory” stuff (reliability, manufacturing issues). Learn a PCB layout program, how to order PCB or assembled protos from a service like Beta Layout.