![当 alsa/pulseaudio 闲置正好 5 秒时总是发出流行声?](https://linux22.com/image/139484/%E5%BD%93%20alsa%2Fpulseaudio%20%E9%97%B2%E7%BD%AE%E6%AD%A3%E5%A5%BD%205%20%E7%A7%92%E6%97%B6%E6%80%BB%E6%98%AF%E5%8F%91%E5%87%BA%E6%B5%81%E8%A1%8C%E5%A3%B0%EF%BC%9F%20.png)
aplay
每当用户与界面交互时,我都会播放简短的音效。
我注意到,我可以以任何顺序播放任何声音,只要两个声音在 5 秒内播放,过渡就很清晰,但间隙超过 5 秒,就会发出可怕的爆裂声!
请注意,我的所有声音文件的持续时间均小于 1 秒。
为了解决这个问题,我所做的就是创建一个 5 秒长的低采样率silence.wav 文件,该文件在 .sh 脚本中循环(这绝对不是一个长期解决方案):
静默暴力破解:
#!/bin/bash
while [ 1 ] ; do
aplay sounds/blank.wav
done
现在,即使有的话,爆裂声也很少了。
所以我不明白的是为什么在这 5 秒内发生了一些变化会导致爆裂?如何将音频配置为在长时间延迟后播放声音时保持不会爆音的状态?
我已经尝试过 /etc/pulse/default.pa 和 /etc/pulse/daemon.config 但进展为零。
请注意,我使用的是单核树莓派,但如果静默暴力破解有帮助,那么还有希望吗?
[更新]
我遇到了一种稍微优雅的方法来持续对设备进行强力静音:
aplay /dev/zero
Playing raw data '/dev/zero' : Unsigned 8 bit, Rate 8000 Hz, Mono
但由于某种原因,它会产生高频音调。有可能有类似的方法来做到这一点吗?
[更新]
aplay -r 8000 -f S16_LE /dev/zero
这确实有效,但需要不断运行线程以保持开放状态,从而产生一些开销。但现在的音频非常干净。
[编辑]
此功能与pulseaudio模块 module-suspend-on-idle 有关。也可以禁用该模块。首先尝试临时:
pactl unload-module module-suspend-on-idle
如果您满意,则可以在pulseaudio配置文件中临时设置此设置。