I am currently dabbling with an idea for new DAW mixing process, and want to test-drive this idea by means of a proof-of-concept implementation. I am usually quite capable of doing so, but I do have one slight problem of understanding and I would welcome anyone who could offer me some help on the described problem (further down the page).
Before I get into the actual problem, I think it is helpful to understand what exactly I am trying to accomplish, and why. So let’s start with the why.
If you look at the state of the art workflow in DAWs, the mixing process is pretty concerned with treating individual signals, and is using reverb and spatial relationships between signals more like an afterthought. In the real world however, no (natural) sound source is heard without the room and it’s spatial orientation colouring it from the start; this is because we do live in a 3D world, and anything in that 3D world can generate sound. Another thing is that reverbs are quite unintuitive; the presented parameters oftentimes don’t directly map to spatial perception of humans, but rather concentrate on the properties of the model used to generate the reverberation. Of course it is possible to receive convincing results from tweaking by ear without watching the controls, but oftentimes this is more hit-and-miss than deliberate design of the space the sound lives in.
So, what I am trying to establish is a DAW application that right from the start takes spatial relationships between sound sources and receivers into account. This means, the first step in the workflow is not going to be putting in the kick and listening ad nauseam to it in isolation, but rather to create a room and it’s properties, listener position, and then bring in the kick, position it and go from there. I hope this little description of workflow makes the principle a bit more tangible.
So, technically, this involves designing reverbs, and by reverbs I mean convolution reverberation. The process I am going to stick to for the moment is to generate the impulse response(s) for the room in design offline, meaning pre-calculate them at some point, by means of geometry and application of the laws of optics for sound propagation in the room. This is simple, although computationally expensive, and I see no problem doing that.
Assuming for the moment we have two listeners (a stereo mic configuration in the room), and eight sources (let’s assume them to be mono), this would result in sixteen impulse responses to convolve at runtime to place everything correctly into the same listening space. This is computationally intensive, but nevertheless doable on a modern machine, and the implementation is quite straightforward.
Where it comes to me being stuck is doing the actual deconvolution of the room to generate the impulse response, and the actual convolution of signals. It’s not like I don’t understand in theory how this works, or the math behind it, but I find it quite hard to translate from the equations to an algorithm that will apply those equations. Of course I have looked anywhere I could think of for examples and solutions on how to do this, but it seems to me that every paper published and every article written on the subject either assumes you know how to write that code, or to use an existing piece of software from a third party. The usually abundantly available signal processing libraries are no great help either, since I haven’t found a single one of them that actually does deconvolution, let alone for the few that actually do convolution. They all seem to be in love with FIR and IIR implementations and content to use ready-made IRs.
What I am asking for
... is someone who can help me implement convolution and deconvolution algorithms.
What I am not asking for
... is someone to implement it for me (I wouldn’t mind, but I won’t ask for it).
... is a pointer to musicdsp.org or dspguide.com, I know those sites, thank you very much.
... are comments questioning the feasibility of the actual project.
... are lame questions on why I’m not using reverb plugin XXX instead.
... are similarly lame questions on why yet another DAW app.
It’s not a DAW (yet), and it is a completely new concept, I don’t expect it to be perfect the first time around, I don’t intend it to be feature complete enough to even call it a proper DAW for a long time. And most of all, I’m doing this for fun and curiosity.
If you have nothing to say that actually can help me out, I’d really rather concentrate on answers helping me progress with this than bullshitting.