`
DJ阿布
  • 浏览: 30667 次
  • 性别: 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

分享到:
评论

相关推荐

    VISTA、Win Server 2008、Win7 等系统音频系统底层API(升级版)

    Windows Vista、Windows 7、Windows server 2008等系统音频系统相比之前的系统有很大的变化,产生了一套新的底层API即Core Audio APIs。该低层API为高层API( 如Media Foundation(将要取代DirectShow等高层API)等 )...

    Win7系统音频系统底层API

    ### Win7系统音频系统底层API详解 随着技术的发展与用户需求的不断增长,Windows系统音频架构也经历了重大的变革。自Windows Vista起,包括Windows 7、Windows Server 2008在内的操作系统引入了一套全新的底层音频...

    Windows API使用说明

    Windows API(Application Programming Interface,应用程序编程接口)是Microsoft Windows操作系统提供给编程人员的一组函数调用接口,用于实现对Windows系统底层资源和功能的访问。这些API函数主要使用C语言编写,...

    C# 本地音频开源库

    Windows Vista、Windows 7、Windows server 2008等系统音频系统相比之前的系统有很大的变化,产生了一套新的底层API即Core Audio APIs。该低层API为高层API( 如Media Foundation(将要取代DirectShow等高层API)等 )...

    Windows api.pdf

    驱动开发是Windows API的重要组成部分,包括Device Access API、Driver and Driver Installation Reference等,帮助开发者创建设备驱动程序,确保硬件与操作系统的无缝交互。例如,Audio Devices DDI Reference、...

    C++修改默认音频输出设备

    在C++编程中,改变默认的音频输出设备是一项涉及到操作系统底层接口和音频处理技术的任务。在Windows操作系统中,这项功能通常需要使用特定的API或库来实现,如本例中提到的`PolicyConfig.h`库。`PolicyConfig.h`是...

    tcp udp 底层c++封装类(windows和linux)

    本项目提供了一种底层的C++封装,使得在Windows和Linux操作系统上使用这两种协议变得更加便捷。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它确保数据的无损...

    windows32 完整帮助系统

    Windows 32 SDK(Software Development Kit)是微软为Windows操作系统提供的开发工具包,主要适用于Win2000到Win2003 Server版本的操作系统。该SDK包含了丰富的API文档和技术资源,旨在帮助开发者更好地利用操作系统...

    Windows和Linux开发-系统声音控制(获取音量,调整音量和静音)

    需要注意的是,虽然Qt提供了这样的接口,但在某些平台上,如Linux,它可能依赖于底层的音频系统(如PulseAudio),因此实际的音量控制可能会受到这些系统的影响。 ```cpp #include class SystemSoundController {...

    所有的windows进程解析

    6. **csrss.exe**:Client/Server Runtime Subsystem,是Windows系统中负责处理Windows API调用的核心子系统之一,主要负责创建和管理用户会话。 - **安全性**:由于涉及到系统级别的API调用,因此csrss.exe的...

    在线音乐平台(asp.net+sql server)含sql文件

    6. **音乐播放**:平台应有音乐播放功能,可能涉及音频文件的流式传输、播放列表管理等技术。 7. **搜索功能**:通过关键字搜索音乐,需要实现高效的查询算法和全文搜索。 8. **推荐系统**:根据用户的听歌历史和...

    ffmpeg(windows32位和64位系统)

    FFmpeg是一款强大的开源跨平台多媒体处理工具,广泛应用于音频、视频的编码、解码、转换、流媒体处理等任务。它的出现使得开发者和普通用户都能方便地处理多媒体文件,而无需深入了解底层的编解码技术。 FFmpeg的...

    Android音频

    Android音频系统主要包括了AudioFlinger、AudioHardwareInterface以及相关的Java API等核心组件。 **1. AudioFlinger** - **定义**: AudioFlinger是音频子系统的核心部分,主要负责管理音频流的混合、转换和播放。 ...

    API例程

    开发者可以使用MySQL、Oracle、SQL Server等数据库提供的API,来构建与数据库交互的应用程序。 2. **网络通信API**:如HTTP、HTTPS API,用于构建Web服务和客户端应用。例如,Python的requests库就是一种常见的...

    win32 API 语音聊天 C/S模式

    在IT领域,Win32 API(Application Programming Interface)是Windows操作系统提供的一套底层函数库,开发者可以使用这些函数来创建应用程序。本项目“win32 API 语音聊天 C/S模式”是一个基于Win32 API实现的简单...

    C#版KTV点歌系统源代码cshartKTV

    3. **播放控制**:系统需具备播放、暂停、停止、快进、倒退等功能,可能需要使用到Windows Media Player控件或者更底层的音频处理API,如NAudio库。 4. **权限管理**:不同用户(如普通顾客、服务员、管理员)有...

    Windows Mobile实例开发

    Windows Mobile是微软为掌上设备如智能手机和平板电脑设计的操作系统,它提供了丰富的API和开发环境,使得开发者能够创建功能强大的应用程序。 一、开发环境与工具 开发Windows Mobile应用通常需要以下工具: 1. ...

    andriod 14 api源码

    Android 14 API源码是Android开发者的重要参考资料,特别是对于那些需要深入了解系统底层运作机制、进行定制化开发或者优化应用性能的开发者来说。这个压缩包包含的文件是Android 14版本的所有源代码,让我们来深入...

    视频监控系统(VC++) 毕业设计

    VC++,全称为Visual C++,是Microsoft开发的一款强大的面向对象的编程工具,它提供了丰富的Windows API接口,使得开发者能够方便地创建图形用户界面并进行系统级操作。 在毕业设计中,选择VC++作为开发视频监控系统...

Global site tag (gtag.js) - Google Analytics