In Windows 10 you can write a universal audio driver that will work across many types of hardware. This topics discusses the benefits of this approach as well as the differences between different platforms. In addition to the Universal Windows drivers for audio, Windows continues to support previous audio driver technologies, such as WDM.
Getting Started with Universal Windows drivers for Audio
IHVs can develop a Universal Windows driver that works on all devices (desktops, laptops, tablets, phones). This can reduces development time and cost for initial development and later code maintenance.
System 3 Software Updates. Important: The Gigabit PC Interface is not supported in 64-bit operating systems or releases past Version 70.Windows XP is not supported in releases past Version 86. Cuan doali men ta mosal gncir cui toodis po si ti voporunafuen te,te ne mosquepreo cu par nosape naspordosco sas: Quelafuen tepro vealaten sinqueelcir cui tone ce si ta Quelafuen teseaca pazdepro veerco mom ni molaco rrien tequeelcir cui tone ce si ta,noim por tan dosisuco rrien tem xi maesma yor. Saber Electrnica N 270.
These tools are available to develop Universal Windows driver support:
Visual Studio 2015 Support: There is a driver setting to set “Target Platform” equal to “Universal”. For more information about setting up the driver development environment, see Getting Started with Universal Windows Drivers.
APIValidator Tool: You can use the ApiValidator.exe tool to verify that the APIs that your driver calls are valid for a Universal Windows driver. This tool is part of the Windows Driver Kit (WDK) for Windows 10, and runs automatically if you are using Visual Studio 2015 . For more information, see Validating Universal Windows Drivers.
Updated DDI reference documentation: The DDI reference documentation is being updated to indicate which DDIs are supported by Universal Windows drivers. For more information, see Audio Devices Reference.
Create a Universal Audio Driver
For step-by-step guidance, see Getting Started with Universal Windows Drivers. Here is a summary of the steps:
Load the universal audio sysvad sample to use as starting point for your universal audio driver. Alternatively, start with the empty WDM driver template and add in code from the universal sysvad sample as needed for your audio driver.
In the project properties, set Target Platform to 'Universal'.
Create an installation package: If your target is device running Windows 10 for desktop editions (Home, Pro, Enterprise, and Education), use a configurable INF file. If your target is device running Windows 10 Mobile, use PkgGen to generate an .spkg file.
Build, install, deploy, and debug the driver for Windows 10 for desktop editions or Windows 10 Mobile.
Sysvad and SwapAPO have been converted to be Universal Windows driver samples. For more information, see Sample Audio Drivers.
Tools Driver Bits
Available Programming Interfaces for Universal Windows drivers for Audio
Starting with Windows 10, the driver programming interfaces are part of OneCoreUAP-based editions of Windows. By using that common set, you can write a Universal Windows driver. Those drivers will run on both Windows 10 for desktop editions and Windows 10 Mobile, and other Windows 10 versions.
The following DDIs to are available when working with universal audio drivers.
Convert an Existing Audio Driver to a Universal Windows driver
Follow this process to convert an existing audio driver to a Universal Windows driver.
Determine whether your existing driver calls will run on OneCoreUAP Windows. Check the requirements section of the reference pages. For more information see Audio Devices Reference.
Recompile your driver as a Universal Windows driver. In the project properties, set Target Platform to 'Universal'.
Use the ApiValidator.exe tool to verify that the DDIs that your driver calls are valid for a Universal Windows driver. This tool is part of the Windows Driver Kit (WDK) for Windows 10, and runs automatically if you are using Visual Studio 2015. For more information, see Validating Universal Windows Drivers.
If the driver calls interfaces that are not part of OneCoreUAP, compiler displays errors.
Replace those calls with alternate calls, or create a code workaround, or write a new driver.
Todd's Drive In Omaha
Creating a componentized audio driver installation
To create a smoother and more reliable install experience and to better support component servicing, divide the driver installation process into the following components.
- DSP (if present) and Codec
- OEM Customizations
Optionally, separate INF files can be used for the DSP and Codec.
This diagram summarizes a componentized audio installation.
A separate extension INF file is used to customize each base driver component for a particular system. Customizations include tuning parameters and other system-specific settings. For more information, seeUsing an Extension INF File.
An extension INF file must be a universal INF file. For more information, see Using a Universal INF File.
For information about adding software using INF files, see Using a Component INF File.
Submitting componentized INF files
APO INF packages must be submitted to the Partner Center separately from the base driver package. For more information about creating packages, see Windows HLK Getting Started.
SYSVAD componentized INF files
To see an example of componentized INF files examine the sysvad/TabletAudioSample, on Github.
|ComponentizedAudioSample.inf||The base componentized sample audio INF file.|
|ComponentizedAudioSampleExtension.inf||The extension driver for the sysvad base with additional OEM customizations.|
|ComponentizedApoSample.inf||An APO sample extension INF file.|
The traditional INF files continue to be available in the SYSVAD sample.
|tabletaudiosample.inf||A desktop monolitic INF file that contains all of the information needed to install the driver.|
APO vendor specific tuning parameters and feature configuration
All APO vendor system specific settings, parameters, and tuning values must be installed via an extension INF package. In many cases, this can be performed in a simple manner with the INF AddReg directive. In more complex cases, a tuning file can be used.
Base driver packages must not depend on these customizations in order to function (although of course functionality may be reduced).
UWP Audio Settings APPs
To implement an end user UI, use a Hardware Support App (HSA) for a Windows Universal Audio driver. For more information, see Hardware Support App (HSA): Steps for Driver Developers.
Programmatically launching UWP Hardware Support Apps
To programmatically launch a UWP Hardware Support App, based on a driver event (for example, when a new audio device is connected), use the Windows Shell APIs. The Windows 10 Shell APIs support a method for launching UWP UI based on resource activation, or directly via IApplicationActivationManager. You can find more details on automated launching for UWP applications in Automate launching Windows 10 UWP apps.
APO and device driver vendor use of the AudioModules API
Winzip System Tools Driver Updater
The Audio Modules API/DDI is designed to standardize the communication transport (but not the protocol) for commands passed between a UWP application or user-mode service to a kernel driver module or DSP processing block. Audio Modules requires a driver implementing the correct DDI to support module enumeration and communication. The commands are passed as binary and interpretation/definition is left up to the creator.
Audio Modules is not currently designed to facilitate direct communication between a UWP app and a SW APO running in the audio engine.
For more information about audio modules, see Implementing Audio Module Communication and Configure and query audio device modules.
APO HWID strings construction
APO Hardware IDs incorporate both standard information and vendor-defined strings.
They are constructed as follows:
- v(4) is the 4-character identifier for the APO device vendor. This will be managed by Microsoft.
- a(4) is the 4-character identifier for the APO, defined by the APO vendor.
- n(4) is the 4-character PCI SIG-assigned identifier for the vendor of the subsystem for the parent device. This is typically the OEM identifier.
- s(4) is the 4-character vendor-defined subsystem identifier for the parent device. This is typically the OEM product identifier.
Plug and Play INF version and date evaluation for driver update
The Windows Plug and Play system evaluates the date and the driver version to determine which drive to install when multiple drivers exist. For more information, see How Windows Ranks Drivers.
To allow the latest driver to be used, be sure and update the date and version, for each new version of the driver.
APO driver registry key
For third party-defined audio driver/APO registry keys, use HKR with the exception of HKLMSystemCurrentControlSet.
Use a Windows Service to facilitate UWP <-> APO communication
A Windows Service is not strictly required for management of user-mode components like APOs, however, if your design includes an RPC server to facilitate UWP <-> APO communication, we recommend implementing that functionality in a Windows Service that then controls the APO running in the audio engine.
Building the Sysvad Universal Audio Sample for Windows 10 Desktop
Complete the following steps to build the sysvad sample for Windows 10 desktop.
Locate the desktop inf file (tabletaudiosample.inf) and set the manufacturer name to a value such as 'Contoso'
In Solution Explorer, select and hold (or right-click) Solution 'sysvad' , and choose Configuration Manager. If you are deploying to a 64 bit version of Windows, set the target platform to x64. Make sure that the configuration and platform settings are the same for all of the projects.
Build the all of the projects in the sysvad solution.
Locate the output directory for the build from the build. For example it could be located in a directory like this:
Navigate to the Tools folder in your WDK installation and locate the PnpUtil tool. For example, look in the following folder: C:Program Files (x86)Windows Kits10Toolsx64PnpUtil.exe .
Copy the following files to the system that you want to install the sysvad driver:
|TabletAudioSample.sys||The driver file.|
|tabletaudiosample.inf||An information (INF) file that contains information needed to install the driver.|
|sysvad.cat||The catalog file.|
|SwapAPO.dll||A sample driver extension for a UI to manage APOs.|
|PropPageExt.dll||A sample driver extension for a property page.|
|KeywordDetectorAdapter.dll||A sample keyword detector.|
Install and test the driver
Follow these steps to install the driver using the PnpUtil on the target system.
Open and Administrator command prompt and type the following in the directory that you copied the driver files to.
pnputil -i -a tabletaudiosample.inf
The sysvad driver install should complete. If there are any errors you can examine this file for additional information:
In Device Manager, on the View menu, choose Devices by type. In the device tree, locate Microsoft Virtual Audio Device (WDM) - Sysvad Sample. This is typically under the Sound, video and game controllers node.
On the target computer, open Control Panel and navigate to Hardware and Sound > Manage audio devices. In the Sound dialog box, select the speaker icon labeled as Microsoft Virtual Audio Device (WDM) - Sysvad Sample, then select Set Default, but do not select OK. This will keep the Sound dialog box open.
Locate an MP3 or other audio file on the target computer and double-click to play it. Then in the Sound dialog box, verify that there is activity in the volume level indicator associated with the Microsoft Virtual Audio Device (WDM) - Sysvad Sample driver.