Atalho para alternar entre saída estéreo analógica e saída de áudio HDMI

16

Para alternar para a saída de áudio HDMI (do monitor) e voltar à saída de áudio normal do conector de áudio do sistema (para fones de ouvido, como meu monitor não tem saída de áudio), me encontro abrindo preferências de som e selecionando o canal direito toda vez. Existe alguma maneira de criar um botão de alternância no painel ou atribuir uma tecla de atalho para alternar, já que faço a troca com tanta frequência.

:aplay -l 
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: STAC92xx Analog [STAC92xx Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 3: HDMI 0 [HDMI 0]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 7: STAC92xx Digital [STAC92xx Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

    
por iJeeves 10.05.2011 / 18:46

10 respostas

10

Com o pulseaudio , podemos selecionar o coletor de saída a partir da linha de comando:

pacmd set-default-sink "SINKNAME"

Este comando pode ser usado em um lançador, script ou até mesmo atribuído a um atalho de teclado para alternar rapidamente entre diferentes coletores. Por favor, substitua "SINKNAME" pelo nome ou número do seu coletor desejado. Uma lista de coletores conhecidos com seus números e nomes associados é dada pelo comando:

pacmd list-sinks

Observação: a alteração do coletor de saída por meio da interface da linha de comando só pode entrar em vigor se o transmitir a leitura do dispositivo de destino está desativado. Isso pode ser feito editando a linha correspondente em /etc/pulse/default.pa para:

load-module module-stream-restore restore_device=false

Como alternativa, podemos executar pulseaudio para emitir som simultaneamente para o dispositivo de áudio interno e para o dispositivo hdmi executando paprefs com a opção de adicionar um dispositivo de saída virtual:

    
por Takkat 10.05.2011 / 20:15
7

Achei isso muito chato e escrevi um script para alternar a saída:

#!/bin/bash

CURRENT_PROFILE=$(pacmd list-cards | grep "active profile" | cut -d ' ' -f 3-)

if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo+input:analog-stereo>" ] ; then
        pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo"
else 
        pacmd set-card-profile 0 "output:hdmi-stereo+input:analog-stereo"        
fi

e, em seguida, liga uma tecla não usada no meu teclado para executá-lo (veja Como ligar comandos personalizados aos atalhos de teclado? )

    
por user829996 26.03.2013 / 18:22
2

Ainda outro script de comutador Sink

testado no Ubuntu 16.04

Mas este permite que você mude apenas o áudio do aplicativo desejado.

USO: Focalize o aplicativo que você deseja alterar seu coletor e execute este script. É isso!

Esse script detecta o aplicativo que está em foco, localiza todos os áudios reproduzidos a partir dele e os alterna para o próximo coletor disponível.

link

Explicando o script

Precisamos encontrar o PID do aplicativo em foco

Mas primeiro precisamos do xid

xprop -root _NET_ACTIVE_WINDOW 

Em seguida, insira aqui $xid para obter o pid da aplicação

xprop -id $xid _NET_WM_PID

Agora precisamos encontrar as entradas do coletor relacionadas a esse PID

Primeiramente vamos linearizar a saída do comando pacmd list-sink-inputs para listar uma entrada de sumidouro por linha, mostrando seu índice, sink e pid na mesma linha

pacmd list-sink-inputs | grep -E 'index:|sink:|process.id' | tr '\n' ' ' | tr -d '"' | sed -e 's/index:/\n/g' | tail -n +2

vamos analisá-lo passo a passo:

grep -E 'index:|sink:|process.id apenas manter linhas que contenham index: , sink: ou process.id

tr '\n' ' ' une todas as linhas

tr -d '"' remove todos os caracteres " . Necessário para obter o pid sem aspas

sed -e 's/index:/\n/g' substitui todas as ocorrências index: por um novo caractere de linha \n

tail -n +2 remove a primeira linha porque está vazia

E o resultado é algo assim:

  180 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 3521
  181 sink: 1 <alsa_output.pci-0000_00_01.0.analog-stereo> application.process.id = 2733
  182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752

Vamos analisar uma linha para entender o que isso significa:

  # 182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752

182 é o índice de entrada do coletor, 0 é o índice do coletor e 13752 no final, é o pid do aplicativo pertencente

Depois, percorremos cada linha

... | while IFS= read -r line || [ -n "$line" ]; do
  sink_input_pid=$(echo $line | awk '{print $NF}')

E, finalmente, filtre apenas o pid da entrada do coletor que corresponde ao pid do aplicativo focado

  if [ $sink_input_pid = $app_pid ]; then

Extraindo dados

Com awk , podemos obter os elementos de que precisamos

sink_input_index=$(echo $sink_input | awk '{print }')
current_sink_index=$(echo $sink_input | awk '{print }')

Obtenha números de coletores, para saber quando a rotação de coletores deve reiniciar de 0.

sink_list_size=${#sink_list_array[@]}

Encontrando o próximo coletor, precisamos percorrer a lista de coletores, saber qual deles corresponde a current_sink_index e conhecer o índice do próximo coletor.

i=0
for sink in "${sink_list_array[@]}"; do
  i=$((($i+1)%sink_list_size))  # i++ mod(#sinks)
  if [ $sink = $current_sink_index ]; then
    next_sink_index=${sink_list_array[i]}
    break
  fi
done

E finalmente, movemos a entrada sink para tocar em next_sink_index

pacmd move-sink-input $sink_input_index $next_sink_index

Nota no Ubuntu 16.04:

Ao configurar a tecla de atalho, não consegui fazê-la funcionar com o gerenciador de atalhos do ubuntu. Então eu tive que instalar compizconfig-settings-manager

sudo apt-get install compizconfig-settings-manager
    
por Madacol 07.02.2017 / 21:33
1

Se você estiver usando o Gnome Shell em vez do Unity, pode instalar a extensão abaixo. Você será capaz de alternar do volume de atalho no painel superior. link

    
por rubadubdub 27.01.2012 / 14:41
1

Como existe apenas uma placa de som visível na imagem, acho que a saída desta placa de som deve ser trocada.

Por exemplo: Eu tenho um Notebook com uma placa de som integrada, mas ela tem uma saída digital (SPDIF) quando encaixada.

Então, o que eu queria fazer é mudar a saída ativa ou "Perfil" no pulseaudio.

Eu encontrei os comandos que fazem exatamente isso:

pacmd set-card-profile 0 output:analog-stereo
pacmd set-card-profile 0 output:iec958-stereo+input:analog-stereo

O que eu fiz para obter os nomes corretos para minha configuração de saída desejada - aqui, saída digital, mas entrada analógica (micro) - foi:

pacmd list | grep output
    
por ritterkeks 22.09.2012 / 21:02
1

Estou tentando encontrar uma solução para esse problema também. A partir do Ubuntu 11.04 isso não parece ser possível diretamente, eu só encontrei este guia para adicionar HDMI e Analog como saídas separadas, então o pacmd mostra 3 pias agora. Então é possível alternar entre sumidouros usando os comandos acima. ( veja também )

Mas, aparentemente, o Ubuntu 11,11 terá um sistema de detecção de pulsos PulseAudio. De acordo com o site abaixo, David Henningsson codificou uma detecção via udev para que o áudio de pulso seja automaticamente alterado para a última saída adicionada, incluindo alternar entre diferentes perfis da mesma placa de som (como é o caso da sua e da minha configuração). (veja aqui )

Então, espero que isso funcione, quando eu tentar a versão final na próxima sexta-feira.

    
por Graipher 09.10.2011 / 18:17
0
  

Existe alguma maneira de criar um botão de alternância no painel

Eu escrevi um miniaplicativo de indicadores que permite alternar a saída de som (ver captura de tela).

link

Screenshot: link

    
por Lukas 21.12.2013 / 13:05
0

Com base em muitas das respostas anteriores, eu escrevi um script que define o coletor de reprodução alternando entre os disponíveis.

A melhor maneira de usá-lo é criando um atalho de teclado para executá-lo, então toda vez que você pressionar essa combinação de teclas, o áudio é redirecionado para o próximo coletor disponível.

O código está disponível aqui: link

    
por GermanK 08.09.2016 / 07:17
0

No meu caso, as opções analógicas não estão na lista. Instale o pavucontrol: sudo apt install pavucontrol

Poderia corrigir o problema, iniciando o aplicativo:

  1. Inicie o aplicativo pelo terminal, digitando: pavucontrol (enter)
  2. Vá para a guia "Configuração".
  3. Selecione o perfil de saída estéreo analógico no Intern Sound

Agora eu poderia aqui soar e selecionar diferentes perfis (no Linux Mint):

    
por danger89 10.07.2018 / 16:11
0

Testado no Ubuntu 16.04

Como alternativa ao Indicador de comutador de som (que requer a adição de um PPA):

Em um comando

No meu caso foi hdmi-stereo-extra1+input profile, então em uma linha seria:

[[ $(pacmd list-cards | grep "active profile" | cut -d " " -f 3-) = "<output:hdmi-stereo-extra1+input:analog-stereo>" ]] && \
     pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo" || \
     pacmd set-card-profile 0 "output:hdmi-stereo-extra1+input:analog-stereo"

Você pode usar um atalho personalizado para executá-lo com bash -c (avisará se houver algum conflito com outro atalho):

Eu uso:

  • Super + Alt + o : saída do comutador
  • Super + Alt + Acima : Vol Up
  • Super + Alt + Baixo : Vol Down

Você também pode adicionar um alias ao seu .bashrc .

Em um script

Eu fiz algumas alterações com base na resposta @ user829996:

#!/bin/bash
set -euo pipefail # strict mode

activeProfile() { pacmd list-cards | grep "active profile" | cut -d " " -f 3-; }
CURRENT_PROFILE="$(eval activeProfile)"

# If it doesn't work run  pacmd list-cards  and try the other outputs from profile section
ANALOG_PROFILE="output:analog-stereo+input:analog-stereo"
HDMI_PROFILE="output:hdmi-stereo-extra1+input:analog-stereo"

if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo-extra1+input:analog-stereo>" ] ; then
  pacmd set-card-profile 0 "$ANALOG_PROFILE"
else
    pacmd set-card-profile 0 "$HDMI_PROFILE"
fi

activeProfile
    
por Pablo Bianchi 30.03.2017 / 22:20