SoundFlower的替代品BlackHole【M1 macOS内录系统声音】

2,299 阅读6分钟

SoundFlower

众所周知,QuickTime无法录制系统声音,在macOS之前的版本,和M1(Apple Silicon)没问世之前,SoundFlower一直都是首选!可惜SoundFlower的作者已经很久没有更新了,新版的macOS和新款的MacBook pro苦寻内录系统声音的解决方案久矣。

展示

在这里插入图片描述 在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

BlackHole: 音频回传驱动程序

BlackHole是一个现代的macOS虚拟音频环回驱动程序,允许应用程序以零延迟的方式将音频传递给其他应用程序。

下载安装程序

特点

  • 构建2、16、64、128、256个音频通道版本
  • 可定制的通道数、延迟、隐藏设备
  • 可定制的镜像设备,允许隐藏输入或输出
  • 支持8kHz、16kHz、44.1kHz、48kHz、88.2kHz、96kHz、176.4kHz、192kHz、352.8kHz、384kHz、705.6kHz和768kHz采样率
  • 零延迟驱动
  • 兼容macOS Mavericks (10.9)和更新的版本。
  • 为英特尔和Apple silicon 构建

image.png

安装说明

选项1:下载安装程序

  1. 下载最新的安装程序
  2. 关闭所有正在运行的音频应用程序
  3. 打开并安装软件包

选项2:通过brew软件安装

  • 2ch: brew install blackhole-2ch
  • 16ch: brew install blackhole-16ch
  • 64ch: brew install blackhole-64ch

卸载说明

选项1:使用卸载程序

选项2:手动卸载

  1. 用终端命令删除BlackHole驱动。

    rm -R /Library/Audio/Plug-Ins/HAL/BlackHoleXch.driver

    请务必更换 X 为 216, 或 64.

    注意,该根目录是 /Library 不是 /Users/user/Library.

  2. 用终端命令重新启动CoreAudio

    sudo launchctl kickstart -kp system/com.apple.audio.coreaudiod

欲了解更多具体细节请访问wiki

用户指南

Logic Pro X

GarageBand

Reaper

录制系统音频

  1. 设置多输出设备
  2. 在 "Audio Midi Setup"→"Audio Devices "中,右击新创建的多重输出,选择 "Use This Device for Sound Output"。
  3. 打开数字音频工作站(DAW),如GarageBand,将输入设备设置为 "BlackHole"。
  4. 将轨道设置为从通道1-2输入
  5. 从另一个应用程序播放音频,并在DAW中监听或录音

在应用程序之间路由音频

  1. 在发送应用程序中设置输出驱动器为 "BlackHole"。
  2. 将音频输出到任何通道
  3. 打开接收应用程序,将输入设备设置为 "BlackHole"。
  4. 从相应的输出通道输入音频

开发者指南

所有非GPL-3.0的项目都需要一个许可证。

请支持我们的努力工作和持续发展。要申请许可证联系我们.

安装

要安装BlackHole,请将BlackHoleXch.driver文件夹复制到/Library/Audio/Plug-Ins/HAL,并使用sudo launchctl kickstart -kp system/com.apple.audio.coreaudiod重新启动CoreAudio。

定制BlackHole

以下预编译器常量可用于轻松定制BlackHole的构建。

kDriver_Name
kPlugIn_BundleID
kPlugIn_Icon

kDevice_Name
kDevice_IsHidden
kDevice_HasInput
kDevice_HasOutput

kDevice2_Name
kDevice2_IsHidden
kDevice2_HasInput
kDevice2_HasOutput

kLatency_Frame_Size
kNumber_Of_Channels
kSampleRates

它们可以在构建时通过xcodebuild使用GCC_PREPROCESSOR_DEFINITIONS指定。

例子。

xcodebuild \
-project BlackHole.xcodeproj \
GCC_PREPROCESSOR_DEFINITIONS='$GCC_PREPROCESSOR_DEFINITIONS 
kSomeConstant=value'

在使用字符串时,请确保转义任何引号。

重命名BlackHole

要定制BlackHole,需要改变以下常数。

  • kDriver_Name
  • kPlugIn_BundleID(注意,这必须与目标bundleID匹配)
  • kPlugIn_Icon

这些可以使用xcodebuild指定为预编译器常量。

driverName = "BlackHole"
bundleID = "audio.existential.BlackHole"
icon = "BlackHole.icns"

