[wdmaudiodev] Advice for Network Audio Driver

  • From: Michael Lehenbauer <mikelehen@xxxxxxxxx>
  • To: wdmaudiodev@xxxxxxxxxxxxx
  • Date: Sun, 6 Dec 2009 22:22:37 -0800

I am looking to write an audio driver (or similar) that allows you to stream
all of your audio over the network to another computer (similar to
PulseAudio, ESD, etc. for linux).  I've done some research and have some
ideas, but I have a couple questions and would appreciate feedback before I
head down the wrong path (I'm new to driver development). :-)

Basic requirements: Must work on Vista+, must work for any app, must be
redistributable (i.e. not a hack).
Would be nice: The ability to work in tandem with the existing audio driver
so as to still play the audio locally while streaming it over the network.

So what is the best solution?  Initially I thought a filter driver would be
perfect as it allows the existing audio driver to still function, but it
seems that filter drivers won't (in general) work on Vista as WaveRT
bypasses kernel streaming.  Given that, a GFX sAPO started to sound
interesting, but it seems that sAPO's are tied to a *specific* audio device
and so are not straightforward to install and might have undesirable
side-effects (e.g. overriding any sAPO's provided by the existing driver).
 So this seems hacky and not the kind of solution I want.

So instead, the solution I'm leaning towards is taking the msvad sample and
modifying it to stream data over the network instead of writing to a file.
 I'll lose the ability to play sound locally, but I can live with it.

So my questions are:
1. Am I missing any other interesting options?
2. Given the msvad route, any suggestions for getting the audio stream data
to the network? :-)  I'm thinking I need a user-mode Service that
communicates with the driver to get the audio stream (to then send it over
the network in user-mode).  I was thinking of using named pipes for the
user<->kernel communication, but that seems to be discouraged (though I'm
not 100% sure why) and so I should instead probably learn how to use ioctls.
 Does that sound right?  I'll look into the details.  Once I get it to
user-mode, I can do the rest.

Any other tips or pointers to existing work would also be appreciated.

Thanks!
-Michael

Other related posts: