Overview of the Windows 8.1 Audio Stack
As a Program Manager in the Audio team, one of my goals is to improve visibility into the Windows audio stack. As a result, I’ve decided to start a series of posts that provide a high-level overview of the Windows 8.1 audio stack. As time progresses, my goal is to enhance this information and go into more depth.
From a high level perspective, the audio stack has 6 main components:
Audio Device Graph (audiodg.exe), which loads the Audio Engine (audioeng.dll)
Corresponds to Android’s AudioFlinger
Mixes and processes audio streams
Loads “Audio Processing Objects” (APOs), which are H/W-specific plugins that process the audio signal. Android has a similar element called “audio effects”
Audio Service (audiosrv.dll)
Used to setup and control audio streams
Implements Windows policies for background audio playback, ducking, etc
Audio Endpoint Builder (audioendpointbuilder.exe)
- Used to discover new audio devices and create S/W audio endpoints
They follow the port-miniport model (corresponds to the Advanced Linux Sound Architecture - ALSA)
Allow the audio stack to render and capture audio from several audio devices, including: integrated speakers and microphones, headsets/headphones, USB devices, Bluetooth devices, HDMI, etc
Integrated speakers, microphone, etc
External devices: USB audio devices, Bluetooth audio devices, HDMI audio, etc
Signal processing can also be implemented in the H/W (e.g. the codec or the DSP), instead of or in addition to the APOs
The following diagram shows a graphical view of all the above items:
In the following blog posts I will dive deeper into each of the audio components that were described above.
Finally, I would like to thank Frank Yerrace and Kishore Kotteri from the Audio dev team for their contributions to this article.