首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mac OS X虚拟音频驱动程序

Mac OS X虚拟音频驱动程序
EN

Stack Overflow用户
提问于 2013-08-26 20:02:44
回答 3查看 39.3K关注 0票数 41

我想创建一个虚拟音频设备,它从默认输出(即输出IOAudioStream)中获取音频数据,并将其转换为输入IOAudioStream。

我浏览了我能找到的大多数示例,但是它们只实现了一个特性,即最多将输出IOAudioStream复制到输入at。这意味着只有在选择音频设备作为输出时,它才会将音频转换为输入流。

这应该是可能的,因为ScreenFlow允许通过安装创建虚拟驱动程序的kext来录制计算机音频。

如何从默认输出访问音频数据并将其发送到我的虚拟驱动程序?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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

长话短说,你不太可能找到来自苹果的例子来实现这一点,你也不太可能找到实现这一点的开源代码,除非有人觉得非常慷慨。它似乎太有价值的信息。

票数 65
EN

Stack Overflow用户

发布于 2013-09-09 04:10:42

经过进一步的研究,下面是我想出的一些理论技术,它们可能会让你实现你的目标:

  1. 类似于Prosoft Engineering的Hear产品,您可以创建一个HAL插件(用户模式虚拟驱动程序),而不是.kext (内核模式虚拟驱动程序)。苹果有一个名为"SampleHardwarePlugIn"的示例硬件抽象层,PulseAudio也有一个。然而,使用他的方法,我不认为你可以访问预混合的系统音频流。您必须收集来自不同应用程序(必须使用CoreAudio播放声音)的所有流,并将它们混合在一起以生成伪系统声音capture.
  2. Create,这是一个隐藏在用户交互中的虚拟音频设备[1][2]。当用户希望捕获默认声音时,会显示包含隐藏的虚拟设备和当前默认声音设备的programmatically create an aggregate device。暂时将此聚合设备设置为默认输出。通过这种方式,您既可以捕获默认声音,也可以听到它。

附注:如果Mac OS X允许将隐藏设备也设置为默认输出设备,则系统首选项将显示为所选设备的什么内容?如果它显示辅助输出设备处于选中状态,那么您又增加了一个暗示,即没有任何更改。

票数 8
EN

Stack Overflow用户

发布于 2021-10-14 13:34:04

BlackHole是一种较新的开源虚拟音频设备,可以与最新版本的MacOS一起使用-它支持多个音频通道和采样率。

它可以用作音频接收器和/或源。作为聚合音频设备的一部分,它也很方便,因此可以听到音频并重新路由-例如,使用MacOS音频MIDI设置应用程序

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18443621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档