Устройство аудиовыхода, быстрый переключатель?

18

В зависимости от ситуации я использую либо громкоговорители, либо наушники для вывода звука. Учитывая, что моя гарнитура представляет собой USB-гарнитуру, она ведет себя как свое собственное аудиоустройство.

В настоящее время я переключаюсь между устройствами вывода звука, нажимая на значок динамика в верхнем правом лотке, где я выбираю настройки звука, переходит на вкладку «Вывод» и там меняет устройство, которое я хочу.

Что мне интересно, может ли быть какой-нибудь более простой / быстрый способ переключения на USB-гарнитуру? Возможно, выделенный значок в трее, сопоставление клавиш или так?

Я запускаю Ubuntu 10.04 со стандартным рабочим столом Gnome.

    
задан andol 12.09.2010 в 07:37
источник

9 ответов

11

Чтобы изменить устройство вывода звука по умолчанию из командной строки, вы можете использовать утилиту командной строки pacmd Pulse Audio.

Я нашел необходимость делать то же самое сегодня, желая переключиться между наушниками и динамиками, подключенными к отдельным звуковым картам. Вот сценарий оболочки, который я написал для этого:

#!/usr/bin/env bash

sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ( == "*") print "1",; else print "0", }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print }'))

[[ ${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, если хотите).
ответ дан Andrew 20.12.2010 в 04:00
7

Ну, вы можете установить pavucontrol , он показывает приложения со звуковым устройством на первой вкладке, это сэкономит вам немного усилий. Но то, что вы действительно хотите, я думаю, это отметить USB-гарнитуру как устройство по умолчанию, тогда каждый раз, когда вы подключаете его во весь звук, он будет перенаправлен на него, а когда вы его подключите, он вернется к динамикам. Легко, действительно.

    
ответ дан vava 12.09.2010 в 09:33
3

Вопрос довольно старый, но мой ответ может быть полезен для пользователей GNOME 2. Я использовал PulseAudio Mixer Applet для точной проблемы, описанной здесь. Вы можете изменить входные и выходные устройства прямо в меню панели. Это самый удобный способ, который я нашел.

    
ответ дан dAnjou 14.12.2011 в 16:29
3

Конечно, коммутационные устройства с использованием апплета также работают нормально. Но классная вещь о написании сценария заключается в том, что он супер быстрый. Я поместил мой, например, на клавиатурный ярлык alt + s. поэтому, когда я хочу переключиться с наушников на динамики, мне нужно только нажать alt + s.

В любом случае. Андрей сказал:

  

Если у вас более двух аудиоустройств и вы хотите   другой, вам нужно будет заменить логику в строке 7 некоторыми   условные.

Вот что я сделал. Я разделяю это, если у кого-то есть проблемы с этим:

#!/usr/bin/env bash

#sinks=($(pacmd list-sinks | grep index | \
#    awk '{ if ( == "*") print "1",; else print "0", }'))
sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ( == "*") print "1"; else print "0" }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print }'))

#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. И б) переключитесь на следующий приемник, увеличив индекс на 1. Затем я по модулю результат по количеству приемников. Это гарантирует, что, например, при наличии 3 стоков, (2 + 1)% 3 = 0. Таким образом, из индекса стока 2 мы переключимся на индекс погружения 0.

Таким образом, переключатель позволяет перемещаться вверх через доступные раковины.     

ответ дан traumtaenzer 18.01.2012 в 07:29
2

Спасибо за скрипты! Я добавил часть для ввода (микрофон), а также в случае, если кто-то захочет ее использовать:

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)
    
ответ дан Subbeh 19.12.2011 в 22:16
2

Чтобы просмотреть список звуковых устройств, используйте следующий скрипт:

#!/bin/bash

declare -i sinks=('pacmd list-sinks | sed -n -e 's/\**[[:space:]]index:[[:space:]]\([[:digit:]]\)//p'')
declare -i sinks_count=${#sinks[*]}
declare -i active_sink_index='pacmd list-sinks | sed -n -e 's/\*[[:space:]]index:[[:space:]]\([[:digit:]]\)//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:]]\)//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:]]"\(.*\)"//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;

Все кредиты отправляются в tsvetan из форума Ubuntu .

    
ответ дан guttermonk 19.04.2014 в 15:33
1

Я искал способ сделать это, чтобы переключиться между внутренними динамиками на моем ноутбуке и аэропортом яблока базовая станция , которая подключена к моей стереосистеме. Я решил назначить горячие клавиши для переключения. Я хотел, чтобы окно настроек аудио появилось на секунду, чтобы дать визуальное подтверждение переключателя и использовать 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

Первые изменения на базовой станции Apple (которые я назначил на ctrl + F9), а второй - на внутренние динамики (ctrl + F8). Это предполагает, что это единственные 2 устройства вывода.

    
ответ дан retrokid 22.01.2011 в 12:11
1

Я построил скрипт Andrews, чтобы он использовал notify-osd, чтобы объявить, что он только что сделал. Измените строки с именами после ваших потребностей.

#!/usr/bin/env bash

sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ( == "*") print "1",; else print "0", }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print }'))

[[ ${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
    
ответ дан Kveras 13.05.2012 в 17:55
0

У меня была такая же проблема, и я написал маленький индикатор для рабочего стола Ubuntu Unity:

Ссылка

Ссылка

    
ответ дан Lukas 21.12.2013 в 12:43