четверг, 5 мая 2011 г.

Смена аудиокарты при помощи Unity

Не всем будет полезно это знать, но тем кому это необходимо будут радоваться! Сегодня я научу Вас, как менять выход с одной аудиокарты на другую одной кнопкой, причем под новой Ubuntu 11.04 с использованием Unity.

Для начала надо прикинуть как меняется звук в самом гноме. Меняется он при помощи PulseAudio, Кому интересно могут порыться полностью, но я затрону только часть. Почитав TFM я увидел, что в самом низу страницы есть скриптик, который подходит под наши нужды. 
Слегонца испохабив и урезав комментарии для блога я получил следующее:
#!/bin/bash
totalsc=$(pacmd "list-sinks" | grep card: | wc -l)
if [ $totalsc -le 1 ]; then
  notify-send -u critical -t 5000 "Nothing to switch, system only has one sound card."
  exit
fi
scindex=$(pacmd list-sinks | awk '$1 == "*" && $2 == "index:" {print $3}')
cards=$(pacmd list-sinks | sed 's|*||' | awk '$1 == "index:" {print $2}')
PICKNEXTCARD=1
count=0
for CARD in $cards; do
  if [ $PICKNEXTCARD == 1 ]; then
    nextsc=$CARD
    PICKNEXTCARD=0
    nextind=$count
  fi
  if [ $CARD == $scindex ]; then
    PICKNEXTCARD=1
  fi
  count=$((count+1))
done
pacmd "set-default-sink $nextsc"
inputs=$(pacmd list-sink-inputs | awk '$1 == "index:" {print $2}')
for INPUT in $inputs; do # Move all current inputs to the new default sound card
  pacmd move-sink-input $INPUT $nextsc
done
nextscdesc=$(pacmd list-sinks | awk '$1 == "device.description" {print substr($0,5+length($1 $2))}' \
                         | sed 's|"||g' | awk -F"," 'NR==v1{print$0}' v1=$((nextind+1)))
exit
Всё что нам надо, это сохранить этот скрипт в файл и положить его в необходимую папку. Назовем файл soundswitch и наполним его сосуд истиной кода. После чего выполняем копирование:
sudo cp soundswitch /usr/local/bin/
Дальше создаём ярлык для запуска скрипта. Лично я сделал это ручками, создав файлик, наполнив его следующим содержимым:
[Desktop Entry]
Name=Soundswitch
Exec=/usr/local/bin/soundswitch
Icon=preferences-sound
Terminal=false
Type=Application
StartupNotify=false
Дальше следует просто перетянуть этот ярлык на панель Unity и получать удовольствие от клика и перманентной смены аудиокарты. 
PS: Возникла проблемка с быстрой сменой в Unity. При нажатии на кнопку она сменяет аудиокарту, но потом долго тупит и только потом можно нажать снова. Пока не нашел как победить эту напасть.

Комментариев нет:

Отправить комментарий