Embrace Everything.

解决 macOS Sonoma+ AirPods 音量自动重置问题

上个月刚换 MBA 就发现这玩意似乎老是记不住我 AirPods 的音量设置,一连接就重置到 50%,想起来调还好,偶尔忘了这事直接放音乐后果就是被震得脑瓜子嗡嗡响。

一搜发现还不是个例,自打快两年前 Sonoma 推送开始这 bug 就没消失过,到现在 Sequoia 都他妈推到 .4 了 AirPods + Mac 用户依然在被傻逼苹果伤害听力健康。
硕大一个 macOS 项目组是没一个用 AirPods 的还是说你们作为开发者都是天选之子遇不到,亦或者干活的都是听障人士?
骂归骂,苹果不修那也不能让耳膜继续被伤害下去。
V2EX 有个帖子已经给了个很无感的解决方案,用 HammerSpoon 这个开源免费又十分强大的自动化工具自动获取设备连接状态并调整音量,但升到 15.4 后发现原贴给的代码已经不能正常工作了,就请 GPT 先生改了一版出来:

-- 📝 存储上一次默认音频输出设备的名称
local lastOutputDeviceName = hs.audiodevice.defaultOutputDevice():name()

-- 🎧 处理设备变更的回调函数
local function handleDeviceChanges()
    local currentDevice = hs.audiodevice.defaultOutputDevice()
    local currentOutputDeviceName = currentDevice and currentDevice:name()

    -- 安全检查:防止名称为 nil 报错
    if currentOutputDeviceName == nil or lastOutputDeviceName == nil then
        return
    end

    -- 📌 如果音频设备发生变化
    if lastOutputDeviceName ~= currentOutputDeviceName then
        -- ✅ 如果新设备是 AirPods(可修改为你的设备名称)
        if string.find(currentOutputDeviceName, "AirPods") then
            currentDevice:setVolume(25)
            hs.alert.show("🎧 AirPods 连接,音量设为 25")
        -- ❌ 如果旧设备是 AirPods,表示刚断开连接
        elseif string.find(lastOutputDeviceName, "AirPods") then
            currentDevice:setVolume(0)
            hs.alert.show("🎧 AirPods 断开,音量设为 0")
        end
        -- 更新为当前设备名称
        lastOutputDeviceName = currentOutputDeviceName
    end
end

-- ⏰ 注册和启动音频设备监听器
hs.audiodevice.watcher.setCallback(handleDeviceChanges)
hs.audiodevice.watcher.start()

hs.alert.show("🔊 音频设备监听已启动")

音量我自己设了 25%,根据自己喜好调整即可,不希望显示通知的话就把 hs.alert.show 三行注释掉或者删掉。
目前在 macOS Sequoia 15.4 正式版下完美工作。
但还有一个要注意的问题,偶尔会出现虽然音量已经被调整但 系统依然显示为 50% 的情况,调音量时也会在 50% 基础上增减,所以习惯慢慢拉音量条或者用键盘快捷键调音量的朋友一定记得调之前暂停音频播放,以免再次耳膜炸裂。
最后还是希望傻逼苹果赶紧修了这破 bug 吧...真服了。

解决 macOS Sonoma+ AirPods 音量自动重置问题

https://blog.tonyding.net/archives/39/

作者

MisakaNetworkTD

发布时间

2025-04-15

许可协议

CC BY-NC 4.0

添加新评论