
저는 최근에 Windows에서 OpenSUSE(KDE 포함)로 전환했는데 여전히 학습 곡선을 겪고 있습니다.
저는 마이크가 내장된 헤드폰을 사용하는 것과 모니터에 내장된 스피커 및 웹캠의 마이크를 사용하는 것 사이를 상당히 자주 전환합니다. KMix(아래 예)를 통해 Phonon 메뉴를 사용하여 장치를 재정렬하여 사용하려는 장치를 맨 위에 놓을 수 있지만 다음과 유사한 단축키를 사용하여 수행할 수 있는 것을 선호합니다. 그만큼오디오 스위처응용 프로그램은 Windows에서 작동합니다. 그렇게 하면 오디오를 쉽게 조정할 수 있도록 마스터 채널도 새 채널로 설정하고 싶습니다.
(a) 새로운 기본 오디오 재생 및 오디오 녹음 장치를 즉시 선택하고 (b) 마스터 채널을 동일한 재생 장치로 설정하는 동시에 (c) 핫키를 사용하여 또는 데스크탑에서 다른 빠른 방법이 있나요?
답변1
대부분의 GUI 키트는 동일한 백엔드 PulseAudio를 사용합니다. 제어 스크립트를 작성하는 데 사용됩니다 pactl
.
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).
원천: man pactl
사용 가능한 출력 싱크를 확인하려면
$ 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
사용 가능한 입력 소스를 확인하려면
$ 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
기본값을 확인하려면
$ 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
기본값을 설정하려면
pactl set-default-source id-or-name pactl set-default-sink id-or-name
예:
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
또는:
pactl set-default-source 2 pactl set-default-sink 1
노트:
이는 새 스트림에만 영향을 미치므로 현재 실행 중인 스트림을 이동해야 하므로 다음을 사용하십시오.
pacmd move-sink-input <stream-id> <sink-id/name>
복사할 수 있는 좋은 예:HDMI가 노트북에 연결되어 있을 때 HDMI 오디오로 전환(14.04)
일부 카드에는 전환 가능한 포트가 여러 개 있습니다. 원하는 포트가 기본값이 아닐 수도 있습니다.
사용 가능한 포트를 확인하세요.
$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 ...
설정하려면:
pactl set-sink-port <sink-id/name> <port-name>
예:
pactl set-sink-port 1 analog-output-headphones
마스터 채널을 변경하려면
수행원이 튜토리얼qdbus
, 다음을 사용하여 마스터 채널을 설정할 수 있습니다 .
다음 명령을 사용하여 각 장치에 대한 마스터 믹서를 찾으십시오. 먼저 확인하려는 채널로 마스터 채널을 수동으로 설정한 후 다음 명령을 실행하십시오.
qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.currentMasterControl
해당 명령의 결과와 제어하려는 오디오 싱크를 사용하여 다음 구문을 사용하여 마스터 채널을 변경합니다.
qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
결국 현재의 모든 오디오를 새 채널로 전환하고 이를 기본값으로 설정한 후 마스터 채널로 설정하는 스크립트는 다음과 같습니다.
#!/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
답변2
덕분에이 답변마침내 해결책을 찾았습니다. 아래 지침을 참조하세요.
혼합 모드에서 항상 HDMI 출력 표시 "아날로그 오디오"와 "HDMI 오디오" 프로필을 모두 연결하는 새 프로필을 만듭니다.
내 이해에 따르면 이 파일에는
/usr/share/pulseaudio/alsa-mixer/profile-sets/default.conf
Alsa와 Pulseaudio 간의 모든 매핑 프로필이 나열되어 있습니다.
1.Analog profile
귀하의 및 정의 와 관련된 매핑을 찾으십시오 HDMI profile
. (설명:일치해야장치 프로필에 표시됨오디오 볼륨Kde 설정 모듈)
나에게는 다음이 있다:
[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.
위의 매핑 정의를 기반으로 위의 두 프로필을 모두 그룹화하는 다음과 같은 새 프로필을 만들었습니다.
[Profile output:analog-stereo+output:hdmi-stereo-extra1]
description = All
output-mappings = analog-stereo hdmi-stereo-extra1
input-mappings = analog-stereo
삼.
다음 명령을 사용하여 펄스 오디오를 다시 시작하십시오.
pulseaudio --kill; sleep 1; pulseaudio --start
4.
KDE 포논 설정 > 오디오 하드웨어 설정으로 이동하여 새 프로필을 선택하십시오.
이제 두 프로필이 혼합되어 표시되므로 쉽게 전환할 수 있습니다.
나는 이 플라스모이드 믹서를 사용하는 것을 제안합니다:https://store.kde.org/p/1100894/
(추가 단계) 두 출력을 강제로 활성화합니다.
컴퓨터 스피커와 TV 출력 오디오를 동시에 사용하는 것이 마음에 들지 않는다면(따라서 기본적으로 오디오 출력을 전환할 필요가 없습니다).
아래 설정을 선택하면 믹서에 새 항목이 생깁니다.
답변3
이전 의견을 바탕으로 다음 스크립트를 작성하고 KDE 플라즈마에서 두 오디오 장치 사이를 전환하는 데 사용할 단축키에 바인딩했습니다. 저는 이 프로세스를 완전히 자동화하는 대신 오디오 소스를 제어하는 것을 좋아합니다.
오디오 장치를 적절하게 변경하십시오. pactl list short sinks
장치를 결정하는 데 사용됩니다 .
#!/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
답변4
여기저기 찾아봤는데... 못찾았어요... 파이썬으로 스크립트를 만들어서 사용했어요)
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()