BlackHole

BlackHole


文章目录

  • BlackHole
    • 一、关于 BlackHole
      • 功能描述
    • 二、安装、卸载
      • 安装
        • 方式一:下载安装器
        • 方式二:使用 Homebrew 安装
      • 卸载
        • 方式一:使用卸载器
        • 方式二:手动卸载
    • 三、用户使用指南
      • 1、Logic Pro X
      • 2、GarageBand
      • 3、Reaper
      • 4、录制系统声音
      • 5、Route Audio Between Applications
    • 四、开发指南
      • 1、所有 non-GPLv3 项目需要许可证
      • 2、构建、安装
      • 3、自定义 BlackHole
      • 4、重命名 BlackHole
      • 5、自定义频道, 延迟, 和 采样率
      • 6、镜像设备
      • 7、持续集成/持续部署
    • 五、Feature Requests
    • 六、FAQ
      • 1、为什么 BlackHole 在app文件夹不显示?
      • 2、如何在听音频的同时使用 BlackHole?
      • 3、BlackHole 使用多少位深,我可以改变它吗?
      • 4、如何更改多输出设备的音量?
      • 5、为什么什么都没输入 BlackHole?
      • 6、为什么使用多输出或聚合后 X分钟后会出现音频故障?
      • 7、为什么安装程序失败?
      • 8、哪些应用程序不适用于多输出?
      • 9、具有聚合/多输出的AirPods不工作。
      • 10、我可以将 BlackHole 集成到我的应用程序中吗?


一、关于 BlackHole

BlackHole is a modern macOS virtual audio loopback driver that allows applications to pass audio to other applications with zero additional latency.

  • github : https://github.com/ExistentialAudio/BlackHole
  • 下载安装器:https://existential.audio/blackhole/?pk_campaign=github&pk_kwd=readme
  • Dicord : https://discord.gg/y8BWfnWRn
  • 捐助:https://github.com/sponsors/ExistentialAudio

功能描述

  • Builds 2, 16, 64, 128, and 256 audio channels versions
  • Customizable channel count, latency, hidden devices
  • Customizable mirror device to allow for a hidden input or output
  • Supports 8kHz, 16kHz, 44.1kHz, 48kHz, 88.2kHz, 96kHz, 176.4kHz, 192kHz, 352.8kHz, 384kHz, 705.6kHz and 768kHz sample rates
  • Zero additional driver latency
  • Compatible with macOS 10.10 Yosemite and newer
  • Builds for Intel and Apple Silicon
  • No kernel extensions or modifications to system security necessary

Audio MIDI Setup


二、安装、卸载

安装

方式一:下载安装器
  1. Download the latest installer
  2. Close all running audio applications
  3. Open and install package

方式二:使用 Homebrew 安装
  • 2ch: brew install blackhole-2ch
  • 16ch: brew install blackhole-16ch
  • 64ch: brew install blackhole-64ch

卸载

方式一:使用卸载器
  • Download BlackHole 2ch Uninstaller
  • Download BlackHole 16ch Uninstaller
  • Download BlackHole 64ch Uninstaller

方式二:手动卸载

1、在终端输入以下命令,删除 BlackHole 驱动

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

注意:将 X 替换为你的频道: 2, 16, 或 64

文件夹的根路径是: /Library 而不是 /Users/user/Library


2、使用下面命令,在终端重启 CoreAudio

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

更多细节可以参考:https://github.com/ExistentialAudio/BlackHole/wiki/Uninstallation

三、用户使用指南

1、Logic Pro X

  • Logic Pro X to FaceTime
  • Logic Pro X to Google Meet
  • Logic Pro X to Skype
  • Logic Pro X to Zoom

2、GarageBand

  • GarageBand to FaceTime
  • GarageBand to Google Meet
  • GarageBand to Skype
  • GarageBand to Zoom

3、Reaper

  • Reaper to Zoom by Noah Liebman

4、录制系统声音

  1. 设置多输出设备:https://github.com/ExistentialAudio/BlackHole/wiki/Multi-Output-Device
  2. Audio MIDI SetupAudio Devices 右键点击最新创建的 多输出设备,然后选择 使用这个设备作为音频输出。
  3. 打开 电子音频站 (DAW) ,比如 GarageBand,设置输入设备为 BlackHole
  4. 设置轨道来从 channel 1-2 输入
  5. 从其他app播放音频,在你的 DAW 中模拟或者录制

