Linux(Debian)의 HDMI 오디오 출력에서 ​​균열 및 팝 현상이 발생합니다.

Linux(Debian)의 HDMI 오디오 출력에서 ​​균열 및 팝 현상이 발생합니다.

문제 설명

Linux 설치에서 오디오가 제대로 작동하도록 노력하고 있습니다. 그러나 오디오 신호가 0이 될 때마다 약 0.5초 동안만이라도 다시 돌아올 때 스피커에서 딸깍/팝 소리가 들립니다. 이는 캐릭터가 말을 시작하거나 멈출 때마다 그리고 음악 재생이 일시 중지되거나 다시 시작될 때마다 클릭 소리가 발생하는 지속적인 배경 소음 없이 소스를 들을 때 가장 두드러집니다. 전형적인 현대 영화는 결코 완전히 무성하지 않지만 토크쇼나 PTT(Push-to-Talk) 음성 통신 소프트웨어와 같은 특정 유형의 콘텐츠는 완전히 망가집니다.

시스템 하드웨어 및 소프트웨어 설정

Intel i5 프로세서를 탑재한 미디어 PC를 만들었습니다. 마더보드는 ASUS Prime B560M-A이고, 디스플레이는 LG CX 시리즈 OLED입니다. 저는 Debian 테스트(Bullseye)와 Debian의 기본값인 Pulseaudio를 사용하고 있습니다.

사운드는 HDMI1을 통해 전송되고 TV는 이를 오디오 리턴 채널(ARC)을 통해 Harman Kadron AVR(171S)로 전달합니다. Pulseaudio 출력 모드는 "HDMI1 디지털 스테레오"로, 다중 패스스루 오디오 형식을 지원합니다.

문제 격리 및 추정 원인

데비안의 오디오 시스템 절전(또는 기타) 기능은 완전한 침묵이 감지되자마자 오디오 신호를 차단하는 것 같습니다. 이로 인해 AVR이 오디오 출력을 끄고 클릭 소리가 발생합니다. 소리가 다시 나올 때도 마찬가지입니다.

AVR의 오디오 형식 표시기를 보면 이를 확인할 수 있습니다. 앰프에서 소스로 전환하면 수신 중인 형식이 표시됩니다. 신호가 있으면 AVR은 "2/0/0 48kHz ARC"(일반 PCM의 경우) 또는 3/2/1 48kHz ARC(DTS의 경우)를 표시합니다. 데비안에서는 볼륨이 0일 때 언제든지 ARC 입력으로 전환하면 수신기에 신호가 전혀 없음을 나타내는 "---ARC"가 표시됩니다. 신호가 실제로 0에 도달하자마자 종료되는 것처럼 보입니다.

이것이 Linux/Debian 문제인지 어떻게 알 수 있나요?

이 시점에는 아직 옵션이 있습니다. 0만 수신되면 AVR 자체가 종료될 수 있으며, 0만 수신되면 TV가 신호 전송을 중단했을 수도 있습니다. 그러나 가장 간단한 통과 모드의 TV를 사용하여 Playstation 4 콘솔을 통해 동일한 설정을 테스트할 수 있었고 문제는 데비안에서만 발생했습니다.

똑같은 상황에서 PS4에 소리가 전혀 들리지 않으면 AVR은 여전히 ​​"2/0/0 ARC"를 보고합니다. 오디오 재생이 중지되거나 재개될 때 딱딱거리는 소리나 펑 소리가 나지 않습니다. 즉, PS4에서는 오디오 신호가 완전히 중단되지 않습니다.

나는 무엇을 시도했는가?

나는 이 사이트와 인터넷 전체에서 비슷한 문제를 가진 사람들을 검색했고 다음과 같은 제안을 찾았습니다.

값이 0으로 설정되었습니다.

/sys/module/snd_hda_intel/parameters/power_save

N으로 설정되었습니다.

/sys/module/snd_hda_intel/parameters/power_save_controller

다음 변경 사항은 영구적으로 적용되었습니다.

root@mycomputername|/etc/modprobe.d:cat audio_disable_powersave.conf
options snd-hda-intel power_save=0 power_save_controller=N

일부 장소에서는 펄스 오디오의 무음 유휴 수신기를 껐습니다.

/etc/pulse/default.pa
/etc/pulse/system.pa

이 줄을 주석 처리하면:

### Automatically suspend sinks/sources that become idle for too long
#load-module module-suspend-on-idle

이 변경 후 Pulseaudio가 다시 시작되었습니다.

또한 HDMI 출력 모듈에서 자동 스트리밍을 Y로 설정하여 활성화했습니다.

/sys/module/snd_hda_codec_hdmi/parameters/enable_silent_stream

위의 모듈 설정과 동일한 방식으로 영구적으로 만들어집니다.

또한 Alsamixer의 "자동 음소거 모드"를 비활성화했지만 헤드폰 잭과 관련이 있다고 생각하므로 아무런 효과가 없어야 합니다.

일부 소식통은 또한 신호를 유지하기 위해 aplay를 통해 0 문자열을 보낼 것을 제안합니다. 나는 다음을 사용하여 이 작업을 수행했습니다.

aplay /dev/zero -f S16_LE

위의 어느 것도 효과가 없었습니다. 일시 중지를 누르면 항상 즉시 클릭 소리가 나고, 출력에 침묵이 있으면 항상 즉시 클릭 소리가 생성됩니다. 그 후 AVR 신호 패턴을 확인하면 항상 신호가 전혀 수신되지 않는 것으로 나타났습니다.

나는 완전히 정신이 나갔고 다른 방법을 시도할 방법이 생각나지 않으며 실제로 이 문제를 알아낸 사람의 도움에 진심으로 감사드립니다.

답변1

결국 만족스러운 답을 찾지 못했고, AVR의 자동화 때문인지 제 상황에 맞는 좋은 해결책도 없는 것 같습니다. PS4가 신호를 활성 상태로 유지할 수 있는 이유는 확실하지 않지만 최소한 다음 기능은 동일한 효과를 갖습니다.

/usr/bin/play -qn synth sin 10 gain -191

내 스피커의 감도와 낮은 차단 주파수보다 낮습니다. 이 기능이 활성화되면 팝 소리를 듣지 않고 음악을 일시 정지할 수 있습니다.

(편집): 아무도 더 나은 솔루션을 제공하지 않았으므로 이 답변을 받아들입니다. 또한 답변을 보다 일반적으로 유용하게 만들려면 신호 출력 데이터 형식이 32비트가 아닌 16비트인 경우 다음을 사용한다는 점에 유의할 가치가 있습니다.

/usr/bin/play -qn synth sin 10 gain -95

관련 정보