Core Audio APIs是在Windows Vistat中的一组新的用户态的音频组件,它改善了应用程序操作音频的能力。包括以下几个方面:
- 低延迟,几乎无故障的音频流;
- 提供了可靠性;
- 提供了安全性;
- 分配了特定的系统级别的规则(console、mulitimedia,comunications)给单独的音频设备。
- 用户可以直接操作,相应的endpoint设备的软件抽象(如:扩音器,耳麦及麦克风)
以下的高层API是以Core Audio APIs来工作的。
- DirectSound;
- DirectMusic;
- Windows mulitimedia waveXxx and mixerXxx functions
- Media Foundation
- Streaming Audio Renderer(SAR)
绝大多数的音频应用程序与以上的高层次的API交互而不是直接操作底层的Core Audio API。例如以下一些应用可能用到高等级的API:
- 媒体播放器
- DVD播放器
- 游戏
- 商用软件
通常这些应用用到DirectSound和媒体的底层函数。
Core Audio API 包括:
- Mulitmedia Device(MMDevice) API:用这些API来枚举系统中的音频设备;
- Windows Audio Session API(WASAPI):用这些API来创建和管理来自音频设备的音频流。
- DeviceTopology API:用这些API来直接访问声音适配器中的硬件数据通路的拓扑特性(如音量控制,复用器等)
- EndpointVolume API: 用这些API直接访问音频设备的声音控制。这些API通常是给那些以独占模式管理音频流的应用程序。
这些API提供对于设备的抽象概念,这些概念被描述成为Audio Endpoint Device。每个API包含很多COM接口。由于音频需要低延时和精确的同步,所以MMDevice、WASAPI、DeviceTopology和EndpointVolume APIs不依赖于.NET框架。
除了vista之外其他的操作系统都不支持Core Audio API。包括:Microsoft Windows Server 2003, Windows XP, Windows ME, Windows 2000,和Windows 98。
Vista中的音量控制被分为4中级别:
- IAudioStream接口提供session每个流的音量控制;
- methods in the IAudioStreamVolume interface;
- IChannelIAudioVolume接口提供seesion中每个通道的音量控制。
- ISimpleAudioVolume接口控制每一个Session的主音量。
假设需要改变设备的音量大小,则需要操作IAudioEndpointVolume接口。
例如:
// 初始化 COM :
CoInitializeEx(NULL, COINIT_MULTITHREADED)
// 获取 IMMDeviceEnumerator 设备指针:
CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL,
CLSCTX_ALL, __uuidof(IMMDeviceEnumerator),
(void**)&m_pEnumerator)
// 获取 IMMDevice 指针,这是是所有 MM 设备 — 多媒体设备的根
// 其中第一个参数是指明设备的用途
n 第二个参数指明设备角色
m_pEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &m_pDeviceOut)
// 获取 IAudioEndpointVolume 指针:(我们需要控制系统音量所对应的对象)
m_pDeviceOut->Activate(__uuidof(IAudioEndpointVolume),CLSCTX_ALL,NULL,(void**)&m_AudioEndpointVolume)
//根据需要调用该对象的 API ,进行操作。
参考:
https://www.yuque.com/docs/share/786aeb44-fe2b-4c49-9d2a-5798285aa74c