Core Audio APIs 的优势:
Windows Vista 、 Windows 7 、 Windows server 2008 等系统 音频系统相比之前的系统有很大的变化,产生了一套新的底层 API 即 Core Audio APIs 。该低层 API 为高层 API( 如 Media Foundation( 将要取代 DirectShow 等高层 API) 等 ) 提供服务。 相比之前版本的 API 有如下优势:
1. 具有低延时、故障恢复能力的音频流。
2. 提高可靠性 ( 将很多音频函数从核心态移到了用户态 )
3. 提高了安全性 (在安全的,低优先级别的线程处理被保护的音频内容)
4. 为单独的音频设备分配了特定的系统级别的规则 (console, multimedia, communications) 。
5. 用户可以直接操作相应音频终端设备 (Audio Endpoint Devices 如:扬声器、耳机、麦克风、 CD 播放器 ) 的软件抽象。
Core Audio APIs 在系统中的位置:
Core Audio APIs 的组成:
1. Multimedia Device (MMDevice) API 该 API 用于枚举系统中的音频终端设备 (Audio Endpoint Devices) 。告诉音频客户端程序有哪些音频终端设备以及它们的性能,并且为这些设备创建驱动实例 (driver instances) 。是最基本的 Core Audio API ,为其他三个 API 提供服务。
主要接口:
IMMDeviceEnumerator 用来列举音频终端设备。
IMMDevice 代表一个音频设备 (audio device) 。
IMMEndpoint 代表一个音频终端设备 (audio endpoint device) ,只有一个方法 GetDataFlow ,用来识别一个音频终端设备是一个输出设备 (rendering device) 还是一个输入设备 (capture device) 。
IMMDeviceCollection 代表一个音频终端设备的集合
2. EndpointVolume API 使客户端程序能够操作音频终端设备。
主要接口:
IAudioEndpointVolume 用于控制音频终端设备的音量、静音。
3. Windows Audio Session API (WASAPI) 使客户端程序能够管理介于程序和音频终端设备之间的音频数据。
如应用程序本身的音量。
主要接口:
ISimpleAudioVolume 代表控制来往音频终端设备的音频流的音量。
4. DeviceTopology API 客户端程序使用这个 API 可直接沿着音频适配器 (audio adapters) 的硬件设备里的数据通道进入布局特征。是最底层的音频 API ,可以通过适配器设备 (adapter devices) 的布局来查看和管理设备中的音频控制。下图为 DeviceTopology API 的作用范围
音频适配器设备 (audio adapter device) 内部 是由很多 Part 组成。主要包括 亚单位 ( Subunit ) 和连接头 ( Connector ) 。亚单位主要分为:音量控制 (Vol) 、静音控制 (Mute) 、多路器 (MUX) 等。连接头 (Con) 是一个连接的两端。
Core Audio APIs 的使用:
<1> 音频终端设备 (Audio Endpoint Device) 音量、静音控制
比如控制“声音”对话框下“播放”选项卡中的“扬声器”等,“录制”选项卡中的“麦克风”、“立体声混音”等
步骤:
1. 得到 IMMDeviceEnumerator 接口。
2. 遍历音频终端设备得到 IMMDeviceCollection 接口。
3. 根据 IMMDeviceCollection 得到每个设备的IPropertyStore 接口,从而分辨并搜索到指定的设备IMMDevice 接口。
4. 用IMMDevice 接口激活音量、静音控制接口IAudioEndpointVolume 。
<2> 音频适配器设备亚单位 (Subunit) 的音量、静音控制
比如控制“声音”对话框下“播放”选项卡中的“扬声器”下的“ CD 音频”、“麦克风”、“ Fornt Pink In ”等的控制。
步骤:
1. 得到 IMMDeviceEnumerator 接口。
2. 遍历音频终端设备得到 IMMDeviceCollection 接口。
3. 根据 IMMDeviceCollection 得到每个设备的IPropertyStore 接口,从而分辨并搜索到指定的设备IMMDevice 接口。
4. 根据IMMDevice 接口和连接器接口IConnector 得到音频终端设备所对应的设备适配器(adapter device) 的布局接口IDeviceTopology 。
5. 根据IDeviceTopology 接口得到指定的部分(Part) 。
6. 最后用得到的部分(Part) 接口IPart 激活音量控制接口IAudioVolumeLevel 和静音控制接口IAudioMute 。
<3> 会话 (Session) 音量、静音控制
比如“音量合成器”中应用程序的音量。
步骤:
1. 得到 IMMDeviceEnumerator 接口。
2. 根据 IMMDeviceEnumerator 得到默认设备的IMMDevice 接口。
3. 得到音频会话接口 IAudioSessionManager 。
4. 由 IAudioSessionManager 接口得到 IAudioSessionControl 接口,该接口用来设置会话 (Session) 参数。
5. 设置好了参数之后,在由IAudioSessionManager 接口得到音频会话的音量、静音控制接口ISimpleAudioVolume ,从而可以控制程序的音量、静音。
转自:
http://blog.csdn.net/zhaozy694992769/article/details/6079273