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://itchen.iteye.com/blog/1167417

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值