Mude rapidamente o dispositivo de áudio no KDE

Mude rapidamente o dispositivo de áudio no KDE

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

Eu alterno com bastante frequência entre usar meus fones de ouvido com microfone embutido e usar os alto-falantes integrados do monitor e o microfone da minha webcam. Usando o menu Phonon através do KMix (exemplo abaixo), consigo reorganizar os dispositivos para colocar aquele que quero usar em cima, mas prefiro poder fazer isso com uma tecla de atalho, semelhante ao que oComutador de áudioaplicativo faz no Windows. Ao fazer isso, também gostaria de definir o canal Master para o novo para poder ajustar facilmente o áudio.

insira a descrição da imagem aqui

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

Responder1

A maioria dos kits GUI usa o mesmo backend PulseAudio. Use pactlpara escrever 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 coletores 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 novos fluxos, você deve mover os fluxos atuais em execução, então use:

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

    Belo exemplo para copiar:Mudando para áudio HDMI quando o HDMI está conectado a um laptop (14.04)

  • Algumas placas possuem múltiplas portas comutáveis. Pode ser que a que você deseja não seja 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 alterar o canal mestre

Seguindoeste tutorial, você pode definir o canal mestre usando qdbuso seguinte:

  1. Encontre o Master Mixer para cada um dos seus dispositivos com o seguinte comando. Primeiro defina manualmente o canal mestre para aquele 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 mestre:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
    
  3. No final, o script para mudar todo o áudio atual para um novo canal, defini-lo como padrão e defini-lo como canal mestre é semelhante ao 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
    

Responder2

Graças aesta respostaFinalmente encontrei uma solução, veja as instruções abaixo

Mostrar sempre a saída HDMI na mixagem Criaremos um novo perfil que vinculará os perfis “Áudio analógico” e “Áudio HDMI”.

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

1.
Encontre o mapeamento relacionado à sua Analog profiledefinição HDMI profile. (descrição:deve corresponder aoPerfis de dispositivosmostrado emVolume de áudioMódulo de configuração do 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 de phonon do KDE > configuração de hardware de áudio e selecione o novo perfil. 2 perfis no mixer

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

HDMI é sempre mostrado no mixer agora
Eu sugeriria usar este misturador plasmóide:https://store.kde.org/p/1100894/

(etapa extra) Força ambas as saídas habilitadas

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

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

insira a descrição da imagem aqui

Responder3

Com base nos comentários anteriores, escrevi o seguinte script e vinculei-o a uma tecla de atalho para uso no KDE Plasma para alternar entre meus dois dispositivos de áudio. 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

Responder4

Procurei em todo lugar... não encontrei... fiz um script em python, use-o)

import os
speakers = []
st = 0
au = os.popen("pacmd list-sinks")
audiotm = au.read()
audio = list(audiotm.split())
indices = [i for i, x in enumerate(audio) if x == "name:"]
for num in range(len(indices)):
    speakers.append(audio[indices[num]+1])
for num in range(len(speakers)):
    speakers[num] = speakers[num][1:len(speakers[num])-1]
dir = os.path.abspath(__file__)
dir = dir[:-5]
try: f = open(dir + "lststate.txt","r");st = int(f.read()) ;f.close();
except:f = open(dir + "lststate.txt","w");f.write(str(st)); f.close();
if st == len(speakers): st = 0;
OUT = speakers[st]
st += 1
f = open(dir + "lststate.txt","w");f.write(str(st)); f.close();
z = os.popen("pactl list short sink-inputs")
OUTID = z.read().split()
x = os.popen("pacmd set-default-sink " + OUT)
for num in range(0,len(OUTID),7):
    y = os.popen("pactl move-sink-input " + OUTID[num] + " " + OUT)
exit()

informação relacionada