One of my friends wants to write lower-level audio tools, and a real-time audio engine, like FMOD, for games. He went to art school for sound effects, and he's learning how to program.
We both agreed he'll need to get a solid understanding on how programming works, so he's learning C++. What I'm suggesting for the next step is to learn how to load and uncompress raw audio samples from a file format (most-likely wav or ogg to start with a library), and use OpenAL to send loaded audio samples to the audio hardware to play it.
The thing is, he wants to write custom sound effect algorithms to manipulate sounds in a 3D environment similar to FMOD as mentioned above. This means he needs direct access to modify these raw audio samples somehow in real-time --which, of course, gets copied into an OpenAL buffer like an OpenGL texture would. Is there a way to flexibly manipulate samples already loaded into an OpenAL buffer?
What he'll start off doing is writing things like a sound interpolation, a way to scale volume to specific sounds, etc --basic stuff. Then, he will move into more complex stuff (I have no clue what he's planning). Whatever he ends up doing, it will involve tons of calculations on a massive amount of samples, which will be very CPU-intensive. Are there any APIs out there where he can write code that'll run directly on the audio hardware similar to shaders on the GPU? It doesn't look like OpenAL offers functionality like that.