VISTA、Win Server 2008、Win7 等系统音频系统底层API

VISTA、Win Server 2008、Win7 等系统音频系统底层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://kanglovepei.spaces.live.com/blog/cns!861E0583566CFC59!266.entry

-----------------------------------------------------------------------------------------------------------------------------------------------------------

应用范围:Vista / win7, 不支持XP

1. 关于Windows Core Auido APIs

      在Windowss Vista及Windows 7操作系统下,微软为应用程序提供了一套新的音频组件来改进音频质量。Core Audio APIs提供了这些组件的使用方法,是更高级的APIs的实现基础。例如:DirectSound、DirectMuisc、waveXxx、mixerXxx等API都是在其之上构建。他们之间的关系如下图所示。
 

       


      Core Audio APIs由三大部分组成:MMDevice API、WASAPI、DeviceToplogyAPI。三者分别侧重不同方面。
      Mmdevice API:用于枚举系统的音频端节点设备。
      WASAPI(Windows Audio Stream API):用于创建、管理进出音频端节点设备的音频流。
      DeviceToplogyAPI:直接获取硬件设备的拓扑结构及其功能。
      本文主要介绍使用WASAPI对音频流管理的功能实现系统录音功能。
 

2. 音频流的管理

      枚举系统的音频设备并制定回放、录音设备后,下一步工作就是打开设备连接,管理该连接上的数据流。WASAPI可供应用程序创建并管理音频流。应用程序可使用WASAPI实现Rendering a Stream, Capturing a Stream以及Loopback Recording。我们可以利用Loopback Recording来实现系统录音功能,达到"Record what you hear"的目的。
在loopback模式下,WASAPI应用程序可以捕获播放设备当前正在播放的音频流。操作步骤为:

  • 获取播放设备端口的IMMDevice接口
  • 获取指定设备上的音频播放格式
  • 在播放设备端口上初始化loopback模式的音频捕获流
  • 调用IAudioClient::GetService方法获取IAudioCaptureClient接口
  • 开启捕获线程,捕获线程循环交替调用IAudioCaptureClient::GetBuffer和IAudioCaptureClient::ReleaseBuufer方法获取音频数据之后写入指定文件


3. 方案缺陷

      按照MSDN所说,loopback模式只能用于shared-mode音频流,而对exclusive-mode音频流无能为力,也就是说遇到exclusive-mode音频流该方案将失效,不过exclusive-mode很少见,在Demo测试的各用例中未遇到此种情况。此外,由于WASAPI仅由Windows Vista及以上系统提供,故XP下无法使用此方案,该方案对系统的依赖性高,可移植性小。

参考资料:
MSDN相关章节:
msdn.microsoft.com/en-us/library/dd370802(VS.85).aspx

PS:
Demo程序  RecordingDemo.exe (48.00 kb)


------------------------------------------------------------------------------------------------------------------------------------------------------------

本人在使用DTM 1.2测试Motherboard 的时候在Device Console的界面找不到AUDIO Fidelity的测试项目。不知是什么原因。服务器和客户端都有重新装过系统,且AUDIO的驱动也是过了WHQL的。但是就是看不到关于AUDIO Fidelity的测试项目。


是因为没有检测到audio设备才没有出现这些测试项吗?确保你的audio可以正常的工作。

如果您在测试时选择的是“Previously Logo’d Motherboard”,那么系统认证不再需要导入Audio Fidelity test。选择这个类别的合作伙伴要通过BasicPremium认证必须分别符合所有台式机的BasicPremium认证要求。不过主板测试应该不在此列。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值