V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fl2d
V2EX  ›  Apple

macOS 下,能用快捷键切换音频输出设备么?

  •  
  •   fl2d · 2022 年 11 月 22 日 · 2786 次点击
    这是一个创建于 1168 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如用键盘快捷键切换 内置音箱 /耳机 /蓝牙音箱。

    13 条回复    2026-01-25 00:30:57 +08:00
    zhaoxin
        1
    zhaoxin  
       2022 年 11 月 22 日
    你可以尝试写 shortcuts 或者 applescript ,然后绑定快捷键。不过其实这个意义也不大。你把音量图标拖到定栏用鼠标点不是一样吗?
    hackpro
        2
    hackpro  
       2022 年 11 月 22 日 via iPhone
    Alfred workflow
    fl2d
        3
    fl2d  
    OP
       2022 年 11 月 22 日
    @zhaoxin 有特殊需求,需要频繁在耳际与音响之间切换🤦 手点太麻烦
    jheroy
        4
    jheroy  
       2022 年 11 月 22 日
    jheroy
        5
    jheroy  
       2022 年 11 月 22 日
    如果不想用 Alfred, 也可以吧上面那个 worklfow 中间的脚本复制过来配合 skhd 直接用快捷键直接那个脚本就切换了, 参数直接写上你的输出设备就行.
    jheroy
        6
    jheroy  
       2022 年 11 月 22 日
    直接那个脚本 = 执行那个脚本
    fl2d
        7
    fl2d  
    OP
       2022 年 11 月 22 日   ❤️ 1
    @zhaoxin @hackpro @jheroy
    我用下面这个命令行工具,配合 karabiner 实现了。
    https://github.com/deweller/switchaudio-osx
    arac
        8
    arac  
       2022 年 11 月 22 日
    也有这个需求,raycast 的官方 repo 找的 swift 脚本改的,配上 alias 也挺好用的
    dufu1991
        9
    dufu1991  
       2022 年 11 月 23 日
    @fl2d 装好了 switchaudio-osx ,在终端直接运行没问题,但是我尝试通过『自动操作』将 SwitchAudioSource -n 这个命令配置一个全局的快捷键,发现『自动操作』里面执行 shell 命令的时候找不到 SwitchAudioSource 这个命令,奇怪。导致快捷键这个最核心的步骤过不去,你们是如何解决的?
    fl2d
        10
    fl2d  
    OP
       2022 年 11 月 23 日   ❤️ 1
    @dufu1991
    加路径,/usr/local/bin/SwitchAudioSource
    dufu1991
        11
    dufu1991  
       2022 年 11 月 23 日
    @fl2d 命令不是很熟,能否详细点。我试了 cd /usr/local/bin/,然后 SwitchAudioSource -n 。还是不行。
    fl2d
        12
    fl2d  
    OP
       2022 年 11 月 24 日 via iPhone
    @dufu1991
    在你的脚本里,命令的前面,加上路径 /usr/local/bin/SwitchAudioSource -n xxx

    这个是我这里的路径,你可以用 which SwitchAudioSource 看一下你电脑里的路径
    19cm
        13
    19cm  
       1 月 25 日
    老哥你实现了吗,lua 脚本我倒是实现了,但快捷指令没搞定



    -- Hammerspoon: 切换音频输出设备( Headsets <-> Yamaha YVC-330 )
    -- 将本文件保存为 ~/.hammerspoon/init.lua ,Reload Config 后按 F12 切换

    -- 定义要切换的两个设备
    local DEVICES = {
    {name = "Headsets", icon = "🎧"}, -- 耳机
    {name = "Yamaha YVC-330", icon = "🔈"} -- 雅马哈设备
    }

    -- 获取所有音频设备
    local function getAllAudioDevices()
    local devices = {}
    for _, dev in ipairs(hs.audiodevice.allOutputDevices()) do
    devices[dev:name()] = dev
    end
    return devices
    end

    -- 切换音频设备
    local function toggleAudioOutput()
    local allDevices = getAllAudioDevices()

    -- 检查两个设备是否都存在
    local device1 = allDevices[DEVICES[1].name]
    local device2 = allDevices[DEVICES[2].name]

    if not device1 or not device2 then
    hs.alert.show("❌ 找不到音频设备")
    return
    end

    -- 获取当前设备
    local current = hs.audiodevice.defaultOutputDevice()

    -- 决定切换到哪个设备
    local target = nil
    local targetIcon = ""

    if current and current:name() == DEVICES[1].name then
    target = device2
    targetIcon = DEVICES[2].icon
    else
    target = device1
    targetIcon = DEVICES[1].icon
    end

    -- 执行切换
    if target:setDefaultOutputDevice() then
    hs.alert.show(targetIcon .. " 已切换至: " .. target:name())
    else
    hs.alert.show("❌ 切换失败")
    end
    end




    -- hs.hotkey.bind({"ctrl"}, "f1", toggleAudioOutput)

    -- 绑定热键 F12 (没有修饰键)
    hs.hotkey.bind({}, "f13", toggleAudioOutput)

    -- 加载提示
    print("🎧 音频切换脚本已加载")
    print("📢 按 F12 切换设备:")
    for i, device in ipairs(DEVICES) do
    print(" " .. i .. ". " .. device.icon .. " " .. device.name)
    end
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2429 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:53 · PVG 21:53 · LAX 05:53 · JFK 08:53
    ♥ Do have faith in what you're doing.