audio - 如何及时填充ALSA缓冲区

标签 audio synchronization real-time alsa

ALSA 使用写函数填充循环缓冲区,然后声卡播放样本并清空缓冲区。应用程序负责用流的下一个片段重新填充缓冲区。如果应用程序填充缓冲区以减慢音乐中的间隙。如果应用程序将其填充到快速但尚未播放的样本将被新样本覆盖,因为缓冲区是循环的。

我的问题是我怎么知道什么时候应该重新填充缓冲区以及填充多少。是否有一些事件是由 alsa 或其他技术定义的?

最佳答案

当 PCM 设备处于阻塞模式(默认)时,snd_pcm_write*() 将等待所有字节实际写入缓冲区。未播放的样本永远不会被覆盖。

当 PCM 设备处于非阻塞模式时,snd_pcm_write*() 将返回实际写入了多少帧(如果缓冲区已满,则返回 -EAGAIN)。要等待一些空间变得可用,请使用 poll(),它允许使用等待多种类型事件的事件循环。 (有关详细信息,请参阅 that answer。)

关于audio - 如何及时填充ALSA缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39214927/

相关文章:

android - 如何正确设置音频虚拟器

java - 同步线程池ExecutorService

facebook - 如何订阅 Facebook 页面墙的实时更新

sockets - 创建实时应用程序的技术是什么?

audio - 为音效实现 "best match"

c# - UWP Metronome App - MediaPlayerElement 传输控制和性能

android - 2个带声音的按钮

Go同步和并发模型

.net - .Net等效于x86 ASM命令XADD

java - iOS - JAVA 实现实时数据同步的最佳方法