Core Audio 在Vista/Win7上实现

应用范围: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

Core Audio 在Vista/Win7上实现,布布扣,bubuko.com

时间: 2024-07-28 13:54:51

Core Audio 在Vista/Win7上实现的相关文章

Vista/Win7 UAC兼容程序开发指南

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

通过修改manifest文件来解决Vista/Win7/Win8下应用程序兼容性问题

在Vista/Win7/Win8下,有一个系统兼容性助手功能,在安装程序安装完成或卸载完成后,可能会弹出应用程序兼容性助手相关的提示,提示程序可能安装不正确,很是烦人.如下图所示: 事实上,我们的程序兼容性是没问题的,只不过是在程序中没有指定应用程序兼容的操作系统,所以导致了这些问题.      VS2008和VS2010可以生成一个与exe应用程序相关联的.manifest文件,微软已经为该文件中添加了一个新的<compatibility> 字段, 这个字段用来指定你的应用程序可以兼容的操作

Win7上安装Linux双系统

今天帮同学在Win7上安装Linux,感觉一篇教程很不错,mark一下 原地址:Win7下U盘安装Ubuntu14.04双系统步骤详解 一.前期准备 1.大于2G的U盘一个(我的系统盘制作完成后大约占1个多G的容量) 2.已下载好的Ubuntu安装文件(选择在官网下载,有32和64位选择) 3.已安装好UltraISO软件的电脑(UltraISO安装包自行百度) 4.打算安装Ubuntu的电脑(我的电脑已安装好64位Win7系统) 二.UltraISO制作Ubuntu14.04的系统启动盘 1.

Win7上从硬盘安装Debian

最近一直想将笔记本搞成Win7+Debian双系统,因为不管如何优化,2G内存的Win7笔记本上开个Linux虚拟机都实在吃力.经过一段时间的资料搜索,并阅读Debian官方的安装文档,今天终于实现.看网上很多文章的方法都感觉很麻烦,又要下载grub4dos,又要改boot.ini(Win7上没有boot.ini,取代的是bcdedit),又要改什么menu.lst.其实如果仅仅是想从Win7安装Debian,实现双系统并存,而没有其它要求的话,步骤并没有这么复杂.另外,网上很多文章(尤其中文文

将asp.net core站点发布到IIS上遇到的问题

今天第一次将整个 asp.net core 站点发布到 IIS 上,以前都是发布到 Linux 服务器上. 开始使用 dotnet publish -c release 命令发布,用浏览器访问站点时出现下面的错误: HTTP Error 502.5 - Process Failure Common causes of this issue: The application process failed to start The application process started but th

如何在WIN7上添加磁盘

1.右键计算机--管理--存储--磁盘管理. 2.右击你要分割的磁盘C--选择"压缩卷",打开压缩C盘空间对话框--在"输入压缩空间量"中输入分区要减少的容量--单击"压缩"按钮开始压缩. 3.压缩完成后,在原分区后面会出现"可用空间"--右击"可用空间"--选择"新建简单卷"--单击"下一步"--输入新分区的容量--单击"下一步"--分配分区的盘

Redis在win7上的可视化应用

http://www.cnblogs.com/stone_w/p/4757578.html Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排序.与mem

Swing-布局管理器应用--WIN7上计算器的UI实现

学完了Swing布局管理器,为了加深理解我决定做一些UI的实现,那就从WIN7上的计算器开始吧!首先,我们来研究一下它的UI.该计算机的UI主要有3个,分别是标准型.科学型和程序员型,如下图所示.    标准型UI   科学型UI   程序员型UI 首先分析标准型UI: 标准型UI分析 该UI除菜单栏外,分两部分.考虑到它们在不同的UI中都会复用,我们将其分别使用screenPanel和standardPanel来进行实现.screenPanel没什么好说的,使用一个按钮独占整个面板,并设置按钮

win7上搭建ruby on rails 开发环境

对于接触一种新技术.新语言的新手来说,搭建学习环境永远是个艰难的话题,尤其是在国内这种网络下,难度更是大增. 在经历了大约十多个小时的艰苦奋战后,本人终于在win7搭建成功ruby+rails+mysql环境,本文没有详细的步骤,折腾的时候根本没闲情截图写博客,同时也根本不想再折腾一遍,写本文的初衷只是想给即将和还在折腾童鞋建议. 上策:不要在win7上折腾: 可以使用MAC OS.Linux上搭建这个环境难度相对很小,遇到问题解决方法也很简单.或者搭建虚拟机也是建议的方式. 中策:ruby+r