在 Debian、Ubuntu 和 Xubuntu 上什么对我有用

在 Debian、Ubuntu 和 Xubuntu 上什么对我有用

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 上什么对我有用

  1. 我需要创建一个简短的“听不见”的声音文件,其中包含一些内容(完全静音的音轨不起作用),但声音太小而听不见(下面有更多介绍)。它可以是 .wav(由 播放aplay)或 .ogg(由 播放paplay)。通过注销 + 登录进行测试,然后执行以下操作:-

$ aplay path/to/inaudible.wav; paplay /usr/share/sounds/freedesktop/stereo/bell.oga

如果在“听不见”之后出现“铃声”警报声并能正常播放,则表示操作成功。

  1. 然后可以将其放入守护进程脚本中,例如:(由 root 用户执行)/usr/local/bin/SoundKeepAlive.sh每 4 秒重复一次:-

     #!/bin/bash
    
     while true
     do
         aplay -q path/to/inaudible.wav
         sleep 4
     done
    

确保这是可执行的。

  1. 然后可以通过创建启动/自动启动作业在图形登录时自动启动守护进程: - Xfce:应用程序>设置>会话和启动> Appn AutoStart;或 Gnome 3:应用程序>启动应用程序,使用以下命令:bash -c "/usr/local/bin/SoundKeepAlive.sh"

  2. 注销并登录。然后执行$ ps -fwe | grep SoundKeepAlive | grep -v grep 这应该显示守护进程现在正在运行。 $ paplay /usr/share/sounds/freedesktop/stereo/bell.oga现在应该可以正常播放。

  3. 如果需要为多个用户运行,请移动(以 root 身份)自动启动的“桌面”文件~/.config/autostart/SoundKeepAlive.desktop/etc/xdg/autostart/更改其权限以匹配那里的其他权限。

  4. 关于进一步测试的最后一点说明:登录和退出(或通过 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 流即可。仅此一点就足以防止短音播放被切断并开始播放长音轨。

相关内容