Thanks, Tim,
Maybe I’m just being confused by your use of the terminology. In
Windows terms, a “multichannel WaveRT buffer” means something like 5.1
or 7.1 data – a single audio signal in a single format, with data for
several speakers. Stereo on steroids.
I see. What you are saying is that WaveRT is only capable for a consumer surround product, but not for lets say a 32, 64 or 128 channel audio interface. In that sense you would be right, that my understanding and therefor “terminology” of a multichannel audio buffer seams to differ from the surround-only-use-case: a multichannel audio buffer is something that contains multiple audio channels, wether they relate to a certain speaker or not. So a “multichannel WaveRT buffer” is actually a “surround WaveRT buffer”.
You can’t have a headphone jack
and a main speaker jack both active at the same time, getting the same
output signal with different formats.
But that was not the question. The example was 2 pins i.e. one called headphone another called “main out” or headphone2 or simply channel#15 or whatsoever referring to its own audio channels in an interleaved multichannel audio buffer.
> But my question is, is it possible to address a certain channel in the
interleaved multichannel WaveRT for the Windows audio engine mixer. From all I
have read on MSDN it doesn’t look like this.
I just can’t visualize what you’re asking here. If you have a 5.1 audio
signal, then all 6 channels of audio are basically a single unit. It
sounds like you want to route the front-right channel to a separate
jack. Is that what you mean?
no, not at all. I dont care about speaker mapping. I want to be able to open a pin and stream to/from a dedicated audio channels in the multichannel buffer.
You could do that in an application, but
not in the mixer. The mixer doesn’t separate the components.
Well that is at least not entirely true. Since Windows can allow to open a pin with different amounts of channels, which means that depending on the amount of channels the channels addressed are different. Which also means Windows must be able to mix different amounts of audio channels into a WaveRT buffer.
In i.e. a WaveCyclic miniport driver the pin format or pin number or other means can be used to relate the pin or even stream on the same pin to a certain channel in the multichannel buffer, because the driver accesses the buffer directly.
You could certainly have a crossbar in your audio hardware that lets you
route the current audio stream to two output ports at the same time, and
you could control that through custom properties, but there’s nothing in
the Audio Engine to do that, because most hardware can’t do it.
That would be an odd design for a very questionable use-case.
Maybe an example can illustrate what is needed for a multichannel audio interface:
The device has 4 audio streams that it interleaves in a circular buffer, which can be addressed by a driver. Those 4 audio streams do not relate to any speaker setting, nor are used for surround. They represent something like 2xMic with preamp, 2xLine in.
Now if I want to represent this to an audio application, I can do so by providing a multichannel stream containing 4 channels. And/or I could define 3 other pins: Mic1,Mic2 and Line-in stereo. or whatsoever.
If I want to use the WaveRT model - which technically would fit perfectly - since the buffer is fed by my hardware directly, while the hardware has registers for RX,TX, clock etc. - I would need to be able to tell which channel offset into the multichannel buffer the Mic1 pin or the Line-In stereo require, so the Windows audio engine can extract the data belonging to the pin. And as far as I have found out thats impossible and therefor the WaveRT does not support a generic multichannel buffer, but only a surround buffer, which is always addressed from the first channel on.
Cheers and thanks,
Hagen.