내 ArchLinux PC와 ArchLinux MacBook에서 이런 일이 발생하는 것을 발견했습니다. 짧은 오디오를 통해 앱 알림을 받아야 하는데 알림 앱의 문제가 아니라 시스템 자체의 문제이고 매우 다른 두 시스템에서 발생한다는 것을 알게 되었습니다.
짧은 오디오 파일을 재생할 때 paplay /usr/share/sounds/freedesktop/stereo/message.oga
처음 재생할 때 소리가 들리지 않는 것 같습니다.
순서대로 다시 재생하면 소리가 들리고 올바르게 재생되며 항상 순서대로 반복합니다.
10초 정도 기다렸다가 다시 재생하면 조용해집니다(처음처럼). 예열될 때만 소리가 납니다.
같은 일이 발생 aplay /usr/share/sounds/alsa/Front_Left.wav
하지만 피치가 더 길기 때문에 파일 시작 부분에서만 문제가 발생합니다. 처음에는 "t left"만 들었고 "fron"은 빠졌습니다. 그러다가 "왼쪽 앞"이라는 소리가 완전하고 명확하게 들렸습니다. 10초만 기다리면 다시 "떠납니다".
미디어 플레이어의 백그라운드에서 음악 파일을 재생하면 이 문제가 발생하지 않습니다. 이는 컴퓨터에서 소리가 재생되지 않는 경우에만 발생합니다.
이 문제를 어떻게 해결하나요? (컴퓨터가 항상 예열 상태를 유지하도록 배경 데몬에서 들리지 않는 소리를 재생하는 것 외에도)
alsa만 사용할 때 문제가 지속되는 관련 테스트 세션:
~ ❯❯❯ sudo mv /usr/bin/pulseaudio /usr/bin/pulseaudio.bak
~ ❯❯❯ pulseaudio.bak --kill
W: [pulseaudio.bak] main.c: Couldn't canonicalize binary path, cannot self execute.
~ ❯❯❯ paplay /usr/share/sounds/freedesktop/stereo/message.oga
Connection failure: Connection refused
pa_context_connect() failed: Connection refused
~ ❯❯❯ ps axu | grep -i pulse
francis+ 31563 0.0 0.0 10796 2144 pts/2 S+ 14:35 0:00 grep --color=auto -i pulse
~ ❯❯❯ aplay -D plughw:0,7 /usr/share/sounds/alsa/Front_Left.wav
Playing WAVE '/usr/share/sounds/alsa/Front_Left.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
~ ❯❯❯ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: Generic Analog [Generic Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: Generic Digital [Generic Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
~ ❯❯❯ lspci -nn | grep -i audio
00:1f.3 Audio device [0403]: Intel Corporation Device [8086:a2f0]
고쳐 쓰다
Linux 커널 4.11.2 이후,ALC1220 코덱은 다음 위치에 있습니다.:
~ ❯❯❯ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC1220 Analog [ALC1220 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC1220 Digital [ALC1220 Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 8: HDMI 2 [HDMI 2]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 9: HDMI 3 [HDMI 3]
Subdevices: 1/1
Subdevice #0: subdevice #0
헤드폰을 연결하고 aplay
다른 방법만을 사용하여 문제를 재현했습니다.
~ ❯❯❯ aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Left.wav
~ ❯❯❯ aplay -D plughw:0,0 /usr/share/sounds/purple/alert.wav
~ ❯❯❯ aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Left.wav
~ ❯❯❯ aplay -D plughw:0,0 /usr/share/sounds/purple/alert.wav
...
서로 다른 디렉터리에 있는 서로 다른 오디오 파일을 재생해야 하는데, 하나를 재생한 다음 다른 파일을 재생하면 두 재생이 모두 처음에 잘립니다. 재생 사이의 간격은 중요하지 않습니다. 파일이 한 번 재생되면 동일한 디렉터리에 있는 파일을 재생해도 문제가 재현되지 않으며 "냉각"될 때까지 기다리지 않습니다(1분 동안 기다렸습니다). paplay
펄스 오디오가 켜져 있을 때도 마찬가지입니다. HDMI를 통해 재생할 때 두 테스트 사례 모두에서 재현 가능했습니다.
업데이트 2
나는 게으르기 때문에 아직 ALSA 개발자에게 이를 보고하지 않았습니다.사용자 시스템 장치:
[Unit]
Description=Continuous silence
[Service]
ExecStart=/usr/bin/play -qn
[Install]
WantedBy=default.target
에 저장 ~/.config/systemd/user/continuous-silence.service
하고 를 사용하여 활성화하면 됩니다 systemctl --user enable continuous-silence
.
답변1
사운드를 출력하기 전에 수신 사운드 시스템이 "깨어나야" 한다고 가정하고, 그렇게 합니다.뒤쪽에사운드 데이터의 초기 배치를 수신하고 첫 번째 배치를 폐기합니다. 수신 사운드 시스템에서 이 문제를 해결할 수 없는 경우 해결 방법은 예를 들어 다음을 사용하여 무음을 지속적으로 출력하는 것 play
입니다 sox
.
play -n
편집하다
Windows에서 실행 중이고 사운드 카드("Intel Corporation Device")나 코덱("Universal")을 이름으로 식별할 수 없다는 추가 정보에 따르면 일부 드라이버 문제일 수도 있습니다. 코덱에 "KAE(Keep Alive Enable)" 비트가 있습니다. 아마도 믹서 컨트롤을 통해 설정해야 할 수도 있지만 이에 대해 충분히 알지 못합니다.
ALSA 개발자에게 버그를 제출하고 lspci -nn
정보도 제공합니다 cat /proc/asound/card*/codec\#*
. (후자의 출력을 페이스트빈에 넣고 내가 볼 수 있도록 질문을 편집할 수도 있습니다.)
답변2
잭 오디오 연결 키트와 펄스 오디오 잭(베어 펄스 오디오 대신)을 사용하기 시작했을 때 또 다른 수정 사항이 발생했습니다.
답변3
낮은 대기 시간 오디오를 설정하는 방법에 대한 Wiki를 따라 수정되었습니다.
- 위키의 섹션 1.1을 따르세요.https://wiki.archlinux.org/title/Professional_audio
- linux-rt AUR 커널을 설치하지 마십시오.
- 섹션 1.1을 완료한 후 재부팅하면 지연이 없어집니다.
- 그렇지 않다면 나머지 Wiki를 계속 진행하여 JACK을 구성하세요.