[wdmaudiodev] Re: Expose multiple Audio Sources as a single virtual microphone

  • From: Thomas Terhaar <thomas.terhaar@xxxxxxxxxxxxx>
  • To: "wdmaudiodev@xxxxxxxxxxxxx" <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Mon, 15 Jun 2015 09:09:38 +0000

Hi Tim,

Thanks a lot for your input.
I would love to avoid having to write a custom driver.
And you were right, the advisors already use a custom application, that is
primarily used for Screen-Sharing and collecting metadata.

I had a quick look at WASAPI (and also the DeviceTopology API), but from my
understanding, this allows only controlling the audio of the application that
uses it.
(please correct me, if I'm wrong)
I have not found an interface that would allow me to register a new (virtual)
device endpoint that can be accessed by other applications.

As mentioned in my first post, audio/video streaming is handled by Flash or
WebRTC enabled browsers.
This data does not flow through the custom application, the advisors use.
So I would need a virtual device that is accessible system-wide and a custom
driver is the only option I have found so far.
(correct me, if there are other options)

Sticking with the driver approach :
Browsing the WASAPI docs, I've learned loopback recording can be done using the
IAudioClient interface.
I doubt, I can use this interface from inside a driver ?
What options do I have here ?

In the meantime, I'll have a look at the MSVAD example, as suggested.

Thank you,

From: wdmaudiodev-bounce@xxxxxxxxxxxxx
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Tim Roberts
Sent: Freitag, 12. Juni 2015 18:13
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: Expose multiple Audio Sources as a single virtual

Thomas Terhaar wrote:

my employer asked me to research the possibility of a very specific task:
Is it possible to write a driver that takes multiple audio signals (at least
2), mix the audio signals and expose the result as a single (virtual)
microphone ?

So the driver I'm envisioning should have the following abilities :

- Take an audio input device (typically a microphone from a headset)
and the default audio-output device (loopback) as input

- Mix the signals

- Expose the result as a virtual microphone that can be selected in
Flash and WebRTC-enabled Browsers as input,
so the customer receives the mixed signal from the advisors (and also himself
because of loopback; that's an issue I'm aware of)

Is this possible at all ?

Is your advisor using a custom application? If so, then you do not need a
driver at all.

The new audio APIs (WASAPI) have a loopback ability built in. Your application
can set up a graph where the audio loopback becomes just another input pin.
You can then mix that signal with the headset microphone input pin, and send
the result out over the web. That leaves everything under the control of the
application (including the switching in and out), which is exactly what the
Microsoft folks intended when they rewrote the audio subsystem in Vista.


Tim Roberts, timr@xxxxxxxxx<mailto:timr@xxxxxxxxx>

Providenza & Boekelheide, Inc.

Other related posts: