我想创建一个虚拟音频设备,该设备从默认输出(它是输出IOAudioStream)获取音频数据,并将其转换为输入IOAudioStream。
我遍历了大部分示例,但是它们仅实现了一项功能,最多将输出IOAudioStream复制到输入IOAudioStream。这意味着,如果选择音频设备作为输出,则仅将音频转换为输入流。
这应该是可能的,因为ScreenFlow允许通过安装创建虚拟驱动程序的kext来录制计算机音频。
如何从默认输出访问音频数据并将其发送到虚拟驱动程序?
看一下开源WavTap,它是开源SoundFlower虚拟声卡驱动程序的简化分支。我相信这是一个.kext文件,它可以满足您的要求。
作为参考,以下是一些流行的商业封闭源选项的工作方式:
Rogue Amoeba的Audio Hijack Pro-
通过基于开源SoundFlower的代码捕获系统音频。kext-通过
为应用程序替换“补丁”框架来捕获应用程序的音频。启动应用程序时正常的CoreAudio.framework-
借助Unsanity的haxie“ Application Enhancer”(APE)捕获已运行的应用程序的音频
这些功能被标记为其“ Instant On”功能(InstantOn.kext)。
Ambrosia Software的WireTap Studio-
通过内部开发的.kext捕获系统音频和应用程序音频
Telestream的ScreenFlow -Capture
通过内部开发的.kext捕获系统音频。(版本2.x使用varaudio.kext;版本3.x使用TelestreamAudio.kext)
Macsome的录音机-未知
方法
Araelium Group的Screenflick-
使用SoundFlower .kext捕获系统音频
更新#1
阅读作者的评论后,看来潜在的目标是能够捕获系统声音,而无需将虚拟音频驱动程序发布为设备(会出现在“系统偏好设置”列表中)并且无需更改当前的默认输出设备。 (或至少是设备已更改的外观)。
SoundFlower:在安装时将声音设备添加到列表中
WavTap:在安装时将声音设备添加到列表中;启动WavTap应用程序时自动选择设备;自动取消选择设备时,应用程序关闭和重新选择一台设备
的音频劫持临:再添仅在选择默认的系统声音的音频采集声音设备; 当不再选择音频捕获时删除声音设备,然后重新选择以前的设备
WireTap Studio:未知
ScreenFlow:捕获系统声音而无需更改当前默认输出设备,也无需将虚拟音频驱动程序发布为设备
更新2
:苹果公司CoreAudio工程师Jeff Moore引用WireTap和Audio Hijack Pro之类的应用程序时说:
“系统上没有API可以为您提供任何特定应用程序的输出或将系统不支持硬件... [捕获系统声音],这些人必须很聪明。除了让您愿意弄脏双手之外,没有什么可以阻止您执行相同的操作。事实上,Mac OS X的音频系统的设计首先是为了提高性能,这导致我们进行设计,在不付出性能损失的情况下不容易支持所需的功能,因此,我们选择了更好的性能,但代价是无法提供此功能。”
如果您想了解更多有关该主题的信息,请在CoreAudio API邮件列表中查看以下主题:
“ WireTap,CoreAudio的API,系统捕获和kexts ...”
“有关捕获软件播放的音频的另一个问题
”使用Mac上的CoreAudio捕获当前播放的音频“
”“音频劫持”“
”监视系统音频输出(如电线抽头)“
”将音频输出捕获到文件中“
”镜像音频输出“
”记录系统音频“
相关的SO问题:
使用无代码kext隐藏音频设备
长话短说,除非有人感到非常慷慨,否则您不太可能从Apple找到实现此目标的示例,也不太可能找到实现这一目标的开源代码。信息似乎太有价值了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句