понедельник, 13 апреля 2015 г.

Улучшаем переключатели pulseaudio в awesome-dm

Регулятор громкостей различных наушников у меня уже есть на панели awesome-dm.

Выглядит аскетично:

Как его сделать, писал вот тут.

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

Не просто set-default, а еще и  всё что уже проигрывается переносить в нужный вывод.

Для этого будем использовать вот такой скрипт:
#!/bin/bash
   
if [ -z "$1" ]; then          
    echo "Usage: $0 <sinkId/sinkName>" >&2
    echo "Valid sinks:" >&2
    pactl list short sinks >&2
    exit 1
fi 
   
newSink="$1"
   
pactl list short sink-inputs|while read stream; do
    streamId=$(echo $stream|cut '-d ' -f1)
    if [ "$streamId" -gt 1 ]
    then
        echo "moving stream $streamId"
        pactl move-sink-input "$streamId" "$newSink"
    fi
done
Забираем всё что проигрывается,
потоки номер 0 и 1 пропускаю потому, что они у меня виртуальные, там находится remapped sink,
и через move-sink-input перенаправляю в нужный источник.

Впишем вызов этого скрипта в pulseaudio.lua
function SwitchTo(i)
    local f = io.popen("pa_switch.sh " .. i )
    local v = f:read()
    f:close()
end

И навешаем левый клик по регулятору громкости на вызов этой функции.
     volumewidget0:buttons(awful.util.table.join(
      awful.button({ }, 1, function() pulseaudio.SwitchTo(1); end),
Можно улучшить избавившись от констант номеров звуковых карт, но у меня они почему то не меняются,  и я ленюсь.

Теперь что бы перенести все звуки на конкретные наушники/колонки нужно щелкнуть по нужному регулятору громкости.