ALSA 应用程序开始时有噪音

ALSA 应用程序开始时有噪音

我有用于捕获设备的 ALSA 驱动程序,它与 VLC 配合得很好。当我尝试使用自己的应用程序进行捕获和渲染时,出现了一些问题。问题是:当我开始播放时,开始时有一些噪音,中间的音频不连续。不连续意味着中间有一些音频帧被丢弃。它看起来像是正弦波的剪切声音,并且它继续播放。我试过 snd_pcm_drop 和 snd_pcm_drain,但没有用。

对于渲染音频,我使用 aplay.c 文件作为参考。但是,使用 play.c 代码时,一开始就会出现噪音,为了交叉检查,我转储了应用程序缓冲区,然后使用 aplay 实用程序播放。应用程序缓冲区中的内容很好。我也用 FFPlay 应用程序确认了这一点。FFPlay 播放时也没有噪音。aplay参考链接,并且我的音频渲染与参考链接类似。

问题:

你能告诉我为什么一开始播放音频时会有噪音吗

答案1

您的代码尝试从 PCM 捕获设备读取数据(然后可能处理数据),然后将数据写入 PCM 播放设备。

一开始,当您读取了 100 个样本,然后写入 100 个样本并开始播放,然后等待捕获接下来的 100 个样本时,当这些样本可用时,播放缓冲区将完全为空。而且由于您的代码不是无限快的,播放设备将尝试播放不存在的样本。这将导致欠载或错误数据(取决于您如何配置停止阈值)。

为了确保在代码执行时有足够的样本可供播放,你应该捕获尽可能多的数据,并将其写入播放缓冲区,启动播放设备。换句话说,将播放设备的启动阈值设置为缓冲区大小。

并且没有理由改变停止阈值的默认值。

相关内容