Script para alternar entre dois dispositivos de som

1

Eu uso dois dispositivos de som, saída analógica normal e som através de HDMI. Quando não estou usando a TV, deixo desligado e mudo para os alto-falantes. Como faço isso regularmente, gostaria que um script fizesse isso por mim.

Eu tinha um script que alternava entre os dois, mas apenas para o aplicativo atual produzindo som. Eu perdi e não consigo encontrar a fonte da internet.

Alguém pode me ajudar a recriar esse script?

    
por danielcooperxyz 08.01.2013 / 20:28

1 resposta

3

Eu encontrei o script finalmente. Este script irá mover todos os sumidouros de entrada (ou seja, sua música, som de vídeo, etc.) para o seu outro dispositivo de som. Se você executar o script novamente, ele moverá todos os coletores de volta para o dispositivo de som original. (Eu testei isso apenas em dois dispositivos de som).

Instrução sobre como configurar:

  1. Cole o seguinte código em um arquivo usando o gedit.
  2. Salve o arquivo como speakers.sh (ou algum outro nome de arquivo) em seu diretório pessoal.
  3. Altere as permissões do arquivo para permitir a execução.

    • Clique com o botão direito do mouse no arquivo e escolha as propriedades.
    • Selecione a guia de permissões.
    • Marque a caixa de seleção "Permitir execução de arquivo como programa"

    ou

    • chmod + x ./speakers.sh
  4. Clique duas vezes no arquivo e clique em executar. Isso mudará o dispositivo de saída de som.

Em seguida, adicionei uma opção ao ícone de configurações no launcher de unidade para facilitar o acesso usando o Ubuntu Tweak . Aproveite!

Código:

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

Todo o crédito vai para os caras aqui , eu apenas re-encontrei a resposta para a minha pergunta.

    
por danielcooperxyz 08.01.2013 / 21:35