Windows的音频体系
Windows10的音频架构图
KSEndpoint组件是系统提供的文件,随Windows Vista和更高版本的Windows一起提供。此组件以DLL的形式提供(Audiokse.dll). KSEndpoint抽象内核模式设备端点,并为音频引擎提供对抽象端点的访问。
对于PCI/PCIE音频设备,系统提供端口类驱动程序Portcls.sys及适配器驱动程序HDAudio,sys
对于USB总线音频适配器,系统提供 AVStream 类系统驱动程序 (Ks.sys) 以及 USB 音频驱动程序 (Usbaudio.sys)
PortClass: https://docs.microsoft.com/zh-cn/windows-hardware/drivers/audio/introduction-to-port-class
Windows音频引擎架构图
下图显示了音频引擎内部结构的简化布局。
系统提供的APOs和sAPOs是音频引擎的基本构建块。音频引擎将系统提供的APO和sAPO配置为称为管道的组件。音频引擎中有两种类型的管道:
- 流管道由APOs和sapo组成,它们执行来自单个应用程序的流的本地数字音频处理。这种管道中的sAPO称为局部效果sAPO(LFX sAPO)。
- 设备管道由APOs和sapo组成,它们执行影响全局所有流的数字音频处理。这种管道中的sAPO称为全局效果sAPO(GFX sAPO)。
应用层音频关系图
音频各个模块之间的关系图如下:
https://learn.microsoft.com/zh-cn/windows/win32/coreaudio/user-mode-audio-components
avstream-ks架构
avstream-ks: https://docs.microsoft.com/zh-cn/windows-hardware/drivers/stream/avstream-overview
WindowsXP的音频框架
对比winowsVista之后的音频架构,可以看到将KMixer这些东西移除,并将代码移值到应用层通过音频引擎CoreApi来实现。
WindowsXP中USB音频设备栈
下图显示USB音频设备的驱动程序层次结构。图中所示的所有驱动程序组件都是由Microsoft随操作系统提供的。
- USB音频类系统驱动程序(USBADEO.sys)是一个AVStream微型驱动程序,它为符合通用串行总线(USB)设备类别定义的音频设备提供驱动程序支持。
- USBCCGP是USB通用驱动,用于根据USB接口描述符分枚举USB功能子设备。
ASIO与KS,DirectSound,WaveOut模型图
- DirectSound的延迟一般会大于100ms
- MME接口的延迟一般会大于200ms
- WASAPI在win10上一般为10-20ms
- ASIO直接与硬件打交道,一般延迟为3-5ms