资讯详情

资讯详情

如何用 1 个虚拟音频设备实现 macOS 应用独立音量:Background Music 完整指南

如何用 1 个虚拟音频设备实现 macOS 应用独立音量Background Music 完整指南【免费下载链接】BackgroundMusicBackground Music, a macOS audio utility: automatically pause your music, set individual apps volumes and record system audio.项目地址: https://gitcode.com/gh_mirrors/ba/BackgroundMusic开会开到一半后台的音乐播放器还在放歌系统提示音比会议说话声还响——macOS 上每个 App 的音量难道就没法各管各的吗Background Music 是个开源的 macOS 音频工具靠一个虚拟音频设备实现应用独立音量顺带搞定音乐自动暂停和系统音频录制。这篇不急着讲安装先看装上是什么效果再拆开它为什么行得通最后动手。️ 效果前置装上 Background Music 后你能得到什么跑起来/Applications/Background Music.app菜单栏多一个图标点下去是这样一屏顶部一个开关形如Auto-pause Spotify勾上即生效Volumes区域System Sounds、Mail、Finder、Spotify、Firefox……每个应用一条独立音量滑块More Apps里还有完整列表Output Device区域直接切换音频输出设备不用进系统设置翻底部 Preferences 和 Quit还有一个容易忽略的行为应用启动时会把 Background Music 虚拟设备设为系统默认输出退出时自动还原。想开机自启的话去System Settings General Login Items里把它加进去。原理一个虚拟设备凭什么能拆分各应用的音量整个项目分三块BGMDriver、BGMApp、BGMXPCHelper。关键在前两个。BGMDriver是一个用户态的 Core Audio HAL 插件它对外暴露一个名为 Background Music 的虚拟设备同时充当输入和输出。BGMApp启动后把它设为默认输出于是所有应用的音频都先流进这个驱动。后面两个功能都建立在一个事实上在 Core Audio 把各路音频混音之前驱动能单独看到每个客户端也就是每个应用的音频流。独立音量的来源拖动某个 App 的滑块BGMApp把新音量值发给BGMDriver驱动直接改写该应用混音前的音频数据——不是混完再衰减所以各应用互不干扰自动暂停的来源你把某个播放器标记成音乐播放器后驱动会报告现在出声的不是它、是别的 AppBGMApp就发指令让播放器暂停那个 App 停声后自动恢复为什么你还能听到声音BGMApp监听虚拟设备的输入流把音频转发回你真实的输出设备这部分在 BGMPlayThrough.h 一带为什么装完不用重启驱动跑在用户态而非内核扩展装的时候只需重启一下coreaudiod音频进程想继续往下钻DEVELOPING.md 的 Summary 一节把上面这条链路讲得很细。如何安装 Background MusicHomebrew 和 build_and_install.sh 两条路前提是 macOS 10.13走源码编译的话需要 Xcode 10 或更高README 说通常不到一分钟就编完。路线 AHomebrew最省事brew install --cask background-music路线 B从源码构建git clone https://gitcode.com/gh_mirrors/ba/BackgroundMusic cd BackgroundMusic /bin/bash build_and_install.sh脚本会先列出即将安装的东西让你确认按y再要管理员密码然后编译并安装三个组件/Applications/Background Music.app/Library/Audio/Plug-Ins/HAL/Background Music Device.driverBGMXPCHelper.xpc及/Library/LaunchDaemons/com.bearisdriving.BGM.XPCHelper.plist最后一步是重启coreaudiod来加载驱动——声音会断一小截建议先把正在放的东西暂停。装完脚本会直接启动应用。想手动一步步装的仓库里的MANUAL-INSTALL.md有每步的xcodebuild命令。想卸干净的话cd /Applications/Background\ Music.app/Contents/Resources/ bash uninstall.sh三个高频用法自动暂停、录系统音频、切设备自动暂停支持哪些音乐播放器目前列表里有 8 个iTunes、Spotify、VLC、VOX、Decibel、Hermes、Swinsian、GPMDP。在菜单顶部勾上对应开关即可逻辑是别的 App 一出声就暂停对方停声就恢复正好覆盖会议来了音乐自动让位这个场景。用 QuickTime 录制系统音频确保 Background Music 正在运行打开 QuickTime Player选File New Audio Recording点录制按钮旁边的下拉箭头⌄输入设备选Background Music任何正在播放的系统声音都会被录下来做教程、存课程都适用。系统声音和麦克风一起录打开 Audio MIDI Setup在/Applications/Utilities/下点左下角创建聚合设备aggregate device勾选内置麦克风和 Background Music 设备然后在录音软件里选这个聚合设备当输入源。⚠️ 遇到问题先查这几个坑先交代两个已知边界应用音量拉过 50% 可能出现削波clipping正确姿势是系统主音量拉满、靠压低其他应用的相对音量来平衡输出端目前只支持立体声2 声道设备。声音突然没了切换默认输出设备Background Music 崩溃且音频全停时去System Settings Sound把默认输出设备换成别的。如果当前默认就是它就切走再切回来。为什么要允许麦克风访问首次运行会要麦克风权限。它并不真的在听你的麦克风——它是从虚拟设备的输入流里拿系统音频而 macOS 把这条路归类成麦克风。如果你当时点了拒绝去System Settings Security Privacy Privacy Microphone找到 Background Music 勾上。某个应用的滑块找不到或不生效到More Apps里找带(Helper)后缀的同名条目。不少会议、视频通话软件的实际出声方是它的 helper 进程改普通条目没用。另外一个小技巧如果有 App 的短促提示音刚好够长、总触发误暂停可以调大 BGMAutoPauseMusic.mm 里的kPauseDelayNSec常量——代价是音乐和其他声音的重叠时间变长别加太猛。拓展给自己要的音乐播放器加自动暂停支持想让列表外的播放器也被自动暂停先回答一个问题它支持 AppleScript并且提供isPlaying、isPaused、play、pause这几个事件吗不支持的话成本会高很多甚至要改播放器本身。支持的话路径很短实现BGMMusicPlayer协议、子类化BGMMusicPlayerBase通过BGMScriptingBridgeScripting Bridge跟目标 App 通信BGMMusicPlayer.h 里有完整说明BGMSpotify是最值得抄的作业最后把新类注册进BGMMusicPlayers.mm的initWithAudioDevices就行。下一步就这么做装完把系统主音量拉满先给最常抢戏的两三个应用调低相对音量想加自动暂停的播放器不在列表里的先确认它支不支持 AppleScript支持就从BGMMusicPlayer.h开始读起。【免费下载链接】BackgroundMusicBackground Music, a macOS audio utility: automatically pause your music, set individual apps volumes and record system audio.项目地址: https://gitcode.com/gh_mirrors/ba/BackgroundMusic创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →