博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Core Audio 在Vista/Win7上实现
阅读量:4921 次
发布时间:2019-06-11

本文共 1197 字,大约阅读时间需要 3 分钟。

应用范围: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相关章节:

转载于:https://www.cnblogs.com/fuland/p/3717684.html

你可能感兴趣的文章
vim部分常用命令总结
查看>>
TensorFlow TensorBoard使用
查看>>
快速傅里叶变换(FFT)蝴蝶迭代
查看>>
【解题报告】BSOI2550 方格取数游戏 (转)
查看>>
为IEnumerable扩展一个ForEach方法
查看>>
面试题6:重建二叉树(前序遍历和中序遍历)
查看>>
(六)Oracle学习笔记—— 约束
查看>>
Node.js相关——CommonJS规范
查看>>
知交好友剩几个
查看>>
画图演示方法的执行过程
查看>>
Python列表切成多个/生成多个空列表
查看>>
Web前端性能优化
查看>>
根文件系统的制作
查看>>
最短路径算法----floyd(转)
查看>>
资源 | 普通程序员如何自学机器学习
查看>>
用R自动生成pdf文件
查看>>
运行时错误'430': 类不支持自动化或不支持期望的接口。New ADODB.Connection问题...
查看>>
mysql 查找树状子节点函数
查看>>
tp查询中2个表格中字段,比较大小
查看>>
课堂练习之找出所有的“1”
查看>>