
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.
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 pactl
para 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
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
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
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
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 qdbus
o seguinte:
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
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
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.conf
lista todos os perfis de mapeamento entre Alsa e Pulseaudio.
1.
Encontre o mapeamento relacionado à sua Analog profile
definiçã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.
Agora você deve ver os dois perfis no misto e poderá alternar facilmente:
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
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 sinks
para 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()