I’d highly recommend getting comfortable programming a subtractive synth to anyone interested in making music, particularly electronic music.
I’ve been fooling around with music for about 20 years, but the path I took (trackers, which are sample based, then into VSTs with their huge preset libraries) plus a lack of self-discipline meant that I never really mastered making a sound from scratch on a synth. It’s only in the last few years since getting into hardware that I’ve started to learn this, and it has made such a difference to my music making - I can now often dial in the sound in my head without having to trawl through presets, or I can take a preset and either modify it to my taste, or work out what it’s doing and recreate a similar sound.
If I could go back in time and give myself some advice, it would be to pick up a basic hardware subtractive synth with knobs for each function on it and master making sounds on it from scratch. Something like the Korg Minilogue would be perfect. Alternatively, a good synth on an iPad or creating a good midi mapping for one VST synth and mastering it would do the trick, but I think there’s something about the hands on design of hardware, plus that you’ve invested money in it, that makes it the ideal learning platform (and a lot of fun!). The skills you learn doing this are transferable to any other synth and other areas of music making.
Would you say that it's a good first project for learning programming from the beginning as well or would other (easier) projects be more suited for this task?
IMHO it's a very worthwhile lesson from a maths perspective, as it may motivate learning the theory, but it has nothing much to do with iterative, imperative, text based programming.
A good comparison would be some visual programming environments and modular buzz-machine type DAW programms, that both look very similar, employing the graph metaphor--nets of generators and filters. I'm not sure wgether that's comparable to functional reactive programming, that I have never tried.
Writing a synth in C would be very different, at any rate, I guess, something I don't even know how to go about in an ergonomic fashion.
Learning computer programming you mean? If you think creating something musical would motivate you, JavaScript using the WebAudio API isn’t a bad starting place, as it provides high level components such as oscillators and filters that you can plug together without needing to know the internals - for example, check out https://teropa.info/blog/2016/07/28/javascript-systems-music..., which is aimed more or less at newcomers to programming. Another good starting point if you are using Mac (and iOS, if you like) is AudioKit, which has some great interactive “playgrounds” and similar high level “blocks” of code as WebAudio, which you can wire together to get quick results.
If you want to write your own plugins or audio software you’ll need to learn C++ at some point, which I think is a fairly complex language to start with and likely to be frustrating in terms of getting quick results, but your mileage may vary!
A colleague of mine learned C++ as his first “real” language (which is now his job) because he started out playing around in SuperCollider (a DSL for computer music stuff) and wanted to turn his ideas into real plugins, but it can get pretty complex pretty quickly so I’d say you’d have to be pretty motivated to do this!
If you do want to go down this route I would probably start with the aforementioned SuperCollider or something similar (maybe Max/MSP) to get an idea of how the musical side of things works without having to master C++ at the same time, then when you feel confident you can start learning C++ - personally I’d recommend the JUCE framework as it is designed for audio apps, hides some of the complexity/gotchas of C++, and has some good tutorials for beginners: http://juce.com.
DSP stuff can get pretty maths heavy and I’ve not come across anything equivalent to the building blocks supplied by WebAudio/AudioKit for C++, although JUCE does now have some DSP modules such as filters which you can easily use, and there is sample code online... but you’ll probably have to get your hands dirty at some point :) Will Pirkle’s book on audio plugins provides quite a good intro to DSP but the code in the book is, to be honest, pretty outdated/bad style - he is apparently working on an updated version, but if you are able to take the code with a pinch of salt (e.g. write the examples yourself in JUCE rather than using his RackAFX framework) you might find it useful.
Feel free to reach out to me for more advice, my background is in web development but I’ve been working on audio stuff professionally for the last couple of years so have been through the learning process of C++ etc and would be happy to help if I can!
Thanks, yes, exactly. I thought perhaps I could combine these two fields since I very much enjoy making electronic music but I'm still intimidated by code. C and C++ in that regard sounds like the final bosses of the intersection between audio and computers, so I think I'll take up your suggestion and start with JS and the WebAudio API.
Haha, correct! Yeah that’s probably the best place to start :) There are loads of cool WebAudio apps out there for inspiration, e.g. check out https://blokdust.com/.
I’d check out that tutorial I posted, once you feel comfortable with the basics of JS you may also want to take a look at https://tonejs.github.io/, which provides a layer on top of WebAudio with useful functionality like synths, sequencers etc. Can save a lot of time!
There are many other great tutorials and open source WebAudio projects out there too. Have fun, hopefully you can post something you have made on here in the not too distant future! Like I say, feel free to give me a shout on email/twitter if you need more advice.
I’ve been fooling around with music for about 20 years, but the path I took (trackers, which are sample based, then into VSTs with their huge preset libraries) plus a lack of self-discipline meant that I never really mastered making a sound from scratch on a synth. It’s only in the last few years since getting into hardware that I’ve started to learn this, and it has made such a difference to my music making - I can now often dial in the sound in my head without having to trawl through presets, or I can take a preset and either modify it to my taste, or work out what it’s doing and recreate a similar sound.
If I could go back in time and give myself some advice, it would be to pick up a basic hardware subtractive synth with knobs for each function on it and master making sounds on it from scratch. Something like the Korg Minilogue would be perfect. Alternatively, a good synth on an iPad or creating a good midi mapping for one VST synth and mastering it would do the trick, but I think there’s something about the hands on design of hardware, plus that you’ve invested money in it, that makes it the ideal learning platform (and a lot of fun!). The skills you learn doing this are transferable to any other synth and other areas of music making.