Tips for getting started with audio programming

I’m a programmer by trade. While it is nice in that it pays the bills, it can be quite mind-numbing at times. It’s not the programming, I’m glad to be doing it and wouldn’t see myself in any other profession currently, but the ever-changing specs and idiotic clients plus the general boringness of the enterprise is tiresome. I’ve found that coding “something completely different” every now and then helps me to focus on my job better, and I’ve always had a passion for music and synths. And over the years there have been some ideas I’ve been meaning to try.

Which brings us to the topic, I don’t know where to start. As stated, I’m a programmer, so I’m not looking for any tutorials in programming 101; while there are certainly languages/frameworks/libraries I don’t know, given the documentation I’ll (hopefully) manage. I’m aware of Csound, but I’m looking for something a bit lower level. What I’m after is: for example, I know what a low-pass filter does, in terms of frequency response and how it sounds, but I have no idea about the math involved. Nor do I know any circuitry involved, if trying to emulate something analogue (my background is pure CS, no EE).

So, any directions where you’d point me? I’m not trying to do the heavy lifting myself, I trust the fftw guys are much better at what they do than I ever will - but having a wonderful number-cruncher is of little help if you don’t know which numbers to crunch.

The volunteer Audacity community is always looking for programmers. I’m making a few calls.

Are you interested in working on the Audacity code itself? If so, you will need to install, compile and become familiar with wxWidgets 2.8.12 (not the current 2.9+ wxWidgets) then install, compile and play around with the Audacity code. I can help if you have questions and are not on Mac.

You might also want to look at the Audacity -devel mailing list:
(you may subscribe if desired)
You might also want to look at my posts in the “Adding features…” forum of this board–many of which have code attached.

To get started with the actual Audacity Team working on the code (since Audacity is currently in feature freeze in expectation of an imminent stable release) check out the bug list on Bugzilla:
see if there is anything rated P3 (we have no P2s or P1s currently) which you can solve. If you need an account on Bugzilla just ask Gale (one of the Moderators here).

Thanks for the offer to work on Audacity, but I think I’ll need to get my feet wet with audio in general at first (and I’m partial to Qt, but I suppose learning another GUI framework wouldn’t hurt). At a later time, perhaps. Right now I’d just like to get into basic synthesis; hell, a single oscillator at first even. I’m not after how to implement things a particular environment, but the theory behind it. So any reccommendations on websites/books/etc? Suggestions of the dead tree variety are very welcome as I already spend most of my waking hours in front of a computer.

Which programming language(s) are you comfortable with?

For the theory side, there are numerous books about audio digital signal processing. There’s an article here that recommends some books:

As I’ll be interfacing with C (or rather, fftw library), but I still like OOP, I guess C++ is an obvious choice. It’s been a while since I’ve used it, but I hope it’ll all come back to me. Besides, I’ve missed shooting myself in the foot with manual memory management. Thanks for the link - unsurprisingly, the books are quite expensive; I’ll start with the one that’s available online.

For getting your feet wet, you may be interested in looking into “plug-ins”.
Audacity supports LADSPA plug-ins on Linux, Windows and Mac, though LADSPA plug-ins are most commonly supported on Linux and I believe required some “shoe-horning” to get them to work on Windows.
If you’re developing on Windows you may find it easier to work with VST plug-ins.