I'd like to use C# to implement an application that can play multiple audio streams at the same time. Peanuts - now the interesting part: assuming every stream is single channel (mono) I want to adjust the volume for every speaker (5.1 or even 7.1) for every stream separately. I can use the windows mixer to do this, but the problem is, that there is only one mixer and I want to adjust this for every stream separately. Any ideas how to implement this?
My first guess was to multiplex the stream eight times (7.1), apply the volume level for every "channel" and then send it to the windows mixer, which is leveled for all channels at 80% for example. Do you know any libraries that might support such use case?
AFAIK bass and fmod cannot do this, but correct me if I'm wrong. As alternative I was thinking of hacking the XNA for this: using a vector that describes the position of the stream related to the listener and using this to apply the volume compensation... just ramblings.
(and please don't point me to some C++/WinAPI ideas on this, this project is not worth to learn another language now.)
Finally got it: bass.dll allows to apply a matrix as volume settings for every speaker separately using the method
BassMix.BASS_Mixer_ChannelSetMatrix(int streamHandle, float[,] volumeMatrix)
. You can see a sample here, they're using this to upmix a stereo stream to four speakers. Below the full class I created to solve my problem.