5、Route Audio Between Applications

  1. 将声卡输出设置为 BlackHole
  2. 输出音频到任意频道
  3. 打开接收的应用,设置输入设备到 BlackHole
  4. 从相应的输出频道 输入音频

四、开发指南

1、所有 non-GPLv3 项目需要许可证

请支持我们的辛勤工作和持续发展。要申请许可证 联系Existical Audio。(devinroth@existential.audio )

2、构建、安装

build 之后,安装 BlackHole

  1. 复制或移动build之后的 BlackHoleXch.driver 包到 /Library/Audio/Plug-Ins/HAL
  2. 使用 sudo launchctl kickstart -kp system/com.apple.audio.coreaudiod 重启 CoreAudio。

3、自定义 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

它们可以使用 GCC_PREPROCESSOR_DEFINITIONS 在生成 xcodebuild时指定。

示例:

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

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


4、重命名 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'\"'

5、自定义频道, 延迟, 和 采样率

  • kNumber_Of_Channels 用于设置通道的数量。
    指定高通道数时要小心。
    尽管 BlackHole 被设计成在更高的通道数下非常高效,但你的计算机可能无法跟上。
    采样率也发挥了作用。不要对大量通道使用高采样率。
    有些应用程序不知道如何处理 高通道数。小心操作。
  • kLatency_Frame_Size 是驱动程序处理传入和传出音频的时间(以帧为单位)。
    它可用于 将黑洞内部的音频延迟至最大 65536 帧。
    如果使用具有高通道数的黑洞,这可能会有所帮助。
  • kSampleRates 设置音频设备的一个或多个采样率。
    如果使用多个采样率,则每个采样率用逗号(,)分隔。
    例如:kSampleRates='44100,48000'.。

6、镜像设备

默认情况下,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 访问隐藏的音频设备。


7、持续集成/持续部署

BlackHole 可以集成到您的CI/CD中。
看看 create_installer.sh 脚本来查看安装程序是如何构建、签名和公证的。

https://github.com/ExistentialAudio/BlackHole/blob/master/Installer/create_installer.sh


五、Feature Requests

如果您对以下任何功能感兴趣,请在链接的issue中留言。

若要申请未列出的功能,请创建一个新 issue。

  • Sync Clock with other Audio Devices in development see v0.3.0
  • Output Blackhole to other Audio Device
  • Add Support for AU Plug-ins
  • Inter-channel routing
  • Record Directly to File
  • Configuration Options Menu
  • Support for Additional Bit Depths

六、FAQ

1、为什么 BlackHole 在app文件夹不显示?

BlackHole 是一个虚拟音频环回驱动器,它只在 Audio MIDI Setup, Sound Preferences 中 或其他应用中显示


2、如何在听音频的同时使用 BlackHole?

参见 Setup a Multi-Output Device.

https://github.com/ExistentialAudio/BlackHole/wiki/Multi-Output-Device


3、BlackHole 使用多少位深,我可以改变它吗?

BlackHole使用32位浮点深度,因为macOS Core Audio在系统级原生使用32位。
这提供了最广泛的兼容性和最大的音频余量。

此格式对于最多24位整数是无损的。
所有应用程序都应该能够播放和录制音频,并且不需要在 BlackHole 驱动程序级别调整比特深度。


4、如何更改多输出设备的音量?

很遗憾,macOS不支持更改多输出设备的音量,但您可以在 音频MIDI设置中 设置单个设备的音量。


5、为什么什么都没输入 BlackHole?

  • 检查 System PreferencesSecurity & PrivacyPrivacyMicrophone 来确定你的 DAW 应用有麦克风访问。
  • 检查 Audio MIDI Setup 中 BlackHole 输入和输出的音量是否一直在上升。
  • 如果您使用的是多输出设备,由于macOS的问题,必须启用内置输出,并将其列为多输出中的顶级设备。更多详情可见:https://github.com/ExistentialAudio/BlackHole/wiki/Multi-Output-Device#4-select-output-devices

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

