【问题标题】:ALSA snd_pcm_drop() is not clearing complete bufferALSA snd_pcm_drop() 未清除完整缓冲区
【发布时间】:2013-03-27 09:49:58
【问题描述】:

我正在使用 ALSA API snd_pcm_drop() 来清除缓冲区。但是当我稍后使用snd_pcm_prepare() 继续音频时,我可以听到之前应该清除的部分音频。 当我的 snd_pcm_sw_params_set_stop_threshold() 值很高时,就会发生这种情况。如果我使用较低的值,则不会播放上一个音频会话的部分音频。

这里发生了什么?如何彻底清除缓冲区?

(我是 ALSA 新手)

谢谢

【问题讨论】:

  • 是否可以选择使用 snd_pcm_drain() 而不是 snd_pcm_drop()?
  • 听起来像是驱动程序错误,但如果没有更多信息,这很难说。
  • @Multimedia Mike,根据文档, snd_pcm_drain() 不会立即删除缓冲区。所以对我没用。反正我试过snd_pcm_drain(),但观察结果是一样的。
  • 你有想过这个吗?我在 Raspberry Pi 上看到了同样的情况。

标签: c linux alsa


【解决方案1】:

我用这种方式解决了同样的问题:

snd_pcm_prepare(pcm_handle);
snd_pcm_drop(pcm_handle);

【讨论】:

    【解决方案2】:

    " 可以听到之前应该被清除的部分音频。"因为 ALSA 缓冲区中还有一些音频数据,数据不够大,无法播放。将音频包放入 ALSA 缓冲区可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      相关资源
      最近更新 更多