Hi Stefan,
Stefan Dösinger schreef:
Am 08.12.2009 um 13:06 schrieb Robert Reif:
Yes, a single ring buffer for all the software mixed direct sound buffers. A good driver implementation would have a ring buffer for every direct sound buffer. Therefore no requirement for any software mixing. That path is in the direct sound dll now but is not used because no driver supports it. In fact, when you rewrite the dll, you should be removing all existing code paths excepts this one.
Maarten please correct me if I am wrong, but I think the reason why the Alsa driver does its own mixing is because Alsa does sample rate and similar conversions only when NOT using the mmap API. So you either get Alsa-side mixing or fast access using mmap. Back it the days it was considered that mixing ourselves and then using mmap was faster than not using mmap and then let Alsa mix things(which happens in Software as well in most cases)
Wrong :)
Alsa doesn't allow you to specify buffer sizes, or granularity. Furthermore rate resampling in alsa results in horrible things happening, you cannot set a alsa buffer in looping mode reliably, and if you could you cannot randomly access its memory, furthermore buffer notications don't work, and you cannot set per stream volume.. I probably missed a few other reasons but those are the biggest ones.
Cheers, Maarten.