renhl252 2021-01-26 17:17 采纳率: 0%
浏览 5

ALSA Sink fragment

1.ALSA sink每次获取数据量大小的来源

2. snd_pcm_avail_update返回的数据量和设置的alsa sink fragment size并不一致是什么原因

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 14:14
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在使用alsa sink时,snd_pcm_avail_update函数用于更新pcm设备可用缓冲区的大小。这个值是根据当前系统中可用的音频资源(例如麦克风、扬声器等)来计算的。

    snd_pcm_get_avail_size() 函数则用于获取当前正在使用的alsa sink的可用缓冲区大小。这个值通常会比snd_pcm_avail_update() 返回的值大一些,因为snd_pcm_get_avail_size() 函数还考虑了已经分配给其他alsa sink的缓冲区大小。

    关于为什么两次获取到的大小不一致的问题,这可能是由于以下几种情况之一:

    1. 您可能没有正确地设置了alsa sink的fragment size。您应该确保您的alsa sink的fragment size与snd_pcm_get_avail_size()返回的值相匹配。
    2. 如果您的alsa sink的fragment size小于snd_pcm_get_avail_size()返回的值,那么snd_pcm_avail_update()可能会多次调用,直到它达到设定的最大容量为止。这样就可能导致snd_pcm_get_avail_size()返回的值大于实际可用的缓冲区大小。
    3. 音频设备可能在运行过程中被修改或关闭,导致snd_pcm_avail_update()无法获取到最新的状态信息。

    为了更精确地了解问题的原因,请提供更多的上下文信息,比如您的alsa sink的具体配置和代码实现。

    评论

报告相同问题?