I just joined the forum 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
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.
->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
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,