Core Audio APIS in Vista/Win7实现
来源:互联网 发布:linux init6重启 编辑:程序博客网 时间:2024/04/30 10:37
应用范围: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)
- Core Audio APIS in Vista/Win7实现
- Core Audio APIS in Vista/Win7实现
- Core Audio APIs 技术笔记一(扬声器音量设置)
- Windows下Core Audio APIS 音频应用开发(一)
- Windows下Core Audio APIS 音频应用开发(二)
- Windows下Core Audio APIS 音频应用开发(三 )
- Windows下Core Audio APIS 音频应用开发(四)
- Windows下Core Audio APIS 音频应用开发(一)
- Windows下Core Audio APIS 音频应用开发(五)
- Audio in Windows Vista(转载)
- Vista Core API: Changing audio device sample rate
- Core Audio APIs 技术笔记二(麦克风音量和增强设置)
- Core Audio APIs 技术笔记二(麦克风音量和增强设置)
- core audio
- A full-duplex audio player in C# using the waveIn/waveOut APIs
- Bitcoin Core APIs
- Delphi实现vista,win7,wiin8 下拖拽功能
- how to delete "permission from trustedinstaller" folder in Win7/Vista
- 进程的默认工作目录
- 委托与事件代码详解与(Object sender,EventArgs e)
- C++学习-宏
- PB ImportFile导入数据
- iframe里面的页面调用父窗口,左右窗口js函数的方法
- Core Audio APIS in Vista/Win7实现
- hdu1102Constructing Roads(Prime 算法求最小生成树)
- 使用usbasp烧写arduino
- STL list
- nginx做图片访问分发
- 访问其他程序的SharedPreferences里的数据信息
- spring3mvc与struts2比较
- 解决Linux上Dr.com
- 自己的线程池