我想创建一个虚拟音频设备,它从默认输出(即输出IOAudioStream)中获取音频数据,并将其转换为输入IOAudioStream。
我浏览了我能找到的大多数示例,但是它们只实现了一个特性,即最多将输出IOAudioStream复制到输入at。这意味着只有在选择音频设备作为输出时,它才会将音频转换为输入流。
这应该是可能的,因为ScreenFlow允许通过安装创建虚拟驱动程序的kext来录制计算机音频。
如何从默认输出访问音频数据并将其发送到我的虚拟驱动程序?
发布于 2013-09-03 23:09:21
看看开源的WavTap,它是开源的SoundFlower虚拟声卡驱动程序的简化分支。这是一个.kext,我相信它基本上能做你想要的。
作为参考,下面是一些流行的商业闭源选项的工作原理:
流氓变形虫的
基于开源SoundFlower .kext的-Captures系统音频via代码
在启动应用程序时,通过用“-Captures”框架替换普通的CoreAudio.framework来修补应用程序的音频
在来自Unsanity的haxie“应用程序增强器”(APE)的帮助下,-Captures一个已经在运行的应用程序的音频
这些功能被标记为“即时开启”功能(InstantOn.kext)。
安博西亚软件的
通过内部开发的.kext提供-Captures系统音频和应用程序音频
Telestream的
通过in-house developed .kext.的-Captures系统音频( 2.x版使用varaudio.kext;3.x版使用TelestreamAudio.kext)
Macsome的
-Unknown方法
阿拉皮集团的
使用SoundFlower .kext的-Captures系统音频
更新#1
在阅读了作者的评论后,它的潜在目标似乎是能够捕获系统声音,而无需将虚拟音频驱动程序发布为设备(将出现在系统首选项列表中),并且无需更改当前的默认输出设备(或至少设备已更改的外观)。
SoundFlower:在安装时将声音设备添加到列表
WavTap:在安装时将声音设备添加到列表中;在WavTap应用程序启动时自动选择该设备;在应用程序关闭时自动取消选择该设备并重新选择以前的设备
Audio Hijack Pro:仅当选择了默认系统声音的音频捕获时才添加声音设备;当不再选择音频捕获时删除声音设备并重新选择以前的设备
WireTap工作室:未知
ScreenFlow:在不更改当前默认输出设备和不将虚拟音频驱动程序发布为设备的情况下捕获系统声音
更新#2
引用CoreAudio苹果工程师杰夫·摩尔关于WireTap和Audio Hijack Pro等应用程序的话:
“系统上没有给你提供任何特定应用程序输出的API,或者系统不支持hardware...Capturing系统声音的整个混合,这些人必须很聪明。没有什么能阻止你做同样的事情,除了你有多愿意动手。事实是,Mac的音频系统首先是为了性能而设计的。这导致我们在设计中很难在不增加性能损失的情况下支持您想要的功能。因此,我们选择了更好的性能,但代价是无法提供这一功能。“
如果你想阅读更多关于这个主题的内容,请查看CoreAudio应用编程接口邮件列表上的这些帖子:
"WireTap, CoreAudio's API, and system capture, and kexts..."
"Another question on capturing audio played back by a software"
"Capturing currently played audio using CoreAudio on Mac"
"'audio hijack'"
"monitoring system audio output like wire tap"
"Capturing audio output to a file"
"Mirroring Audio Output"
"Recording system audio"
相关的SO问题:
Hide Audio device using codeless kext
长话短说,你不太可能找到来自苹果的例子来实现这一点,你也不太可能找到实现这一点的开源代码,除非有人觉得非常慷慨。它似乎太有价值的信息。
发布于 2013-09-09 04:10:42
经过进一步的研究,下面是我想出的一些理论技术,它们可能会让你实现你的目标:
附注:如果Mac OS X允许将隐藏设备也设置为默认输出设备,则系统首选项将显示为所选设备的什么内容?如果它显示辅助输出设备处于选中状态,那么您又增加了一个暗示,即没有任何更改。
发布于 2021-10-14 13:34:04
BlackHole是一种较新的开源虚拟音频设备,可以与最新版本的MacOS一起使用-它支持多个音频通道和采样率。
它可以用作音频接收器和/或源。作为聚合音频设备的一部分,它也很方便,因此可以听到音频并重新路由-例如,使用MacOS音频MIDI设置应用程序
https://stackoverflow.com/questions/18443621
复制相似问题