
Recientemente cambié a OpenSUSE (con KDE) desde Windows y todavía estoy en la curva de aprendizaje.
Cambio con bastante frecuencia entre usar mis auriculares con micrófono incorporado y usar los parlantes incorporados de mi monitor y el micrófono de mi cámara web. Usando el menú Phonon a través de KMix (ejemplo a continuación), puedo reorganizar los dispositivos para colocar el que quiero usar en la parte superior, pero preferiría poder hacerlo con una tecla de acceso rápido, similar a lo que elConmutador de audiola aplicación lo hace en Windows. Cuando lo hago, también me gustaría configurar el canal maestro en el nuevo para poder ajustar fácilmente el audio.
¿Existe alguna forma de utilizar algún script que me permita (a) seleccionar un nuevo dispositivo de reproducción y grabación de audio predeterminado sobre la marcha, (b) y al mismo tiempo configurar el canal maestro en ese mismo dispositivo de reproducción (c) con una tecla de acceso rápido o ¿Otro método rápido en el escritorio?
Respuesta1
La mayoría de los kits de GUI utilizan el mismo backend PulseAudio. Úselo pactl
para escribir un script de control.
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).
Fuente: man pactl
Para comprobar los sumideros de salida disponibles
$ 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 comprobar las fuentes de entrada disponibles
$ 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 comprobar el valor predeterminado
$ 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 establecer el valor predeterminado
pactl set-default-source id-or-name pactl set-default-sink id-or-name
Ejemplo:
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
o:
pactl set-default-source 2 pactl set-default-sink 1
Notas:
Esto afectará solo a las transmisiones nuevas, debe mover las transmisiones en ejecución actuales, así que use:
pacmd move-sink-input <stream-id> <sink-id/name>
Buen ejemplo para copiar de:Cambiar a audio HDMI cuando HDMI está conectado a una computadora portátil (14.04)
Algunas tarjetas tienen varios puertos conmutables. Es posible que el que desee no sea el predeterminado.
Verifique los puertos disponibles:
$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 configurarlo:
pactl set-sink-port <sink-id/name> <port-name>
Ejemplo:
pactl set-sink-port 1 analog-output-headphones
Para cambiar el canal maestro
Siguienteeste tutorial, puede configurar el canal maestro de qdbus
la siguiente manera:
Encuentra el Master Mixer para cada uno de tus dispositivos con el siguiente comando. Primero configure manualmente el canal maestro en el que desea verificar, luego ejecute el comando:
qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.currentMasterControl
Usando el resultado de ese comando y el receptor de audio que deseas controlar, usa la siguiente sintaxis para cambiar tu canal maestro:
qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
Al final, el script para cambiar todo el audio actual a un nuevo canal, configurarlo como predeterminado y configurarlo como canal maestro se parece a lo siguiente:
#!/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
Respuesta2
Gracias aesta respuestaFinalmente encontré una solución, consulte las instrucciones a continuación.
Mostrar siempre la salida HDMI en modo mixto Crearemos un nuevo perfil que vincule ambos perfiles "Audio analógico" y "Audio HDMI".
Según tengo entendido, este archivo
/usr/share/pulseaudio/alsa-mixer/profile-sets/default.conf
enumera todos los perfiles de mapeo entre Alsa y Pulseaudio.
1.
Encuentre los mapas que están relacionados con su Analog profile
yHDMI profile
. (descripción:debe coincidir con elPerfiles de dispositivosse muestra en laVolumen de audiomódulo de configuración de Kde)
Para mi son los siguientes:
[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.
Sobre la base de la definición de Mapeo anterior, he creado el siguiente perfil nuevo que agrupa los dos anteriores:
[Profile output:analog-stereo+output:hdmi-stereo-extra1]
description = All
output-mappings = analog-stereo hdmi-stereo-extra1
input-mappings = analog-stereo
3.
Reinicie el audio de pulso con este comando:
pulseaudio --kill; sleep 1; pulseaudio --start
4.
Vaya a configuración de phonon de KDE > Configuración de hardware de audio y seleccione el nuevo perfil.
Ahora deberías ver ambos perfiles en el mixto y así podrás cambiar fácilmente:
Sugeriría utilizar este mezclador de plasmoides:https://store.kde.org/p/1100894/
(paso adicional) Forzar ambas salidas habilitadas
Si no le importa tener el altavoz de la computadora y la salida de audio del televisor al mismo tiempo (básicamente, no tiene que cambiar la salida de audio nunca).
Puede seleccionar la siguiente configuración y luego tendrá una nueva entrada en el mezclador
Respuesta3
Basándome en comentarios anteriores, escribí el siguiente script y lo vinculé a una tecla de acceso rápido para usarlo en KDE Plasma para alternar entre mis dos dispositivos de audio. Me gusta tener el control de mi fuente de audio en lugar de automatizar completamente este proceso.
Cambie sus dispositivos de audio según corresponda. Úselo pactl list short sinks
para determinar sus 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
Respuesta4
Busqué por todos lados... no encontré... hice un script en python, úsalo)
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()