Пристрій аудіовиходу, швидкий перемикач?


19

Залежно від ситуації, я використовую або свої динаміки, або гарнітуру для виводу звуку. Враховуючи, що моя гарнітура - це гарнітура USB, вона поводиться як власний аудіопристрій.

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

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

Я працюю на Ubuntu 10.04, на робочому столі Gnome за замовчуванням.

Відповіді:


11

Для зміни пристрою виводу звуку за замовчуванням з командного рядка можна скористатися pacmdутилітою командного рядка Pulse Audio.

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

#!/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, якщо ви хочете).

7

Ну, ви можете встановити pavucontrol, він показує програми з вибором звукових пристроїв на першій вкладці, це заощадить певні зусилля. Але те, що ви насправді хочете, я думаю, це позначити вас гарнітуру USB як пристрій за замовчуванням, то кожен раз, коли ви підключите її, весь звук буде перенаправлений на нього, а коли ви підключите його - він повернеться до динаміків. Без зусиль, справді.


2
Як встановити пристрій за замовчуванням у Ubuntu Precision?
синенький

3

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


3

Звичайно, комутація пристроїв за допомогою 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. І б) перехід до наступної раковини, збільшивши індекс на 1. Потім я модулюю результат на кількість мийок. Це запевняє, що, наприклад, при наявності 3 раковин, (2 + 1)% 3 = 0. Таким чином, з індексу мийки 2 ми переходимо на індекс раковини 0.

Таким чином перемикач дозволяє рухатися вгору через доступні раковини.


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)

2

Для перегляду списку звукових пристроїв використовуйте наступний сценарій:

#!/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 .


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 вихідні пристрої.


1

Я побудований на Ендрюс-скрипті, щоб використовувати його 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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.