Debian 和 Ubuntu 等衍生产品中存在一个长期存在的声音问题,即第一次播放数字音轨时:HDMI 输出会错过前一两秒,或者以低音量“模糊”播放短音,或者根本无法播放非常短的声音。后续播放通常可以正常进行,至少在接下来的 5 秒到 20 分钟内 - 然后问题再次出现。它发生在所有声音应用程序和文件类型中。因为它对最短的声音影响最严重,所以它对于桌面警报或“事件”声音以及终端铃声(Xfce 中的另一个麻烦)尤其令人讨厌。可以通过注销并再次登录来强制解决此问题,或者如果您的计算机连接到 KVM,可能只需将 KVM 切换到另一台计算机并返回即可。自从 Debian 6 Squeeze 到 Xubuntu 20.04 LTS 以来,我在几台机器上都遇到了这个问题,包括 Intel 和 AMD 芯片组。这不是 PulseAudio - Debian 机器只使用 ALSA,没有 PulseAudio。它存在于 Debian 的 Gnome 2、Ubuntu 的 Gnome 3 和 Xubuntu (Xfce 4) 中。模拟输出不受影响。
背景 许多人似乎已经通过各种方式禁用了 Intel HDA 驱动程序的“省电”功能来解决了类似的问题,但对我来说这些方法都不起作用。该问题似乎与播放开始/结束时的咔嗒声或爆音有关 - 我没有遇到过这种情况。但是,我的问题似乎也源于启动音响系统的延迟。其他人通过播放连续的静音来保持系统打开,从而解决了这个问题,例如:声音输出开始延迟和https://unix.stackexchange.com/questions/362223/short-audio-playback-is-muted-requires-warming-up-or-secondary-audio-in-backgro- 但这对我来说还是不起作用。
答案1
在 Debian、Ubuntu 和 Xubuntu 上什么对我有用
- 我需要创建一个简短的“听不见”的声音文件,其中包含一些内容(完全静音的音轨不起作用),但声音太小而听不见(下面有更多介绍)。它可以是 .wav(由 播放
aplay
)或 .ogg(由 播放paplay
)。通过注销 + 登录进行测试,然后执行以下操作:-
$ aplay path/to/inaudible.wav; paplay /usr/share/sounds/freedesktop/stereo/bell.oga
如果在“听不见”之后出现“铃声”警报声并能正常播放,则表示操作成功。
然后可以将其放入守护进程脚本中,例如:(由 root 用户执行)
/usr/local/bin/SoundKeepAlive.sh
每 4 秒重复一次:-#!/bin/bash while true do aplay -q path/to/inaudible.wav sleep 4 done
确保这是可执行的。
然后可以通过创建启动/自动启动作业在图形登录时自动启动守护进程: - Xfce:应用程序>设置>会话和启动> Appn AutoStart;或 Gnome 3:应用程序>启动应用程序,使用以下命令:
bash -c "/usr/local/bin/SoundKeepAlive.sh"
注销并登录。然后执行
$ ps -fwe | grep SoundKeepAlive | grep -v grep
这应该显示守护进程现在正在运行。$ paplay /usr/share/sounds/freedesktop/stereo/bell.oga
现在应该可以正常播放。如果需要为多个用户运行,请移动(以 root 身份)自动启动的“桌面”文件
~/.config/autostart/SoundKeepAlive.desktop
并/etc/xdg/autostart/
更改其权限以匹配那里的其他权限。关于进一步测试的最后一点说明:登录和退出(或通过 KVM 切换)后等待 5 秒钟再进行测试,以确保守护进程至少启动一次。
创建“听不见”的声音文件
我用的是https://audio-joiner.com/网站(其他网站也可用),并开始使用/usr/share/sounds/gnome/default/alerts/sonar.ogg
该网站不支持“ogg”格式,因此我首先创建了一个 wav:-
$ oggdec -o sonar.wav /usr/share/sounds/gnome/default/alerts/sonar.ogg
我上传了 sonar.wav,然后将左端滑块移动到大约一半的位置(以获得最低音量的声音内容)。然后我使用“音频工具”>“更改音量”将音量降低 90%,使其听不见。我将其下载为“inaudible.wav”。我还制作了一个 ogg 版本:-
$ ffmpeg -i /path/to/inaudible.wav -acodec libvorbis /path/to/inaudible.ogg
我第一次使用这个文件时就成功了,但如果不成功,可能需要试验一下持续时间和音量。我以 root 身份将其放入/usr/local/share/sounds/
所有用户中。
答案2
我能够使用aplay /dev/zero
(可选-f cd
)解决这个问题,只需让它“播放”一个空的十六进制 00 流即可。仅此一点就足以防止短音播放被切断并开始播放长音轨。