Windows音频体系UAA
+ -

Windows的音频体系

2021-07-01 600 1

Windows10的音频架构图

Windows10的音频架构图

PortClass
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音频引擎架构图

下图显示了音频引擎内部结构的简化布局。

Windows音频引擎架构图
系统提供的APOs和sAPOs是音频引擎的基本构建块。音频引擎将系统提供的APO和sAPO配置为称为管道的组件。音频引擎中有两种类型的管道:

  • 流管道由APOs和sapo组成,它们执行来自单个应用程序的流的本地数字音频处理。这种管道中的sAPO称为局部效果sAPO(LFX sAPO)。
  • 设备管道由APOs和sapo组成,它们执行影响全局所有流的数字音频处理。这种管道中的sAPO称为全局效果sAPO(GFX sAPO)。

https://docs.microsoft.com/zh-cn/windows-hardware/drivers/audio/exploring-the-windows-vista-audio-engine

应用层音频关系图

音频各个模块之间的关系图如下:
音频模块关系图
https://learn.microsoft.com/zh-cn/windows/win32/coreaudio/user-mode-audio-components

avstream-ks架构

KS架构

avstream-ks: https://docs.microsoft.com/zh-cn/windows-hardware/drivers/stream/avstream-overview

WindowsXP的音频框架

WindowsXP的音频框架

对比winowsVista之后的音频架构,可以看到将KMixer这些东西移除,并将代码移值到应用层通过音频引擎CoreApi来实现。

WindowsXP中USB音频设备栈

下图显示USB音频设备的驱动程序层次结构。图中所示的所有驱动程序组件都是由Microsoft随操作系统提供的。

WindowsXP中USB音频设备栈

  • USB音频类系统驱动程序(USBADEO.sys)是一个AVStream微型驱动程序,它为符合通用串行总线(USB)设备类别定义的音频设备提供驱动程序支持。
  • USBCCGP是USB通用驱动,用于根据USB接口描述符分枚举USB功能子设备。

ASIO与KS,DirectSound,WaveOut模型图

ASIO与KS,DirectSound,WaveOut模型图

  • DirectSound的延迟一般会大于100ms
  • MME接口的延迟一般会大于200ms
  • WASAPI在win10上一般为10-20ms
  • ASIO直接与硬件打交道,一般延迟为3-5ms

101653767424

0 篇笔记 写笔记

Windows的音频体系
Windows10的音频架构图KSEndpoint组件是系统提供的文件,随Windows Vista和更高版本的Windows一起提供。此组件以DLL的形式提供(Audiokse.dll). KSEndpoint抽象内核模式设备端点,并为音频引擎提供对抽象端点的访问。对于PCI/PCIE音频设备......
PortClass流式音频架构
在Windows操作系统中,PortClass仅用于纯音频设备驱动的开发,其配合内核流式驱动模块ks.sys实现音频设备驱动的开发。内核流式驱动模块ks.sys包含两部分内容,一部分是提供内核通用的流式驱动模块,另一部分是avstream模块。avstream模块即可用于开发音频设备驱动,也可用......
PortClass音频驱动程序架构
音频适配器驱动程序是最低层的音频驱动,对下实现对硬件的操作,以上提供端口驱动的函数回调。所以音频适配器驱动的代码来自两部分,一部分是厂商提供的硬件驱动代码,一般是由portclass提供的通用音频驱动模块。入口函数因为适配器驱动程序是作为内核模式驱动程序服务安装的,所以和其它驱动一样,由操作系统加......
PortClass提供的音频MINI端口驱动
PortClass提供了以下几种MiniPort驱动类型。Cyclic DMA wave input and output:此类Mini端口驱动程序支持访问ISA和其他声卡的基于DMA的wave I/O功能。接口专门处理循环(autoinit)DMA缓冲区,流问题由端口驱动程序解决。Scatt......
ASIO 简介
ASIO是Audio Stream I/O的简称。ASIO主要用于对希望在个人电脑音频设备相对于系统的音频设备实现高效音频处理、高数据吞吐量,音频硬件端的同步、低延迟和可扩展性等方面的性能改善。ASIO比较灵活,音频接口不需要绑定到任何固定数量的输入和输出通道(当然,此数量受计算机系统本身的处理......
ASIO 获取音频参数init_asio_static_data函数
要打开音频设备,总得先获取参数吧。比如UAC设备,在打开MIC时,系统会通过特定类请求设置采样率,这样固件会源源不断地通过此采样率获取音频数据,然后通过USB要同步传输将数据发送给主机。在ASIO中,获取ASIO设备的参数有几个函数,详情可见:ASIO 函数功能介绍 。ASIO的测试用例是通过in......
快速调出Windows音频控制面板命令行
VC可可以直接调用:WinExec("rundll32.exe shell32.dll, Control_RunDLL mmsys.cpl", SW_HIDE);或者在命令行中运行rundll32.exe shell32.dll, Control_RunDLL mmsys.......
WDM-UAA音频驱动简介
UAA全称Microsoft Universal Audio Architecture.Windows内核音频体系包括两大部分,分别为WDM和KS(kernel stream)组件。并且其支持的操作系统从Windows 98至现在最新的Windows 11.Windows对支持符合UAA规范的P......
Window音频处理对象APO(SFX,GFX,EFX,MFX,SFX)
APO代表“音频处理对象”。它是一个API和框架,由Microsoft设计,用于构建可插拔的音频过滤器(DSP)。原则上它与VST非常相似。Window音频处理对象APO用于实现对系统的声卡的数据处理,通过处理,可以实现用户自定义的均衡器、混响、颤音、回声消除 (AEC) 和自动增益控制 (AGC......
APO音频处理象开发概述及对接口关系
自定义音频处理对象APO的步骤:创建自定义 APO com 对象以提供所需的音频处理对象。创建用户界面以使用配置自定义 APO(可选)。创建 INF 文件以安装和注册 APO 和自定义用户界面。APO 必须有一个输入和一个输出连接。这些连接是音频缓冲区,可以有多个通道。APO 只能修改通过其I......
清除音频设备的音效处理模块APO(FxProperties注册表项)
Windows 音效处理大致分为SFX,MFX,EFX, 按照顺序,依次处理。下面是如何移除这些模块的方法:打开设备管理器-音频输入输出设备,找到要修改的设备,右键属性-详情,在属性列表框里选择 设备实例路径,有如下值,记录红色部分SWDMMDEVAPI{0.0.0.00000000}.{0......
让Windows音频服务以独立的进程AudioSvr运行
Windows控制台下以管理员运行:sc config audiosrv type= own然后重新启动电脑,这样系统就会出现一个AudioSvr......
Windows音频设备及状态
Windows音频设备都在注册表:计算机HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionMMDevicesAudio下,不过这里存储的是系统中当前存在的和以前存在的音频设备。当然,在设备管理器中,也可以通过显示隐藏设......
获取默认的音频设备属性getDefaultDevice
使用COREAPI获取默认音频属性wstring DeviceAPOInfo::getDefaultDevice(bool input, int role){ wstring result; IMMDeviceEnumerator* enumerator = NULL; ......
Windows音频音擎audiodg与APO关系
APO与其他音频过滤框架(如VST)的区别在于,APO是Windows音频引擎使用的过滤框架。VST:Virtual Studio TechnologyWindows音频引擎是Windows音频堆栈的核心组件。它的作用是在单个应用程序音频流和硬件音频设备之间架起桥梁。因此,它可以处理各种任务......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!