xcodebuild \
-project BlackHole.xcodeproj \
-configuration Release \
PRODUCT_BUNDLE_IDENTIFIER=$bundleID \
GCC_PREPROCESSOR_DEFINITIONS='$GCC_PREPROCESSOR_DEFINITIONS
kDriver_Name="'$driverName'"
kPlugIn_BundleID="'$bundleID'"
kPlugIn_Icon="'$icon'"'

定制通道、延时和采样率

kNumber_Of_Channels用于设置通道数量。在指定高通道数时要小心。尽管BlackHole被设计成在较高的通道数下非常有效,但你的计算机可能无法跟上。采样率也是一个因素。不要使用高采样率和高数量的通道。一些应用程序不知道如何处理高通道数。请谨慎行事。

kLatency_Frame_Size是驱动程序处理传入和传出的音频的时间,以帧为单位。它可以用来延迟BlackHole中的音频,最多65536帧。如果使用BlackHole的高通道数,这可能会有帮助。

kSampleRates设置音频设备的采样率或采样率。如果使用多个采样率,用", "分开。例如:44100, 48000

镜像设备

默认情况下,BlackHole有一个隐藏的镜像音频设备。这些设备可以使用以下常数进行定制。

// Original Device
kDevice_IsHidden
kDevice_HasInput
kDevice_HasOutput

// Mirrored Device
kDevice2_IsHidden
kDevice2_HasInput
kDevice2_HasOutput

当所有设置为 "真 "时,第二个BlackHole会出现,其工作原理完全相同。输入和输出是镜像的,所以两个设备的输出都会进入两个设备的输入。

如果你需要一个单独的设备进行输入和输出,这很有用。

例子

// Original Device
kDevice_IsHidden=false
kDevice_HasInput=true
kDevice_HasOutput= false

// Mirrored Device
kDevice2_IsHidden=false
kDevice2_HasInput= false
kDevice2_HasOutput=true

在这种情况下,我们有两个BlackHole设备。一个将只有输入,另一个将只有输出。

在项目中使用的一种方法是隐藏镜像设备并在幕后使用它。这样,用户就会看到一个只有输入的设备,而把音频路由到他们场景后面的输出。

隐藏的音频设备可以用kAudioHardwarePropertyTranslateUIDToDevice来访问。

持续集成/持续部署

BlackHole可以被集成到你的CI/CD中。在github.com/Existential… 来看安装程序是如何建立、签署和公证的。

常见问题

为什么BlackHole没有显示在应用程序文件夹中?

BlackHole是一个虚拟的音频环回驱动程序。它只在 "音频MIDI设置"、"声音首选项 "或其他音频应用程序中显示出来。

我怎样才能在听音频的同时使用BlackHole?

Setup a Multi-Output Device.

我怎样才能改变多输出设备的音量?

不幸的是,macOS不支持改变多输出设备的音量,但你可以在音频MIDI设置中设置单个设备的音量。

为什么BlackHole没有播放东西?

  • 检查 "系统偏好"->"安全和隐私"->"隐私"->"麦克风",确保你的数字音频工作站(DAW)有麦克风权限。
  • 检查 "音频Midi设置 "中BlackHole输入和输出的音量是否全部调高。
  • 如果你使用的是多输出设备,由于macOS的问题,内置输出必须被启用,并被列为多输出中的顶级设备。 详情见这里.

为什么在使用多输出或聚合时,音频在X分钟后会出现故障?

  • 你需要为除时钟源设备外的所有设备启用漂移校正。

哪些应用程序不能使用多输出?

不幸的是,多路输出有很大的问题,有些应用程序根本就不能使用它们。这里有一个已知的列表。如果你有更多的补充,请让我知道。

  • 苹果播客
  • 苹果信息
  • HDHomeRun

带有聚合/多输出的AirPods无法工作。

AirPods的麦克风以较低的采样率运行,这意味着它不应该被用作聚合或多输出设备的主/时钟设备。解决方案是使用你的内置扬声器(并使其静音)或BlackHole 2ch作为主/时钟设备。BlackHole 16ch不能作为主设备使用,因为主设备需要有2ch。

阅读讨论#146

我可以将BlackHole整合到我的应用程序中吗?

BlackHole是根据GPL-3.0许可的。只要您的应用程序也获得GPL-3.0许可,您就可以使用BlackHole。对于所有其他应用程序,请直接联系Existential Audio.