Mude rapidamente o dispositivo de áudio no KDE

16

Recentemente, mudei para o OpenSUSE (com KDE) do Windows e ainda estou passando pela curva de aprendizado.

Alterno com bastante frequência entre usar meus fones de ouvido com microfone embutido e usar os alto-falantes incorporados do meu monitor e o microfone da minha webcam. Usando o menu Phonon através do KMix (exemplo abaixo), sou capaz de reorganizar os dispositivos para colocar o que eu quero usar no topo, mas eu preferiria fazê-lo com uma tecla de atalho, semelhante ao que o aplicativo Audio Switcher funciona no Windows. Quando faço isso, também gostaria de definir o canal Master para o novo, para que eu possa ajustar facilmente o áudio.

insira a descrição da imagem aqui

Existe uma maneira de algum script que me permita (a) selecionar um novo dispositivo de reprodução de áudio e gravação de áudio padrão em tempo real, (b) enquanto também configura o canal principal para o mesmo dispositivo de reprodução (c) com uma tecla de atalho ou outro método rápido na área de trabalho?

Ryan
fonte

Respostas:

10

A maioria dos kits de GUI usa o mesmo PulseAudio de back-end. Use pactlpara escrever um script de controle.

NAME
       pactl - Control a running PulseAudio sound server

DESCRIPTION
       pactl can be used to issue control commands to the PulseAudio sound server.

       pactl only exposes a subset of the available operations. For the full set use the pacmd(1).

Fonte: man pactl

  1. Para verificar os dissipadores de saída disponíveis

    $ pactl list short sinks
    0   alsa_output.pci-0000_01_00.1.hdmi-stereo    module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    1   alsa_output.pci-0000_00_1b.0.analog-stereo  module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    
  2. Para verificar as fontes de entrada disponíveis

    $ pactl list short sources
    0   alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor    module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    1   alsa_output.pci-0000_00_1b.0.analog-stereo.monitor  module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    2   alsa_input.pci-0000_00_1b.0.analog-stereo   module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    
  3. Para verificar o padrão

    $ pactl info
    Server String: /run/user/1000/pulse/native
    Library Protocol Version: 30
    Server Protocol Version: 30
    Is Local: yes
    Client Index: 2
    Tile Size: 65472
    User Name: user
    Host Name: userpc
    Server Name: pulseaudio
    Server Version: 6.0
    Default Sample Specification: s16le 2ch 44100Hz
    Default Channel Map: front-left,front-right
    Default Sink: alsa_output.pci-0000_00_1b.0.analog-stereo
    Default Source: alsa_input.pci-0000_00_1b.0.analog-stereo
    
  4. Para definir o padrão

    pactl set-default-source id-or-name
    pactl set-default-sink id-or-name
    

    Exemplo:

    pactl set-default-source alsa_input.pci-0000_00_1b.0.analog-stereo
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
    

    ou:

    pactl set-default-source 2
    pactl set-default-sink 1
    

Notas:

  • Isso afetará apenas os novos fluxos; é necessário mover os fluxos atuais; portanto, use:

    pacmd move-sink-input <stream-id> <sink-id/name>
    

    Bom exemplo para copiar de: Mudar para o áudio HDMI quando o HDMI estiver conectado a um laptop (14.04)

  • Algumas placas possuem várias portas comutáveis. Pode ser a que você deseja, não é a padrão.

    Verifique as portas disponíveis:

    $pactl list sinks
    Sink #1
        State: RUNNING
        Name: alsa_output.pci-0000_00_1b.0.analog-stereo
        Description: Built-in Audio Analog Stereo
        Driver: module-alsa-card.c
        ...
        Ports:
            analog-output-speaker: Speakers (priority: 10000, not available)
            analog-output-headphones: Headphones (priority: 9000, available)
        Active Port: analog-output-headphones
        Formats:
            pcm
    ...
    

    Para configurá-lo:

    pactl set-sink-port <sink-id/name> <port-name>
    

    Exemplo:

    pactl set-sink-port 1 analog-output-headphones
    

Para mudar o canal principal

Após este tutorial , você pode definir o canal principal usando qdbuso seguinte:

  1. Encontre o Master Mixer para cada um dos seus dispositivos com o seguinte comando. Primeiro, defina manualmente o canal principal para o que você deseja verificar e, em seguida, execute o comando:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.currentMasterControl
    
  2. Usando o resultado desse comando e o coletor de áudio que você deseja controlar, use a seguinte sintaxe para alterar seu canal principal:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
    
  3. No final, o script para alternar todo o áudio atual para um novo canal, configurá-lo como padrão e configurá-lo como o canal principal se parece com o seguinte:

    #!/bin/bash
    pactl set-default-sink alsa_output.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-stereo
    pactl set-default-source alsa_input.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-mono
    INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
    for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-stereo &> /dev/null; done
    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "PulseAudio::Playback_Devices=:1" "alsa_output.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-stereo" 2>&1 > /dev/null
