ExistentialAudio/BlackHole

GitHub: ExistentialAudio/BlackHole

一款 macOS 虚拟音频环回驱动,以零延迟实现应用间音频路由与系统音频捕获录制。

Stars: 18953 | Forks: 797

![BlackHole: 音频环回驱动程序](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/39b976f3d5064713.png) # BlackHole: 音频环回驱动程序 ![平台: macOS](https://img.shields.io/badge/platform-macOS-lightgrey) [![发布版本](https://img.shields.io/github/v/release/ExistentialAudio/BlackHole)](https://github.com/ExistentialAudio/BlackHole/releases) [![许可证](https://img.shields.io/github/license/ExistentialAudio/BlackHole)](LICENSE) [![Twitter](https://img.shields.io/badge/Follow%20on%20Twitter-1da1f2)](https://twitter.com/ExistentialAI) [![Facebook](https://img.shields.io/badge/Like%20on%20Facebook-4267B2)](https://www.facebook.com/Existential-Audio-103423234434751) BlackHole 是一个现代的 macOS 虚拟音频环回驱动程序,允许应用程序以零额外延迟将音频传递给其他应用程序。 ### [下载安装程序](https://existential.audio/blackhole) ### [加入 Discord 服务器](https://discord.gg/y8BWfnWRnn) ## 目录 - [功能](#features) - [安装说明](#installation-instructions) - [卸载说明](#uninstallation-instructions) - [用户指南](#user-guides) - [开发者指南](#developer-guides) - [功能请求](#feature-requests) - [常见问题](#faq) - [Wiki](https://github.com/ExistentialAudio/BlackHole/wiki) ## 功能 - 构建 2、16、64、128 和 256 声道版本 - 可自定义声道数、延迟、隐藏设备 - 可自定义镜像设备以允许隐藏的输入或输出 - 支持 8kHz、16kHz、44.1kHz、48kHz、88.2kHz、96kHz、176.4kHz、192kHz、352.8kHz、384kHz、705.6kHz 和 768kHz 采样率 - 零额外驱动延迟 - 兼容 macOS 10.10 Yosemite 及更新版本 - 为 Intel 和 Apple Silicon 构建 - 无需内核扩展或修改系统安全设置 ![音频 MIDI 设置](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/669ca54495064714.png) ## 安装说明 ### 选项 1:下载安装程序 1. [下载最新安装程序](https://existential.audio/blackhole) 2. 关闭所有正在运行的音频应用程序 3. 打开并安装软件包 4. 出现提示时重新启动系统 ### 选项 2:通过 Homebrew 安装 - 2声道: `brew install blackhole-2ch` - 16声道: `brew install blackhole-16ch` - 64声道: `brew install blackhole-64ch` ## 卸载说明 ### 选项 1:使用卸载程序 - [下载 BlackHole 2声道 卸载程序](https://existential.audio/downloads/BlackHole2chUninstaller.pkg) - [下载 BlackHole 16声道 卸载程序](https://existential.audio/downloads/BlackHole16chUninstaller.pkg) - [下载 BlackHole 64声道 卸载程序](https://existential.audio/downloads/BlackHole64chUninstaller.pkg) ### 选项 2:手动卸载 1. 使用终端命令删除 BlackHole 驱动程序: `rm -R /Library/Audio/Plug-Ins/HAL/BlackHoleXch.driver` 请务必将 `X` 替换为 `2`、`16` 或 `64`。 请注意,该目录是根目录 `/Library`,而不是 `/Users/user/Library`。 2. 使用终端命令重启 CoreAudio: `sudo killall -9 coreaudiod` 有关更多详细信息,请[访问 Wiki](https://github.com/ExistentialAudio/BlackHole/wiki/Uninstallation)。 ## 用户指南 ### Logic Pro X - [Logic Pro X 到 FaceTime](https://existential.audio/howto/StreamFromLogicProXtoFaceTime.php) - [Logic Pro X 到 Google Meet](https://existential.audio/howto/StreamFromLogicProXtoGoogleMeet.php) - [Logic Pro X 到 Skype](https://existential.audio/howto/StreamFromLogicProXtoSkype.php) - [Logic Pro X 到 Zoom](https://existential.audio/howto/StreamFromLogicProXtoZoom.php) ### GarageBand - [GarageBand 到 FaceTime](https://existential.audio/howto/StreamFromGarageBandToFaceTime.php) - [GarageBand 到 Google Meet](https://existential.audio/howto/StreamFromGarageBandToGoogleMeet.php) - [GarageBand 到 Skype](https://existential.audio/howto/StreamFromGarageBandToSkype.php) - [GarageBand 到 Zoom](https://existential.audio/howto/StreamFromGarageBandToZoom.php) ### Audacity - [Audacity 设置](https://github.com/ExistentialAudio/BlackHole/wiki/Audacity) ### Reaper - [Reaper 到 Zoom](https://noahliebman.net/2020/12/telephone-colophon-or-how-i-overengineered-my-call-audio/) 由 Noah Liebman 提供 ### 录制系统音频 1. [设置多输出设备](https://github.com/ExistentialAudio/BlackHole/wiki/Multi-Output-Device) 2. 在 `音频 MIDI 设置` → `音频设备` 中,右键单击新创建的多输出设备,然后选择“将此设备用于声音输出” 3. 打开数字音频工作站 (DAW),例如 GarageBand,并将输入设备设置为“BlackHole” 4. 将轨道设置为从通道 1-2 输入 5. 从另一个应用程序播放音频,并在您的 DAW 中进行监听或录制 ### 在应用程序之间路由音频 1. 在发送应用程序中将输出驱动程序设置为“BlackHole” 2. 将音频输出到任何通道 3. 打开接收应用程序并将输入设备设置为“BlackHole” 4. 从相应的输出通道输入音频 ## 开发者指南 ### 所有非 GPLv3 项目都需要许可证 请支持我们的辛勤工作和持续开发。如需申请许可证,请[联系 Existential Audio](mailto:devinroth@existential.audio)。 ### 构建和安装 构建完成后,要安装 BlackHole: 1. 将构建好的 `BlackHoleXch.driver` bundle 复制或移动到 `/Library/Audio/Plug-Ins/HAL` 2. 使用 `sudo killall -9 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` 设置音频设备的采样率。如果使用多个采样率,请用逗号 (`,`) 分隔。例如:`kSampleRates='44100,48000'`。 ### 镜像设备 默认情况下,BlackHole 有一个隐藏的镜像音频设备。可以使用以下常量自定义这些设备。 ``` // Original Device kDevice_IsHidden kDevice_HasInput kDevice_HasOutput // Mirrored Device kDevice2_IsHidden kDevice2_HasInput kDevice2_HasOutput ``` 当所有都设置为 true 时,将出现第二个 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 中。查看 [create_installer.sh](https://github.com/ExistentialAudio/BlackHole/blob/master/Installer/create_installer.sh) shell 脚本以了解安装程序是如何构建、签名和公证的。 ## 功能请求 如果您对以下任何功能感兴趣,请在链接的 issue 中留下评论。要请求未列出的功能,请创建一个新 issue。 - [与其他音频设备同步时钟](https://github.com/ExistentialAudio/BlackHole/issues/27) 正在开发中,参见 v0.3.0 - [将 BlackHole 输出到其他音频设备](https://github.com/ExistentialAudio/BlackHole/issues/40) - [增加对 AU 插件的支持](https://github.com/ExistentialAudio/BlackHole/issues/18) - [通道间路由](https://github.com/ExistentialAudio/BlackHole/issues/13) - [直接录制到文件](https://github.com/ExistentialAudio/BlackHole/issues/8) - [配置选项菜单](https://github.com/ExistentialAudio/BlackHole/issues/7) - [支持额外的位深](https://github.com/ExistentialAudio/BlackHole/issues/42) ## 常见问题 ### 为什么 BlackHole 没有出现在“应用程序”文件夹中? BlackHole 是一个虚拟音频环回驱动程序。它只出现在 `音频 MIDI 设置`、`声音偏好设置` 或其他音频应用程序中。 ### 如何在同时使用 BlackHole 的情况下监听音频? 参见[设置多输出设备](https://github.com/ExistentialAudio/BlackHole/wiki/Multi-Output-Device)。 ### BlackHole 使用什么位深,我可以更改它吗? BlackHole 使用 32 位浮点位深,因为 macOS Core Audio 在系统级别原生使用 32 位。这提供了最广泛的兼容性和最大的音频动态余量。 此格式对于高达 24 位整数的音频是无损的。所有应用程序都应该能够播放和录制音频,并且不需要在 BlackHole 驱动程序级别调整位深。 ### 如何更改多输出设备的音量? 不幸的是,macOS 不支持更改多输出设备的音量,但您可以在“音频 MIDI 设置”中设置单个设备的音量。 ### 为什么 BlackHole 没有播放声音? - 检查 `系统偏好设置` → `安全性与隐私` → `隐私` → `麦克风`,以确保您的数字音频工作站 (DAW) 应用程序具有麦克风访问权限。 - 检查 ``音频 MIDI 设置`` 中 BlackHole 的输入和输出音量是否已调到最大。 - 如果您使用的是多输出设备,由于 macOS 的问题,内置输出必须启用并在多输出设备中列为顶部设备。[详见此处](https://github.com/ExistentialAudio/BlackHole/wiki/Multi-Output-Device#4-select-output-devices)。 ### 为什么使用多输出设备或聚合设备 X 分钟后音频会出现故障? - 您需要为除时钟源(也称为主设备或主要设备)之外的所有设备启用漂移校正。 ### 为什么安装程序会失败? - 某些版本的 macOS 存在一个已知问题,即当安装包位于某些文件夹中时,可能无法成功安装。如果您将 .pkg 文件下载到了“下载”文件夹,请尝试将其移动到桌面并再次打开该 .pkg 文件(反之亦然)。 ### 哪些应用程序不能与多输出设备配合使用? 不幸的是,多输出设备可能存在一些缺陷,某些应用程序根本无法与其配合使用。以下是已知不兼容的应用程序列表。如果发现其他不兼容的应用程序,请通过提交 [issue](https://github.com/ExistentialAudio/BlackHole/issues) 来报告它们。 - Apple Podcasts - Apple Messages - HDHomeRun ### AirPods 无法与聚合/多输出设备配合使用。 来自 AirPods 的麦克风以较低的采样率运行,这意味着它不应用作聚合或多输出设备中的主要/时钟设备。解决方案是使用内置扬声器(只需将它们静音)或将 BlackHole 2ch 作为主要/时钟设备。BlackHole 16ch 不能作为主设备,因为主设备需要具有 2 个声道。 阅读[此讨论](https://github.com/ExistentialAudio/BlackHole/issues/146)以获取更多详细信息。 ### 我可以将 BlackHole 集成到我的应用程序中吗? BlackHole 采用 GPL-3.0 许可。只要您的应用程序同样采用 GPL-3.0 许可,您就可以使用 BlackHole。对于所有其他应用程序,请[直接联系 Existential Audio](mailto:devinroth@existential.audio)。 ## 链接和资源 ### [MultiSoundChanger](https://github.com/rlxone/MultiSoundChanger) 一个用于更改声音音量的小工具,甚至支持聚合设备,因为原生音量控制器无法更改聚合设备的音量 ### [BackgroundMusic](https://github.com/kyleneideck/BackgroundMusic) Background Music,一个 macOS 音频实用程序:自动暂停您的音乐,设置单个应用程序的音量并录制系统音频。
标签:Apple Silicon, Intel, -loopback, SOC Prime, UML, 多媒体, 客户端加密, 开发工具, 开源, 录音软件, 直播工具, 系统扩展, 虚拟声卡, 虚拟音频, 零延迟, 音频回送, 音频处理, 音频录制, 音频设置, 音频路由, 音频通道, 音频驱动