Dispositivo de saída de áudio, interruptor rápido?

19

Dependendo da situação, eu uso meus alto-falantes ou meu fone de ouvido para a saída de áudio. Como meu fone de ouvido é um fone de ouvido USB, ele se comporta como seu próprio dispositivo de áudio.

Atualmente, alterno entre dispositivos de saída de áudio clicando no ícone de alto-falante na bandeja superior direita, onde seleciono Configurações de som, vou para a guia Saída e escolho o dispositivo desejado.

O que eu imagino é se pode haver alguma maneira mais fácil / rápida de alternar entre o meu fone de ouvido USB? Talvez um ícone de bandeja dedicada, um mapeamento de chaves ou algo assim?

Estou executando o Ubuntu 10.04, com a área de trabalho padrão do Gnome.

    
por andol 12.09.2010 / 09:37

10 respostas

11

Para alterar o dispositivo de saída de áudio padrão da linha de comando, você pode usar o utilitário de linha de comando pacmd Pulse Audio.

Eu encontrei a necessidade de fazer da mesma forma hoje, querendo alternar entre fones de ouvido e alto-falantes, ambos conectados em placas de áudio separadas. Aqui está o script de shell que eu escrevi para fazer isso:

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

Notas:

  • Isso alterna entre os dois primeiros dispositivos de saída de áudio que o utilitário pacmd lista. Se você tiver mais de dois dispositivos de áudio e quiser trocar por um diferente, você precisará substituir a lógica na linha 7 por alguns condicionais.
  • Basta trocar o dispositivo de coletor padrão não faz nada para os aplicativos atualmente em execução - eles continuarão a saída para o dispositivo anterior. Esse script também move o destino do coletor para todas as entradas existentes. Ou seja, se você executar esse script com músicas sendo reproduzidas em um dispositivo, ele será instantaneamente substituído pelo outro. Se você quiser que os aplicativos existentes continuem no dispositivo anterior, comente a última linha (e a linha 5, se desejar).
por Andrew 20.12.2010 / 05:00
7

Bem, você pode instalar o pavucontrol , ele mostra aplicativos com seleção de dispositivo de som na primeira guia, isso economizará algum esforço. Mas o que você realmente quer, eu acho, é marcar seu fone de ouvido USB como dispositivo padrão, então toda vez que você ligá-lo, todo o som será redirecionado para ele, e quando você ligá-lo, ele retornará aos alto-falantes. Sem esforço, realmente.

    
por vava 12.09.2010 / 11:33
3

A pergunta é bem antiga, mas minha resposta ainda pode ser útil para usuários do GNOME 2. Eu usei Applet do Mixer de áudio do PulseA para o problema exato descrito aqui. Você pode alterar os dispositivos de entrada e saída diretamente no menu do painel. É a maneira mais conveniente que encontrei.

    
por dAnjou 14.12.2011 / 17:29
3

É claro que a troca de dispositivos usando o Applet também está funcionando bem. Mas o legal de escrever um roteiro é que ele é super rápido. Eu coloquei o meu, por exemplo, no atalho de teclado alt + s. assim, quando eu quiser mudar de fones de ouvido para alto-falantes, eu só preciso pressionar alt + s.

De qualquer forma. Andrew disse:

If you have more than two audio devices and want to swap to a different one, you'll need to replace the logic on line 7 with some conditionals.

Foi o que eu fiz. Eu compartilho, caso alguém tenha problemas com isso:

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

O que eu fiz diferente é a) encontrar o coletor ativo em um loop for. E b) mude para o próximo coletor, aumente o índice em 1. Então modulo o resultado pelo número de coletores. Isso garante que, e. ao ter 3 pias, (2 + 1)% 3 = 0. Assim, a partir do índice de afundamento 2, alternaríamos para o índice 0 de depósito.

Desta forma, o interruptor permite mover para cima através dos sumidouros disponíveis.

    
por traumtaenzer 18.01.2012 / 08:29
2

Obrigado pelos scripts! Eu adicionei uma parte para entrada (microfone), bem como no caso de alguém quiser usá-lo:

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)
    
por Subbeh 19.12.2011 / 23:16
2

Para percorrer sua lista de dispositivos de som, use o seguinte script:

#!/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 tsvetan do fórum do Ubuntu .

    
por guttermonk 19.04.2014 / 17:33
1

Eu estava procurando uma maneira de fazer isso para alternar entre os alto-falantes internos no meu laptop e um aeroporto de apple estação base que está conectada ao meu aparelho de som. Eu decidi atribuir teclas de atalho para mudar. Eu queria que a janela de preferências de áudio surgisse por um segundo para dar uma confirmação visual do switch e usar o wmctrl para fechar a janela depois.

(Eu usei ctrl + F8 e ctrl + F9 como teclas de atalho, pois a função Fn dessas teclas no meu laptop é aumentar e diminuir o volume, então parecia óbvio que as funções ctrl alteram a saída de áudio.)

Eu usei os seguintes scripts (quase idênticos):

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

A primeira muda para a estação base da Apple (que eu atribuí a ctrl + F9) e a segunda muda de volta para alto-falantes internos (ctrl + F8). Isso pressupõe que esses sejam os dois únicos dispositivos de saída instalados.

    
por retrokid 22.01.2011 / 13:11
1

Eu usei o script Andrews para usar o notify-osd para anunciar o que ele acabou de fazer. Edite as linhas com os nomes de acordo com suas necessidades.

#!/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
    
por Kveras 13.05.2012 / 19:55
0

Eu tive o mesmo problema e escrevi um miniaplicativo de indicadores para a área de trabalho do Ubuntu Unity:

link

link

    
por Lukas 21.12.2013 / 13:43
0

Aqui está um pequeno script que alterna os coletores de áudio para a janela atualmente focada: link

Requer pacmd e xdotool

    
por 22.06.2018 / 23:02

Tags