user.dz
fonte
Parece uma ótima resposta, mas não acho que minha instalação esteja usando o PulseAudio. Posso usar os comandos, mas a fonte padrão atual e o coletor não são os mesmos mostrados no menu Phonon. E alterá-los parece não ter efeito.
Ryan
@ Ryan, eu apenas testei no openSUSE 13.1 KDE, parece funcionar bem. A única coisa que notei: o painel Phonon não atualiza sua interface se as configurações forem alteradas do PulseAudio. Você pode instalar pavucontrole abrir os 3 juntos na tela (terminal w / pactl + painel pavucontrol + painel phonon). Tente alterar a configuração de cada um e assista. Em algum momento, você precisa fechar o telefone e abri-lo novamente para verificar o estado real.
user.dz
Eu descobri que você pode criar um novo perfil que ligam ambos pia juntos e assim eles estão sempre visíveis para pactl list short sinks, ver minha resposta abaixo
Francesco
3

Graças a esta resposta , finalmente encontrei uma solução, veja as instruções abaixo

Mostrar sempre a saída HDMI no misto Criaremos um novo perfil que vinculará os dois perfis "Áudio analógico" e "Áudio HDMI".

Pelo meu entendimento, esse arquivo /usr/share/pulseaudio/alsa-mixer/profile-sets/default.conflista todos os perfis de mapeamento entre Alsa e Pulseaudio.

1.
Encontre o mapeamento relacionado ao seu Analog profilee à HDMI profiledefinição. ( descrição: deve corresponder aos perfis de dispositivo mostrados no módulo de configuração Audio Volume Kde)

Para mim são os seguintes:

[Mapping analog-stereo]
device-strings = front:%f
channel-map = left,right
paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2
paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headphone-mic analog-input-headset-mic
priority = 10

[Mapping hdmi-stereo-extra1]
description = Digital Stereo (HDMI 2)
device-strings = hdmi:%f,1
paths-output = hdmi-output-1
channel-map = left,right
priority = 2
direction = output

2.
Com base na definição de mapeamento acima, criei o seguinte novo perfil que agrupa os dois acima:

[Profile output:analog-stereo+output:hdmi-stereo-extra1]
description = All
output-mappings = analog-stereo hdmi-stereo-extra1
input-mappings = analog-stereo

3.
Reinicie o áudio de pulso com este comando:

pulseaudio --kill; sleep 1; pulseaudio --start

4.
Vá para Configurações do telefone do KDE> Configuração do hardware de áudio e selecione o novo perfil. 2 perfis no misturador

Agora você deve ver os dois perfis no misto e assim poderá mudar facilmente:

HDMI é sempre mostrado no mixer agora
Gostaria de sugerir o uso deste misturador plasmóide: https://store.kde.org/p/1100894/

(etapa extra) Força a saída ativada

Se você não se importa em ter o alto-falante do computador e a TV emitindo áudio ao mesmo tempo (então basicamente você não precisa mudar a saída de áudio).

Você pode selecionar a configuração abaixo e depois terá uma nova entrada no mixer

insira a descrição da imagem aqui

Francesco
fonte
Isso é ótimo, funciona como um encanto, obrigado!
Stsloth 20/08/19
0

Com base nos comentários anteriores, escrevi o seguinte script e o vinculo a uma tecla de atalho para uso no KDE Plasma para alternar entre meus dois dispositivos de áudio. Eu gosto de ter o controle da minha fonte de áudio em vez de automatizar completamente esse processo.

Mude seus dispositivos de áudio conforme apropriado. Use pactl list short sinkspara determinar seus dispositivos.

#!/bin/bash

# Audio sinks
HEADSET='alsa_output.usb-Corsair_Corsair_VOID_PRO_Wireless_Gaming_Headset-00.analog-stereo'
SPEAKERS='alsa_output.pci-0000_1f_00.3.analog-stereo'

# Get current audio sink
CURRENTDEV=$(pactl list short sinks | grep RUNNING | awk {'print $2'})

# Determine our next audio sink
if [[ "$CURRENTDEV" == "$HEADSET" ]]; then
    NEXTDEV=$SPEAKERS
else
    NEXTDEV=$HEADSET
fi

# Set our default device
pactl set-default-sink $NEXTDEV

# Move current streams (dont check for null, if null you wont see heads up display of audio change)
INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
for i in ${INPUTS[*]}; do pacmd move-sink-input $i $NEXTDEV &> /dev/null; done

linuxkd
fonte
0

Minha situação é simples. Eu tenho duas saídas, algumas HDMI e outras analógicas, então, com base na resposta user.dz (obrigado), escrevi esse pequeno script e chamo-o com atalhos de teclado.

#!/bin/bash
# parameter: "hdmi" or "analog"

output=`pactl list short sinks |grep $1 | cut -f1`

pactl set-default-sink $output

for i in `pacmd list-sink-inputs |grep index: | awk '{print $2}'`; do
  pacmd move-sink-input $i $output
done

Se você tiver outras interfaces, poderá procurar um padrão exclusivo na saída "pactl list short sinks" e chamar o script com o parâmetro que desejar.

gabor.zed
fonte