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_IconkDevice_Name
kDevice_IsHidden
kDevice_HasInput
kDevice_HasOutputkDevice2_Name
kDevice2_IsHidden
kDevice2_HasInput
kDevice2_HasOutputkLatency_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_DEFINITIONSkDriver_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(节日快乐!)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MRI基础--k空间

k空间定义 k空间是表示 MR 图像中空间频率的数字数组。 k空间物理意义 k 空间的单元通常显示在主轴 kx 和 ky 的矩形网格上。 k 空间的 kx 和 ky 轴对应于图像的水平 (x) 和垂直 (y) 轴。然而,k 轴表示 x 和 y 方向上的空间频率而不是位置。 k 空间中的各个点 (kx,ky) 与图像…

聊一聊日常开发中如何优雅的避免那无处不在的空指针异常

在Java编程语言中,NullPointerException(简称NPE)是一种常见的运行时异常,当程序试图访问或操作一个还未初始化(即值为null)的对象引用时,Java虚拟机就会抛出NullPointerException。如果我们在日…

【技术】基于Github Pages搭建个人博客静态网页

写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 文章目录 一、技术基础二、新建特殊仓库三、上传网页文件四、Github Pages设置 个人网页作为仅服务个人的网页,一…

【打工日常】使用docker部署IT运维管理平台CAT

​一、CAT介绍 CAT是一个专为 IT 运维从业者打造的一站式解决方案平台,包含资产管理、工单、工作流、仓储等功能模块。 本项目是celaraze/chemex重构版,原项目chemex名称弃用;CAT采用全新架构设计,大量提升使用体验的细节&#xf…

Trie巧妙解决前后缀问题,3045. 统计前后缀下标对 II

目录 一、题目 1、题目描述 2、接口描述 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 ​Python3 c 一、题目 1、题目描述 给你一个下标从 0 开始的字符串数组 words 。 定义一个 布尔 函数 isPrefixAndSuffix ,它接受两个字符串参数 str…

JavaWeb笔记 --- 二、Maven

二、Maven Maven概述 所有的IDE创建的Maven项目都可以使用 Maven简介 Maven模型 Maven常用命令 Maven生命周期 Maven坐标 依赖管理 dpendencies:依赖 依赖范围

java-ssm-jsp-大学生互动交流网站设计与实现

java-ssm-jsp-大学生互动交流网站设计与实现 获取源码——》公主号:计算机专业毕设大全

STM32基础--构建自己的固件库

CMSIS 标准及库层次关系 因为基于 Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的 Cortex 微控制器软件的兼容性问题&#xff0…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:DatePicker)

日期选择器组件,用于根据指定日期范围创建日期滑动选择器。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 DatePicker(options?: DatePickerOptions) 根据指定范…

java及特性的简单介绍

简介: 印度尼西亚有一个盛产咖啡的岛屿java,中文名翻译为爪哇,给这种新语言起码java 寓意端上一杯热咖啡。 特性: 1.面向对象 2.与平台无关 3.稳定安全 4.多线程 面向对象 1.面向对象语言关注的是对象,而不关注过程 2…

Redis缓存穿透-缓存雪崩-缓存击穿

什么叫缓存穿透? 模拟一个场景: 前端用户发送请求获取数据,后端首先会在缓存Redis中查询,如果能查到数据,则直接返回.如果缓存中查不到数据,则要去数据库查询,如果数据库有,将数据保存到Redis缓存中并且返回用户数据.如果数据库没有则返回null; 这个缓存穿透的问题就是这个…

linux安装todesk

xunilToDesk远程桌面软件-免费安全流畅的远程连接电脑手机ToDesk远程控制软件是一款稳定流畅的远程控制电脑手机连接软件,可远程桌面办公,远程协助运维.采用端对端加密,让每一次远程访问都安全可靠。https://www.todesk.com/linux.htmlToDesk远程控制软件是一款稳定流畅的远程控…

【考研数学】李林《880》vs 李永乐《660》完美使用搭配

没有说谁一定好,只有适不适合自身情况,针对自身弱点选择性价比才最高。 两者侧重点不同,660适合强化前期,弥补基础的不足,880适合强化后期,题型全面,提高我们对综合运用知识的能力。 选择习题…

蓝桥杯2023年-买瓜(dfs,类型转换同样耗时)

题目描述 小蓝正在一个瓜摊上买瓜。瓜摊上共有 n 个瓜,每个瓜的重量为 Ai 。 小蓝刀功了得,他可以把任何瓜劈成完全等重的两份,不过每个瓜只能劈一刀。 小蓝希望买到的瓜的重量的和恰好为 m 。 请问小蓝至少要劈多少个瓜才能买到重量恰好…

计算机组成原理之机器:存储器之辅助存储器

计算机组成原理之机器:存储器之辅助存储器 笔记来源:哈尔滨工业大学计算机组成原理(哈工大刘宏伟) Chapter3:存储器之辅助存储器 3.1 概述 3.2 磁记录原理 通不同方向电流时磁化方向不同,由此区分写入…

BUUCTF:[MRCTF2020]ezmisc

题目地址:https://buuoj.cn/challenges#[MRCTF2020]ezmisc 下载附件打开是一张照片: 放到kali中发现crc校验错误,修改照片宽高: 保存即可发现flag flag为: flag{1ts_vEryyyyyy_ez!}

报错:ModuleNotFoundError: No module named ‘tensorrt’

写在前面 我安装了tensorRT,在运行它自带的模型都没问题。 但是在代码中import tensorrt就报错: ModuleNotFoundError: No module named ‘tensorrt’。 网上搜了一大堆,发现是没有在自己的python环境下安装。 所以特意写这篇文章记录一下。 在进行下一…

webUI自动化测试框架

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

C#中实现接口的一些小知识(C#用abstract或virtual来实现接口成员)

文章目录 不可用的修饰可用的修饰非抽象类实现接口抽象类实现接口抽象类与接口方法同名时一同实现 不可用的修饰 在C#中实现接口时,我们不能直接使用static或const来实现接口成员,因为接口中的成员默认都是实例成员,并且它们表示一种契约&am…

c++的STL(2)-- vector容器

目录 1. 默认构造 代码: 相关知识点: 2. 有参构造函数 以及 使用{}初始化对象 代码: 相关知识点: 3. vector容器在尾部添加和删除元素 代码: 使用push_back()和pop_back()进行尾部元素的添加和删除 相关知识点: 代码: 使用emplace_back在尾部添…