本主题概述了Windows 10音频体系结构。
Windows 10音频堆栈图1
Windows 10音频堆栈图2
此图总结了Windows 10音频堆栈的主要元素。
1. APIs
1.1. 上层APIs:
- 当前支持的APIs:
- XAML MediaElement (C#, VB, C++)
- HTML <audio> 和<video> tags (用于网站和Windows Web Apps)
- Media Foundation (C++)
- Windows.Media.Capture (C#, VB, C++)
- 历史的废弃的APIs:
2.2. 底层APIs:
- 推荐使用的API:
- 面向流:
- 用于枚举设备:
- 不推荐使用的:
- MMDevice API (被Windows.Devices.Enumeration替代了)
- DeviceTopology API(可以操作控制音频适配器(声卡)内部, 可以遍历声卡的内部拓扑; 不依赖于端点设备模型(endpoint device model);优点是可以获得更多细节,可以操作不支持端点设备模型的设备;缺点是繁琐易出错)
- EndpointVolume API
2. 软件引擎
软件引擎由两个相关部分组成: 软件设备图(Audio Device Graph, audiodg.exe), 以会被前者载入音频引擎(audioeng.dll).
软件引擎的功能:
- 混合并处理音频流。 有关音频引擎如何使用缓冲区传输音频的更多信息,请参见理解WaveRT 端口驱动器(Understanding the WaveRT Port Driver).
- 加载音频处理对象(APO),它们是和硬件相关的音频信号处理插件。 有关APO的更多信息,请参见Windows音频处理对象(Windows Audio Processing Objects).
译注:和Android的Audio Flinger相当, Android的Audio effects和APO相当.
音频服务(Audio Service, audiosrv.dll)
- 用于配置和控制音频流
- 实施Windows策略以进行背景音频播放,回避(译注:比如在通化时自动降低音乐音量, 参考默认回避体验)等。
音频端点生成器(Audio Endpoint Builder, audioendpointbuilder.exe)
- 用于发现新的音频设备并创建软件音频端点
音频驱动(Audio drivers)
- 它们遵循端口微型端口模型(对应于高级Linux声音体系结构-ALSA)
- 允许音频堆栈渲染和捕获来自多个音频设备的音频,这些设备包括:集成扬声器和麦克风,耳机/耳机,USB设备,蓝牙设备,HDMI等
硬件
- 音频解码器(Audio codec)
- DSP (可选)
- 集成扬声器, 麦克风, etc
- 外部设备:USB音频设备,蓝牙音频设备,HDMI音频等
- 除了APO之外,也可以在硬件中(例如,编解码器或DSP)实现信号处理
参考文献:
https://blogs.msdn.microsoft.com/iliast/2015/02/16/overview-of-the-windows-8-1-audio-stack/