
Я заметил, что это происходит как на моем ArchLinux PC, так и на моем ArchLinux MacBook. Мне нужно получать уведомления приложений с помощью коротких звуковых сигналов, и я выяснил, что это не проблема из-за уведомлений приложений, а самой системы, и это происходит в обеих системах, которые сильно различаются.
Когда я проигрываю короткий аудиофайл, paplay /usr/share/sounds/freedesktop/stereo/message.oga
я как будто не слышу его при первом воспроизведении.
Если я проигрываю его снова в определенной последовательности, я слышу его, и он проигрывается правильно, я всегда повторяю его в определенной последовательности.
Если я подожду около 10 секунд, чтобы воспроизвести его снова, звук будет отключен (как в начале): он будет звучать только во время разогрева.
То же самое происходит с aplay /usr/share/sounds/alsa/Front_Left.wav
, но поскольку это более длинный тон, проблема возникает только в начале файла. Сначала я слышу только "t left", пропуская "fron". Затем я слышу его полностью и ясно: "front left". Если я подожду 10 секунд, снова "t left".
Проблема не возникает, если я проигрываю музыкальный файл в фоновом режиме в медиаплеере. Она возникает только тогда, когда компьютер не воспроизводит звук.
Как это исправить? (кроме того, чтобы ПК постоянно воспроизводил неслышимый звук в фоновом режиме, чтобы поддерживать его в прогретом состоянии)
Соответствующий тестовый сеанс, в котором проблема сохраняется только при использовании 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
при включении PulseAudio. При воспроизведении через HDMI воспроизводится в обоих тестовых случаях.
ОБНОВЛЕНИЕ 2
Я ленивый и пока не сообщил об этом разработчикам ALSA, но я создалпользовательский блок systemd:
[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
from sox
:
play -n
Редактировать
С дополнительной информацией о том, что он работает на Windows, и информацией о том, что ни звуковая карта ("Intel Corporation Device"), ни кодек ("Generic") не распознаются по имени, также возможно, что это какая-то проблема с драйвером. В кодеке есть бит "keep alive enable" (KAE), возможно, его нужно установить, возможно, с помощью управления микшером, но я недостаточно знаю об этом.
Сообщите об ошибке разработчикам ALSA, предоставьте lspci -nn
информацию и вывод cat /proc/asound/card*/codec\#*
. (Вы также можете поместить вывод последнего в pastebin и отредактировать свой вопрос, указав ссылку, чтобы я мог взглянуть).
решение2
Еще одно решение для меня пришло, когда я начал использовать комплект Jack Audio Connection Kit в сочетании с PulseAudio-Jack вместо простого PulseAudio.
решение3
Исправлено с помощью вики-инструкции по настройке звука с низкой задержкой
- Следуйте разделу 1.1 на викиhttps://wiki.archlinux.org/title/Профессиональное_аудио
- Не устанавливайте ядро linux-rt AUR
- Перезагрузка после завершения раздела 1.1 должна устранить задержку.
- Если нет, то продолжайте читать остальную часть вики и настраивать JACK.