AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 4055
In Process
andol
andol
Asked: 2010-09-12 23:37:10 +0800 CST2010-09-12 23:37:10 +0800 CST 2010-09-12 23:37:10 +0800 CST

音频输出设备,快速切换?

  • 772

根据情况,我使用扬声器或耳机进行音频输出。鉴于我的耳机是 USB 耳机,它的行为就像它自己的音频设备。

目前,我通过单击右上方托盘中的扬声器图标在音频输出设备之间切换,在其中选择声音设置,转到输出选项卡,然后选择我想要的设备。

我想知道是否有一些更简单/更快的方法来来回切换到我的 USB 耳机?也许是专用托盘图标、按键映射等?

我正在使用默认的 Gnome 桌面运行 Ubuntu 10.04。

sound 10.04 usb
  • 10 10 个回答
  • 24772 Views

10 个回答

  • Voted
  1. Andrew
    2010-12-20T20:00:20+08:002010-12-20T20:00:20+08:00

    为了从命令行更改默认音频输出设备,您可以使用pacmdPulse Audio 命令行实用程序。

    我发现今天需要做类似的事情,想要在耳机和扬声器之间切换,两者都插入单独的声卡。这是我为此编写的 shell 脚本:

    #!/usr/bin/env bash
    
    sinks=($(pacmd list-sinks | grep index | \
        awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
    inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
    
    [[ ${sinks[0]} = 0 ]] && swap=${sinks[1]} || swap=${sinks[3]}
    
    pacmd set-default-sink $swap &> /dev/null
    for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done
    

    笔记:

    • pacmd这会在实用程序列出的前两个音频输出设备之间进行交换。如果您有两个以上的音频设备并且想换一个不同的设备,您需要将第 7 行的逻辑替换为一些条件。
    • 只是交换默认接收设备对当前运行的应用程序没有任何作用——它们将继续输出到以前的设备。此脚本还移动所有现有输入的接收器目标。即,如果您在一台设备上播放音乐时运行此脚本,它将立即切换到另一台设备。如果您希望现有应用程序在以前的设备上继续运行,请注释掉最后一行(如果您愿意,还可以注释掉第 5 行)。
    • 12
  2. vava
    2010-09-13T01:33:23+08:002010-09-13T01:33:23+08:00

    好吧,您可以安装pavucontrol,它会在第一个选项卡上显示带有声音设备选择的应用程序,它会为您节省一些精力。但是我认为您真正想要的是将USB耳机标记为默认设备,然后每次插入时,所有声音都会重定向到它,而当您将其拔出时-它会回到扬声器。毫不费力,真的。

    • 7
  3. traumtaenzer
    2012-01-18T23:29:48+08:002012-01-18T23:29:48+08:00

    当然,使用 Applet 切换设备也可以正常工作。但是编写脚本很酷的地方在于它非常快。例如,我将我的放在键盘快捷键 alt+s 上。因此,当我想从耳机切换到扬声器时,我只需要按 alt+s。

    反正。安德鲁说:

    如果您有两个以上的音频设备并且想换一个不同的设备,您需要将第 7 行的逻辑替换为一些条件。

    这就是我所做的。我分享它,以防有人遇到问题:

    #!/usr/bin/env bash
    
    #sinks=($(pacmd list-sinks | grep index | \
    #    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
    sinks=($(pacmd list-sinks | grep index | \
        awk '{ if ($1 == "*") print "1"; else print "0" }'))
    inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
    
    #find active sink
    active=0
    for i in ${sinks[*]}
    do
        if [ $i -eq 0 ]
            then active=$((active+1))
            else break
        fi
    done
    
    #switch to next sink
    swap=$(((active+1)%${#sinks[@]}))
    
    pacmd set-default-sink $swap &> /dev/null
    for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done
    

    我所做的不同是 a) 在 for 循环中找到活动接收器。b) 通过将索引增加 1 来切换到下一个接收器。然后我将结果与接收器的数量取模。这确保了例如当有 3 个接收器时,(2+1)%3=0。因此,从接收器索引 2 我们将切换到接收器索引 0。

    以这种方式,开关允许向上移动通过可用的接收器。

    • 4
  4. dAnjou
    2011-12-15T08:29:25+08:002011-12-15T08:29:25+08:00

    这个问题已经很老了,但我的回答可能对 GNOME 2 用户仍然有用。我使用PulseAudio Mixer Applet来解决此处描述的确切问题。您可以直接在面板菜单中更改输入和输出设备。这是我找到的最方便的方式。

    • 3
  5. guttermonk
    2014-04-20T07:33:47+08:002014-04-20T07:33:47+08:00

    要循环浏览您的声音设备列表,请使用以下脚本:

    #!/bin/bash
    
    declare -i sinks=(`pacmd list-sinks | sed -n -e 's/\**[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`)
    declare -i sinks_count=${#sinks[*]}
    declare -i active_sink_index=`pacmd list-sinks | sed -n -e 's/\*[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`
    declare -i next_sink_index=${sinks[0]}
    
    #find the next sink (not always the next index number)
    declare -i ord=0
    while [ $ord -lt $sinks_count ];
    do
    echo ${sinks[$ord]}
    if [ ${sinks[$ord]} -gt $active_sink_index ] ; then
        next_sink_index=${sinks[$ord]}
        break
    fi
    let ord++
    done
    
    #change the default sink
    pacmd "set-default-sink ${next_sink_index}"
    
    #move all inputs to the new sink
    for app in $(pacmd list-sink-inputs | sed -n -e 's/index:[[:space:]]\([[:digit:]]\)/\1/p');
    do
    pacmd "move-sink-input $app $next_sink_index"
    done
    
    #display notification
    declare -i ndx=0
    pacmd list-sinks | sed -n -e 's/device.description[[:space:]]=[[:space:]]"\(.*\)"/\1/p' | while read line;
    do
    if [ $(( $ord % $sinks_count )) -eq $ndx ] ; then
        notify-send -i notification-audio-volume-high --hint=string:x-canonical-private-    synchronous: "Sound output switched to" "$line"
        exit
    fi
    let ndx++
    done;
    

    所有功劳都来自Ubuntu 论坛的 tsvetan 。

    • 3
  6. Subbeh
    2011-12-20T14:16:12+08:002011-12-20T14:16:12+08:00

    感谢您的脚本!我还添加了一个输入部分(麦克风),以防有人想使用它:

    while read line ; do
      case $line in 
        *\*\ index*) x=1 ;;
        index*) x=0 ;;
        name*) 
          source=$(echo $line | sed -e "s/.*<//;s/>.*//")
          if [[ $x = "0" ]] ; then
            pacmd set-default-source $source &> /dev/null
          fi ;;
      esac
    done < <(pacmd list-sources | grep -e alsa_input -e index)
    
    • 2
  7. retrokid
    2011-01-23T04:11:49+08:002011-01-23T04:11:49+08:00

    我一直在寻找一种方法来在笔记本电脑上的内置扬声器和插入立体声音响的苹果机场基站之间切换。我决定分配热键来切换。我希望音频首选项窗口弹出一秒钟以直观地确认开关,然后使用 wmctrl 关闭窗口。

    (我使用 ctrl+F8 和 ctrl+F9 作为热键,因为我的笔记本电脑上这些键的 Fn 功能是增加和减少音量,所以很明显让 ctrl 功能改变音频输出。)

    我使用了以下 2 个(几乎相同)脚本:

    #! /bin/bash
    gnome-volume-control -p output &
    sleep .7 
    pacmd set-default-sink 1
    sleep .8 
    wmctrl -c "Sound Preferences"
    exit
    
    #! /bin/bash
    gnome-volume-control -p output &
    sleep .7 
    pacmd set-default-sink 0
    sleep .8 
    wmctrl -c "Sound Preferences"
    exit
    

    第一个更改为苹果基站(我分配给 ctrl+F9),第二个切换回内部扬声器(ctrl+F8)。这假设这些是仅安装的 2 个输出设备。

    • 1
  8. Kveras
    2012-05-14T09:55:50+08:002012-05-14T09:55:50+08:00

    我在 Andrews 脚本的基础上使用 notify-osd 来宣布它刚刚做了什么。根据您的需要编辑带有名称的行。

    #!/usr/bin/env bash
    
    sinks=($(pacmd list-sinks | grep index | \
        awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
    inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
    
    [[ ${sinks[0]} = 0 ]] && swap=${sinks[1]} || swap=${sinks[3]}
    
    pacmd set-default-sink $swap 
    
    for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done
    
    if [ "$swap" = "0" ]; then
    notify-send -u normal -i audio-volume-medium-symbolic "Sound output changed. Now using: Corsair 2.1 Speakers!" 
    
    else
    notify-send -u normal -i audio-volume-medium-symbolic "Sound output changed. Now using: Logitech G930 Headset!" 
    
    fi
    
    • 1
  9. Lukas
    2013-12-22T04:43:22+08:002013-12-22T04:43:22+08:00

    我遇到了同样的问题,并为 Ubuntu Unity 桌面编写了一个小指标小程序:

    https://github.com/lkettenb/sound-output-switcher

    http://www.capslockblog.com/images/misc/Screenshot.png

    • 0
  10. rif
    2018-06-23T13:02:03+08:002018-06-23T13:02:03+08:00

    这是一个小脚本,用于循环当前聚焦窗口的音频接收器:https ://gist.github.com/rif/01ffb5e3eb45d2e4e6ebb4652b3b19ce

    需要 pacmd 和 xdotool

    • 0

相关问题

  • 即使插入耳机,我的扬声器也会发出声音[关闭]

  • 如何完全删除 Ruby + Rails + Gems?

  • 从 8.04 LTS 升级到 10.04 LTS 的体验?

  • 删除在线状态菜单,但保留注销菜单?

  • 什么可能会阻止 xrandr 屏幕之间的鼠标移动?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve