系统音频系统底层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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值