How do I get started with DSP programming etc?

I’m relatively early in my programming journey (currently know a bit of Javascript, Lua, C# and other “light” languages) but I’ve lately been thinking back to my study days and learning small amounts of x86 machine code that I’ve subsequently totally forgotten. That, and reading about the new reverse engineered Machinedrum OS, the custom volca firmwares etc., made me wonder what the learning path is to this kind of stuff, low-level DSP programming, FPGA etc.

I realise it’s probably a long path, especially considering how relatively basic my programming skills currently are, but I’m wondering if anyone here (especially people at Elektron :smiley: ) has any links to resources, or some tips about what to study etc…

5 Likes

Will Pirkle’s books on this topic are meant to be quite a good start if you want to “get your hands dirty” and learn by doing. The issue with them historically was that the coding style is pretty… unusual/outdated, however there is a new edition of his audio effects one which has been rewritten and I believe is meant to be better: https://www.amazon.co.uk/Designing-Audio-Effect-Plugins-Theory/dp/1138591939

I start reading the old version a while back and found the way it introduces DSP to be very clear, however the coding style of the old book put me off a bit. Hopefully the new one resolves this.

2 Likes

Oh, Jack Shaedler (who works for Ableton and helped create their awesome Learning Music site too) has created an interactive online intro to DSP which looks great. I’ve not found time to really read it but it’s on my to do list! https://jackschaedler.github.io/circles-sines-signals/

4 Likes

Thanks for these :slight_smile: much appreciated, I’ll give them a look :metal:

1 Like

there’re some threads here on the forum related to this. few links here:



4 Likes

http://www.dspguide.com/ch1.htm

And learn how to do SIMD programming in c/c++. Sound data is pretty much meant to be processed that way.

Audio programming is actually super easy to get started with. That second book has a very gentle beginning with great exercises.

For learning purposes I recommend doing the back-end from scratch ie initializing the device, setting up client side ring buffers and implementing basic multi threading but you might consider that overkill.

1 Like

Ah yes, forgot about those, should have done a search. I’m more interested in getting lower level and learning how to directly program DSP chips etc… but perhaps I should start with audio programming in higher level languages first :stuck_out_tongue:

Could be a great opportunity to learn c or c++! The low level stuff might seem daunting and while it can be tricky to get the buffers and latency stuff right it’s actually not that much to learn. A couple of evenings worth of work at most but that will give you a greater understanding of how everything fits together and the same concepts apply no matter what hardware platform you are on.

I think high level frameworks only get in the way when learning this stuff.

1 Like

Yeah, that’s what I was thinking as well. I see all of the amazing demos coming out of the demoscene where people are doing crazy low-level stuff with limited hardware, and I want to get in on it too :smiley:

Thanks for the info :slight_smile:

I would highly recommend spending a bit of time trying to find something you want to make. Everyone’s different I guess, but certainly for me, without that motivating factor I never get off the starting blocks.

Also, if you’re thinking audio effects/intruments on a computer, take a look at Reapers JSFX and Bluecats Plug’n Script. They both allow you to make working audio DSP stuff without dealing with any of the general programming bollocks.

If you’re interested in starting at a slightly higher level, maybe building a plugin or something, I can recommend the JUCE framework as a good way to get started in C++.

It abstracts away a lot of the more fiddly bits in terms of audio processing and lets you create a VST/AU/standalone app for all major platforms from a single codebase. It has good documentation and tutorials etc., so makes quite a good starting point.

At the core of your plugin is essentially a loop which gets called for every buffer and you return an array of floating point numbers which represent the sound you want to make, so you can do whatever DSP you want here (and JUCE has a DSP library with low level building blocks, with more coming in v6)

1 Like

I’m taking a dive into JUCE and re-learning C++ again (last time was 10++ years). Building an app for generative music i made (https://jandenbesten.bandcamp.com/album/still).

JUCE is realy good! Nice tutorials, and enough online information to get going. Within a week i have the audio/midi part almost working!

NB I’m a webdeveloper, so programming is in my DNA, that helps offcourse.

3 Likes

I’d be wary of Juce considering the ilok company owns them now.

Although i got far with JUCE and C++, i’m taking the time to test https://audiokitpro.com/ with Swift. Downside its only iOS or macOS. Upsides: opensource (and free) and looks much easier to code with. It works with ‘nodes’ wich kind of corresponds with patchcables and modules.

1 Like

I suggest you download the VST SDK, get a sample plugin compiled and working, modify it to your heart’s content. this is a quick dirty way to get started. I was able to get a basic multi-tap delay working on a transatlantic flight. F>U>N

Good to know! Altough that road is probably more for plug-ins. Not for a standalone app (which is what i’m after).

yes but it also handles a lot of boilerplate, buffers, devices, etc so you can focus almost purely on the DSP. but if you want to build and understand it from the ground up I respect that (a lot)

Would building your own stuff in Reaktor also be a bit of a soft start?

Perhaps! I’ve dabbled in pd/Max and have made plenty of stuff on the Nord Modular, but I wonder how that can be translated into lower level code for DSP chips?

How are people programming Blackfin chips etc? Or FPGA? Where can I learn about that stuff? Am I getting in way over my head too soon? Probably!

The thing about programming actual DSP chips (that have a C/C++ compiler), is that for the most part it’s very much like programming on a PC. Usually the system will be set up to run an audio processing function whenever a block of N samples is needed to output. What you do in that function is largely the same from platform to platform.

Setting up the system that surrounds that audio processing function is arguably more embedded programming than DSP, and probably not wildly interesting to you.

There are of course some differences between platforms, in memory management and optimization options. And of course, many DSPs are fixed-point math only (like Blackfin), but these days, as beginner, there is really no point in delving into that.

Really, the actual audio processing code will be largely the same, and it’s the similarities between what you’d do on these platforms - the concepts - not the fine detail differences, that you want to learn first in DSP.

If you really want to write DSP code and get it running on something other than a PC, I’d highly recommend getting the Daisy. It’s pretty fast, has a decent amount of RAM, is floating point and all the shit which is not actually processing audio is mostly done for you. Of course it’s not a specific DSP chip, but generic microcontrollers are used more and more for DSP these days.

Another option would be to get a teensy 4 and the audio board, or the Bela (but that’s a bit more expensive).

But, if you really want to learn DSP coding with minimum hassle… you’ve got a PC or mac in front of you. Download JUCE, take the example VST/AU plugin FX and start doing something with the audio :slight_smile:

1 Like