How to make a remote audio device appear in a windows PC?

Hi,

Any windows audio driver expert out there? I had a little windows driver development experience, but not with audio stack.

I have a situation where I would like to make the audio devices (speaker and microphone) that were physically connected to a “client” system to appear in windows on a “server” system so that any apps in the server system can use the remote audio devices as if they were local. The two systems are on the same network. On the server system, I am thinking of developing a virtual audio device driver that streams the audio data to/from the remote audio devices via WiFi. There will be a windows service that receives/sends audio data from/to the client system and feeds the data into the virtual driver on the server system. Am I heading down the right path? I have several specific questions:

  1. Since there is no DMA hardware in the virtual audio device, does this mean I can only use the WaveCyclic port-miniport model?

  2. What is the best way to let my windows service to feed audio data into my virtual driver? Can a user-mode process access custom IOCTLs in the virtual audio adapter driver? or do I need to create another software driver and use IoCallDriver to send data to the virtual driver?

  3. How to avoid unnecessary copying of data when audio data is fed into my driver?

  4. How to make the virtual audio devices appear/disappear dynamically when the network connection is established/closed b/w the two systems? What if there are multiple client systems and only one server system?

Thanks a lot!

Henry

xxxxx@gmail.com wrote:

Any windows audio driver expert out there? I had a little windows driver development experience, but not with audio stack.

If you can’t get satisfaction here, there is a separate mailing list for
audio driver guys called [wdmaudiodev].

I have a situation where I would like to make the audio devices (speaker and microphone) that were physically connected to a “client” system to appear in windows on a “server” system so that any apps in the server system can use the remote audio devices as if they were local. The two systems are on the same network. On the server system, I am thinking of developing a virtual audio device driver that streams the audio data to/from the remote audio devices via WiFi. There will be a windows service that receives/sends audio data from/to the client system and feeds the data into the virtual driver on the server system. Am I heading down the right path?

If you want the virtual devices to be available to any arbitrary audio
client, then there are few other choices. I would point out that there
are several existing commercial products that can do this out of the
box. One is Virtual Audio Cable at
http://software.muzychenko.net/eng/vac.htm, one is the VB-Cable at
http://vb-audio.pagesperso-orange.fr/Cable/ .

I have several specific questions:

  1. Since there is no DMA hardware in the virtual audio device, does this mean I can only use the WaveCyclic port-miniport model?

Pretty much. I presume you have already looked at the older MSVAD
driver sample, or the newer SysVad sample, which are Microsoft’s
canonical virtual audio drivers. Both could be used as a basis for your
project, although both are relatively complicated. We were just having
a discussion about that this week on [wdmaudiodev].

  1. What is the best way to let my windows service to feed audio data into my virtual driver? Can a user-mode process access custom IOCTLs in the virtual audio adapter driver? or do I need to create another software driver and use IoCallDriver to send data to the virtual driver?

You can open a handle and send ioctls. You don’t really even need a
control device object to do it, although that’s another option.

  1. How to avoid unnecessary copying of data when audio data is fed into my driver?

You are prematurely optimizing. You will HAVE to do your own buffering,
just because you will have a mismatch between the suck and blow rates.
Fortunately, audio bandwidth is essentially trivial, so extra copies
don’t hurt very much.

  1. How to make the virtual audio devices appear/disappear dynamically when the network connection is established/closed b/w the two systems?

There is a set of “jack” properties, so that your driver can report that
something has been plugged into your yanked from particular audio
jacks. I don’t think the existing MSVAD sample does that, but you can
add other property sets.

What if there are multiple client systems and only one server system?

Well, you will have to decide what to do about that. How will
applications on the server identify which client they want to connect to?


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.

Hi Tim,

Thanks a lot for your answers. It seems that with the virtual audio cables, I only need to develop network apps to stream audio data from client and feed into VAC. I will take a look at the VAC and VB software to see if they meet my needs.

How do I join the [wdmaudiodev] mailing list in case I have questions in future?

Thanks,
Henry

xxxxx@gmail.com wrote:

Thanks a lot for your answers. It seems that with the virtual audio cables, I only need to develop network apps to stream audio data from client and feed into VAC. I will take a look at the VAC and VB software to see if they meet my needs.

How do I join the [wdmaudiodev] mailing list in case I have questions in future?

Honestly, Google is faster than this mailing list.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.