您需要为除时钟源(也称为主设备或主设备)之外的所有设备,启用漂移校正。


7、为什么安装程序失败?

某些版本的macOS存在一个已知问题,即当安装包位于某些文件夹中时,安装包可能无法安装。
如果您将 .pkg 文件下载到了下载文件夹中,请尝试将其移动到桌面并再次打开.pkg(反之亦然)。


8、哪些应用程序不适用于多输出?

不幸的是,多输出可能会有问题,有些应用程序根本无法使用它们。下面一个已知的列表。
如果发现其他不兼容的应用程序,请打开issue 进行报告: https://github.com/ExistentialAudio/BlackHole/issues。

  • Apple Podcasts
  • Apple Messages
  • HDHomeRun

9、具有聚合/多输出的AirPods不工作。

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

更多详情可见:https://github.com/ExistentialAudio/BlackHole/issues/146


10、我可以将 BlackHole 集成到我的应用程序中吗?

BlackHole 根据GPL-3.0获得许可。只要您的应用程序也获得GPL-3.0许可,您就可以使用BlackHole。

对于其他应用,请联系: Existential Audio directly。


伊织 译 2024-03-08(节日快乐!)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/441347.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

线程有几种状态,状态之间的流转是怎样的?

Java中线程的状态分为6种: 1.初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 2.运行(RUNNABLE):Java线程中将就绪(READY)和运行中(RUNNING)两种状态笼统的称为“运行”…

2024 批量下载公众号文章内容/阅读数/在看数/点赞数/留言数/粉丝数导出pdf文章备份(带留言):公众号爱在冰川近3000篇历史文章在线查看,找文章方便了

关于公众号文章批量下载,我之前写过很多文章: 视频更新版:批量下载公众号文章内容/话题/图片/封面/音频/视频,导出html,pdf,excel包含阅读数/点赞数/留言数 2021陶博士2006/caoz的梦呓/刘备我祖/六神读金…

自研cloud框架专题–web模块(三)

项目特点一:框架集成 1.引入核心依赖2.配置相关功能 二:功能介绍 1.swagger支持并提供swagger快速配置2.knife增强swagger支持3.全局请求参数校验(Validation)支持4.字段脱敏支持5.默认jackson序列化6.xss,cors支持7.访问日志支持8.全局异常处理,统一返回结果9.系统关键及常用信…

【Cesium for Supermap】S3MTiles图层box裁剪

效果图: 代码: let viewer new Cesium.Viewer(cesiumContainer);// 添加SuperMap iServer发布的S3M缓存服务let promise viewer.scene.addS3MTilesLayerByScp("http://www.supermapol.com/realspace/services/3D-BIMbuilding/rest/realspace/data…

操作系统体系结构(不是很重点)

目录 一. 大内核与微内核二. 分层结构, 模块化和外核2.1 分层结构2.2 模块化2.3 宏内核与微内核 三. 外核 \quad 一. 大内核与微内核 \quad 由于对系统资源进行管理的功能不会直接涉及硬件, 所以有的就没有把这个功能放在内核里面 注意: 考试的时候不要写变态, 要写CPU状态的转…

数据结构---复杂度(1)

1.时间复杂度 衡量算法的好坏,使用大写的o来表示时间复杂度,通俗的讲,就是一个算法执行的次数; 时间复杂度就是数学里面的函数表达式;本质上是一个函数; 下面举几个例子: (1)这里的执行次数是…

Redis 之七:穿透、击穿、雪崩

(本内容部分来自知乎网等网络) Redis 缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一些问题。其中,最要害的问题,就是数据的一致性问题,从严…

java 数据结构二叉树

目录 树 树的概念 树的表示形式 二叉树 两种特殊的二叉树 二叉树的性质 二叉树的存储 二叉树的基本操作 二叉树的遍历 二叉树的基本操作 二叉树oj题 树 树是一种 非线性 的数据结构,它是由 n ( n>0 )个有限结点组成一个具有层次…

3D资产管理

