사운드 카드가 내장된 노트북에 외부 USB 사운드 어댑터를 사용하고 있습니다. 몇 가지 문제가 있습니다:
기본적으로 응용 프로그램은 내부 사운드 카드를 계속 사용합니다. 다음 방법으로 이 문제를 수동으로 해결할 수 있습니다. 열기
pavucontrol
: "출력 장치"로 이동하여 어댑터 출력을 찾아 "대체로 설정"을 클릭합니다. 때로는 "재생" 탭에서 이미 재생된 애플리케이션을 찾아 해당 싱크를 변경합니다.키보드 볼륨 버튼은 외부 어댑터가 아닌 내부 사운드 카드에서 계속 작동합니다.
- 어댑터에는 물리적 볼륨 높이기, 낮추기 및 음소거 전환 버튼이 있습니다. 누르면 시스템이 예상한 작업을 수행하지만 외부 어댑터가 아닌 내부 사운드 카드에서 수행됩니다. 테스트되지 않은 마이크 음소거 버튼도 있습니다.
- 외부 어댑터를 사용하여 볼륨을 설정하면
pavucontrol
작동하지만 35% 이하로 설정하면 소리가 전혀 들리지 않습니다. 볼륨이 꽤 높기 때문에 조용한 소스에는 35%가 적당하고 시끄러운 소스에는 적합하지 않습니다. 앱별 볼륨 제한을 설정하여(pavucontrol
창에서 클릭) 이 문제를 수동으로 해결할 수 있지만 지루하고 앱이 새 스트림을 시작할 때마다 다시 실행해야 합니다.
소유 방법:
- (1) 애플리케이션은 기본적으로 어댑터를 재생합니다.
- (2) 키보드 볼륨 버튼은 선택한 사운드 카드용입니다(여기서는 어댑터).
- (3) 물리적 어댑터 버튼은 선택한 사운드 카드용입니다(여기서는 어댑터).
- (4) 어댑터의 볼륨 설정은 무음 상태로 직접 들어가지 않고도 35% 미만으로 낮아질 수 있습니다.
시스템은 XFCE 4.10을 실행하는 Ubuntu 14.10입니다. 어댑터는 "ID 0d8c:000c C-Media Electronics, Inc. 오디오 어댑터"입니다.
답변1
실험적인 해결 방법이 있습니다.
먼저 어댑터 수신기 이름을 가져옵니다.
첫 번째는 어댑터의 수신기 이름을 찾아야 합니다. 셸을 엽니다. bash
기본 로케일로 전환하여 현지화 문제를 가정하고 예방 하겠습니다 .
export LC_ALL=C
수신자 목록을 얻으려면:
pacmd list-sinks | grep name:
출력을 읽고 이름을 명령줄에 수동으로 복사하여 붙여넣을 수 있습니다.ADAPTER_SINK_NAME=name_in_your_setup
보다 자동으로 아래 줄은 나에게 효과가 있었고 많은 경우에 작동해야 하는 첫 번째 비 PCI 어댑터의 이름을 찾습니다.
ADAPTER_SINK_NAME=$( pacmd list-sinks | sed -n 's/^.*name: <\([^>]*\.usb[^>]*\)>$/\1/p' | head -n 1 )
echo $ADAPTER_SINK_NAME
대체 용도 pactl
(그러나 위의 줄을 실행해야 합니다. export
그렇지 않으면 기본이 아닌 로케일에서는 아무 것도 찾을 수 없습니다):
ADAPTER_SINK_NAME=$( pactl list sinks | sed -n 's/^.*Name: \(.*\.usb.*\)$/\1/p' | head -n 1 )
echo $ADAPTER_SINK_NAME
부분 수리 수행(1)(2)(3)
이제 이것은 질문의 요점 (1) (2) (3)을 제공합니다.
pactl set-default-sink $ADAPTER_SINK_NAME
흥미롭게도 나는 (2)와 (3)을 제공하지만 항상 (1)은 아닌 pacmd set-default-sink ...
( pacmd
대신 )을 먼저 사용했습니다 .pactl
(1)~(4) 전체 수정 사항 받기
그것은 기반으로합니다PulseAudio를 사용하여 두 개의 사운드 카드에서 동시에 음악을 재생할 수 있습니까?원칙은 "동시에 하나의 사운드 카드에서 재생"입니다. ;-)
pacmd load-module module-combine sink_name=adapter-soft-volume slaves=$ADAPTER_SINK_NAME
pactl set-default-sink adapter-soft-volume
이제 모든 것이 질문에 명시된 대로 작동합니다.
청소하세요.
위 명령을 여러 번 실행하면 결합된 수신기가 여러 개가 되며 마지막 수신기가 아닌 첫 번째 수신기가 사용됩니다. 어떤 이유로든 다시 시작하려면 먼저 다음 명령을 실행하여 결합된 싱크를 정리하세요.
pacmd unload-module module-combine
계속 진행하시려면 지금은 정리 기능을 사용하지 마세요.
보너스: 현재 재생 중인 스트림을 어댑터로 이동
위 명령은 이미 재생된 스트림이 아닌 새 스트림에서 작동합니다. 그러면 필요한 사항이 조정됩니다.
for SINK_ID in $(pactl list sink-inputs | sed -n 's/^Sink Input #\([0-9]*\)$/\1/p')
do
echo Sink $SINK_ID
pactl move-sink-input $SINK_ID $ADAPTER_SINK_NAME
pactl move-sink-input $SINK_ID adapter-soft-volume
done
원형 경로를 생성하는 결합된 입력을 포함하여 모든 수신기 입력을 이동하려고 시도합니다. 다행스럽게도 pulseaudio는 올바른 작업을 수행하고 Failure: Invalid argument
이를 표시하기 위해 한 번 인쇄합니다.
자동화
다음 스크립트는 (1)~(4)의 이점을 제공합니다. 위의 내용을 추가해도 됩니다 move-sink-input
. 어댑터를 연결할 때마다 실행하는 것이 재미있을 수도 있습니다.
#!/bin/bash
export LC_ALL=C
ADAPTER_SINK_NAME=$( pacmd list-sinks | sed -n 's/^.*name: <\([^>]*\.usb[^>]*\)>$/\1/p' | head -n 1 )
if [[ -z "${ADAPTER_SINK_NAME:-}" ]]
then
ADAPTER_SINK_NAME=$( pactl list sinks | sed -n 's/^.*Name: \(.*\.usb.*\)$/\1/p' | head -n 1 )
fi
echo will plug on $ADAPTER_SINK_NAME
# partial fix, can be run anyway to provide partial benefit if later steps fail
pactl set-default-sink $ADAPTER_SINK_NAME
pacmd unload-module module-combine # not useful first, used to clean things up if run several times
pacmd load-module module-combine sink_name=adapter-soft-volume slaves=$ADAPTER_SINK_NAME
pactl set-default-sink adapter-soft-volume
답변2
4번 항목의 경우 볼륨이 35% 미만일 경우 소리가 나지 않습니다.
같은 문제, 다른 배포판(Ubuntu가 아닌 Fedora). 불행히도 set-default-sink
기존 답변에 설명된 명령 ( ... )은 이 경우 도움이 되지 않습니다.
Fedora 22에서는 구성 파일을 수정하여 이 작업을 수행할 수 있습니다.
구성 파일: /usr/share/pulseaudio/alsa-mixer/paths/analog-output.conf.common
[요소 PCM] 섹션을 찾으세요.
[Element PCM]
switch = mute
volume = merge
override-map.1 = all
override-map.2 = all-left,all-right
"volume = merge" 줄을 다음 두 줄로 바꿉니다.
volume = ignore
volume-limit = 0.01
펄스 오디오 다시 로드:
$ pulseaudio -k
오디오 플레이어를 다시 시작한 후 다시 시도해 보세요.
에서: https://chrisjean.com/fix-for-usb-audio-is-too-loud-and-mutes-at-low-volume-in-ubuntu/
(바라보다오류 1248649.)
그러나 이 해결 방법은 더 이상 Fedora 23(pulseaudio 7.1)에 도움이 되지 않는 것 같습니다. 또는 다른 값을 사용해야 할 수도 있습니다.
이것이 누군가에게 도움이 되기를 바랍니다.