외부 사운드 어댑터가 있는 Pulseaudio: 사운드 손상 문제 해결

외부 사운드 어댑터가 있는 Pulseaudio: 사운드 손상 문제 해결

사운드 카드가 내장된 노트북에 외부 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)에 도움이 되지 않는 것 같습니다. 또는 다른 값을 사용해야 할 수도 있습니다.

이것이 누군가에게 도움이 되기를 바랍니다.

관련 정보