macOS 下,能用快捷键切换音频输出设备么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
fl2d
V2EX    Apple

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

  •  
  •   fl2d Nov 22, 2022 3015 views
    This topic created in 1256 days ago, the information mentioned may be changed or developed.

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

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

    这个是我这里的路径,你可以用 which SwitchAudioSource 看一下你电脑里的路径
    19cm
        13
    19cm  
       Jan 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
    About     Help     Advertise     Blog     API     FAQ     Solana     2462 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 07:29 PVG 15:29 LAX 00:29 JFK 03:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86