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

13

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 / 20:46

9 respostas

9

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 / 22: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 / 19:22
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 / 15: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 / 23: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 / 20:17
1

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 o último índice de coletor, para saber quando a rotação dos coletores deve ser reiniciada a partir de 0.

pacmd list-sinks | awk '/index:/{print $NF}' | tail -n1

Encontrando a próxima pia

next_sink_index=$((($current_sink_index+1)%($sinks_length+1)))

E finalmente, mudar para o próximo sumidouro

pacmd move-sink-input $sink_input_index $next_sink_index

Nota:

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 / 22:33
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 / 14: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 / 09:17
0

Como alternativa ao Indicador de comutador de som (que requer adicionar um PPA):

Em uma linha

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):

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 31.03.2017 / 00:20