[wdmaudiodev] Multi-channel audio USB driver development

  • From: "Daire O'Neill" <oneill.daire@xxxxxxxxx>
  • To: wdmaudiodev@xxxxxxxxxxxxx
  • Date: Thu, 1 Jul 2010 00:53:28 +0900

Hi all,

I just joined the list as I am looking for some information on audio
driver development. I have searched
the archives and WDK docs but can't find a clear answer so I hope you
guys can help. I have experience
in application programming in C, but have never written a driver.

I want to develop a low-latency, multi-channel audio driver for a USB
connected hardware device.
The device will stream up to 16 (if possible) channels of audio from a
PC's USB port, out to the
connected hardware. I need to develop a driver(s) that is compatible
with Win2K, XP, Vista and 7.

As there seem to be many audio driver models and APIs, my head is
spinning a little.
This is what I have learned from my research so far - please correct
me if I am wrong!

WDM is a standard format for writing drivers. So audio drivers written
in this format may access audio
APIs such as DirectSound or MME. Later versions of DS support
multi-channel audio.

WDM-KS means that no APIs such as these are used, the application can
stream straight to the drivers kernel.

ASIO also operates like this for low-latency, does this mean that ASIO
is essentially an audio driver that follows the WDM-KS format?

DirectKS is an API that can be used to write kernel streaming drivers,
with similarly low latency to ASIO.

WDM is an older format, and so the WDF model should be followed for OS
that support it (Vista, 7).

For a USB audio driver, the AVStream class should be used. Portcls.sys
and the newer WaveRT are for PCI devices only.

  I found this recent post on the forum, answered (>>) by Tim Roberts:

>>The ASIO driver talks to the kernel driver just like any other application. 
>>In the case of usbaudio.sys, it uses the kernel streaming API
If it need to build a kernel driver ? > If it needed not , the ASIO
communicate to who ? The Usbaudio.sys ? or the USB bus driver?
>> Usbaudio.sys **IS** the kernel driver. The ASIO layer would need to talk to 
>> usbaudio.sys.
 If it needed , what kind of driver should I develop ? >A simple USB
>device dirver or a AVStream driver ? how to do it ?
>>You shouldn't need to develop anything. There is already an ASIO driver for 
>>USB audio devices.


So for example, if I want to develop an ASIO spec driver (ie that will
be loaded from the hardware upon plugging it into the USB port, and
multi-channel low latency streaming), but  "there is already an ASIO
driver for USB audio devices", then what do I need to write?

What type of driver do other manufacturers of hardware interfaces
typically implement? Do they need to pay licenses to Steinberg for
using ASIO?
Also, what is a typical development time for such a driver? If anybody
can provide an estimate for this, I would really like to hear it. Is 6
or so for development and testing a reasonable guess? Bear in mind
that I have never written a driver before.

Sorry for the long post and so many questions, essentially it comes
down to this - what is the simplest approach for developing my driver,
so it can work at low latency across multiple versions of Windows? If
anybody can provide advice about where to start, it would be really,
really appreciated.

Many thanks,

Daire O'Neill

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx


Other related posts: