Скрипт для переключения между двумя звуковыми устройствами

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

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

Может ли кто-нибудь помочь мне воссоздать этот сценарий?

1
задан 19 April 2013 в 17:38

1 ответ

Я нашел сценарий наконец. Этот сценарий переместит все входные приемники (т.е. Ваша музыка, видео звук и т.д.) к Вашему другому звуковому устройству. Если Вы запустите скрипт снова, то он положит обратно все приемники к Вашему исходному звуковому устройству. (Я только протестировал это на двух звуковых устройствах).

Инструкция относительно того, как установить:

  1. Вставьте следующий код в файл с помощью gedit.
  2. Сохраните файл как speakers.sh (или некоторое другое имя файла) в Вашем корневом каталоге.
  3. Измените полномочия файла позволить выполнение.

    • Щелкните правой кнопкой по файлу и выберите свойства.
    • Выберите вкладку полномочий.
    • Отсчитайте, "Позволяют выполнять файл как программу" поле галочки

    или

    • chmod +x./speakers.sh
  4. Дважды щелкните по файлу и нажмите выполненный. Это изменит выходное звуковое устройство.

Я затем добавил опцию на значке настроек в средстве запуска единицы для простоты доступа с помощью Тонкой настройки Ubuntu.Приятного отдыха!

Код:

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

Весь кредит переходит к парням сюда, я просто повторно нашел ответ на свой вопрос.

3
ответ дан 19 April 2013 в 17:38

Другие вопросы по тегам:

Похожие вопросы: