So, after another look, I see that the OpenAL soft implementation only has capturing for the WinMM backend (not DirectSound) backend. Not a big deal, however... I'm not liking the method of capturing. It relies on a polling method. Right now I see (for WinMM system):
There is a WinMM callback that gets the samples and adds it to a small buffer, it then signals (awakens) a processing thread
The processing thread will try to write to another buffer (and if the buffer is to full, it will overwrite some of the data)
Then, you are required to call a method to read capture samples (and you specify how many samples you want).
Now, what I find wrong with this method is:
* Too many buffers being copied, and one too many layers - both which will increase latency dramatically making the gains from ASIO vastly reduced (at last in my eyes, would have to run real tests to know for sure).
* Polling method is a waste of CPU time
* Loss of data if not polled fast enough not that acceptable to me
This, however, also goes along with how you stream data with openAL, you are required to constantly query for empty buffers, and then manually push data to them.
Personally, I don't like either method. I prefer the method of fmod (and Portaudio), where for playback, it queries you for data when it runs out and needs to play more data. Or, in the case of capturing, you get a callback event with the bytes that came in and are ready for processing. This greatly reduces the complexities of user code, and also reduces the chance of audio overflow/underlows.
I wonder, since this OpenAL Soft is LGPL, if we could take the mixing code, effects, positional things, and integrate a new API into it. One that makes heavy use of callbacks for audio data.