`
DJ阿布
  • 浏览: 30101 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Windows 7、Windows Server 2008等系统音频系统底层API[转]

 
阅读更多

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics