在前面介绍了ADM(Audio Device Module),它用于抽象音频设备管理和音频数据采集/播放接口。windows的实现是AudioDeviceWinowCode
,它封装了Core Audio APIs
实现了对音频设备的操作。
Core Audio APIs
windows提供了多种音频操作API,比如最常用的是 waveXxx
系列API,DirectSound
等。而Core Audio APIs
是这些API的基础,这些API使用Core Audio APIs
提供了更通用的功能。
如下图是Core Audio APIs的架构图:
Core Audio APIs
是一些高阶API(例如MME,DirectSound等)的基础。- 箭头的方向表示了音频数据的流向。
- 它有两种工作模式,共享模式和独占模式。共享模式就是大家(多个应用程序)同时播放声音(声音被混音),独占模式就是只能有一个程序播放,我一播,就没其他程序的声音了。
- 共享模式下,会有一个Audio Service进行协调各应用程序间的音频数据处理。这个很容易理解,多路声音,总该需要一个大管家来协调使用设备。
- 独占模式下,音频数据就直接到内核的驱动了。
Core Audio APIs
特点是音频处理更高效,延时更低。对webrtc 这种RTC系统来说,正是需要其低延时的保证。
它四类子API
从上图中可以看到Core Audio APIs是一系列API的集合,它包括四类子API。
- MMDevice API(用于检索播放采集设备)
用于应用程序检索音频终端设备,枚举出所有可使用的音频设备属性及确定其功能,并为这些设备创建驱动程序实例,是最基本的Core Audio API,服务于其它3个APIs。
- WASAPI(控制播放和采集流)
应用程序可以通过它管理程序和音频终端设备之间音频数据的流。比如采集,回放音频。
- DeviceTopology API(webrtc中没用到)
应用程序可以遍历音频适配器设备和音频终端设备的内部拓扑,并单步执行将设备