3D 资产管理是指组织、跟踪、优化和分发 3D 模型和资产以用于游戏、电影、AR/VR 体验等各种应用的过程。 3D资产管理也称为3D内容管理。 随着游戏、电影、建筑、工程等行业中 3D 内容的增长,实施有效的资产管理工作流程对于提高生产力、减少错误、简化工作流程以及使…

前端实现单点登录

简单概括就是&#xff0c;一个系统登录&#xff0c;跳转多个系统&#xff0c;其他系统不需要再登录&#xff0c;直接进入页面 登录的系统 <template><div><div class"content"><div class"item" v-for"(item,index) in list&q…

【wine】winetricks部署一个windows xp 应用程序的基础运行环境

AI 的资料 我想基于wintricks的“安装windows dll 或组件”功能&#xff0c;安装一个基础的windows xp运行环境&#xff0c;应当安装那些项目&#xff1f; 为了基于winetricks创建一个基础的Windows XP运行环境&#xff0c;您应该考虑安装以下项目以提高兼容性&#xff1a; 核…

四 笔记本centos7.9 隧道代理

上一章 内网穿透已经可以用公网连接服务器了三 笔记本 centos7.9 内网穿透-CSDN博客 现在数据库不暴露公网的情况下怎么连接mysql 1 mysql 已经安装完毕了,这里不在介绍安装步骤 2 连接公网ip服务器或者内网ip服务器 3 配置隧道监听端口 4:测试连接

CMake笔记

CMake笔记 文章目录 CMake笔记1 工程项目一般形式2 常见命令2.1 project2.2 set2.3 message2.4 add_executable()2.5 语法原则2.6 add_subdirectory2.7 add_library2.8 list 3 安装3.1 安装.h文件/文本文件3.2 安装工程脚本3.3 安装目录/目录下内容3.4 安装库文件3.5安装过程 4…

20.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据分析工具数据类型编辑功能的实现

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易道云信息技术研究院VIP课 上一个内容&#xff1a;19.数据分析工具数据类型配置功能的实现 码云地址&#xff08;master 分支&#…

LCR 179. 查找总价格为目标值的两个商品 - 力扣

1. 题目 购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况&#xff0c;返回任一结果即可。 2. 示例 3. 分析 我们首先想到暴力解法&#xff0c;这道题目的暴力还是比较简单的&#xff0c;列举每个数的情况即可…

Open CASCADE学习|表面着色显示模型

模型表面着色具有如下作用&#xff1a; 视觉增强&#xff1a;通过为模型表面添加着色&#xff0c;可以使其更加生动和逼真&#xff0c;提高视觉体验。 信息区分&#xff1a;在复杂的模型中&#xff0c;不同的部分或组件可能需要通过不同的颜色来区分&#xff0c;以便更清晰地…

干货!Python函数中的参数类型

1.必须参数 调用函数的时候&#xff0c;必须以正常的顺序传参&#xff0c;实参的数量和形参的数量保持一致 def demo(name, age):print("我的姓名是&#xff1a;%s, 年龄是&#xff1a;%d"%(name, age))demo("张三", 22) # 我的姓名是&#xff1a;张三…

通过测试自动化转移安全关键软件测试

我们正面临安全关键软件的成本危机&#xff0c;这意味着所需增加的功能已经超出了支付其开发费用的能力。例如&#xff0c;波音 787 项目需要 650 万行代码&#xff0c;设计、开发和测试成本达 40 亿美元。波音777X项目的成本数字并未公开披露&#xff0c;波音737 MAX最初估计为…

Python单线程、多线程、多进程

并发和并行 并发&#xff1a;单核CPU在不同时刻只执行一个任务&#xff0c;在同一时间段内&#xff0c;交替执行两个任务。 并行&#xff1a;双核CPU可以在同一时刻执行两个任务。 多核CPU的每个核心都可以独立执行一个任务&#xff0c;而且多个核心之间不会相互干扰。 并发…

typescript学习(更新中)

目录 开发环境搭建类型如何声明有哪些类型编译配置文件 开发环境搭建 npm i -g typescripttsc检查是否安装成功 类型如何声明 // 先声明再赋值 let a: number a 1// 直接赋值 let b 1function sum(a: number, b: number): number {return a b } console.log(sum(1, 2))有…