使用ALSA api - 在缓冲区填满之前,声音不会启动

时间:2010-10-14 01:32:31

标签: c linux api buffer alsa

我正在使用的应用程序仅在产生足够的声音后播放声音。假设我单击鼠标10次,没有声音,然后在那10次点击后我会听到10个鼠标点击声音(例如)

我发现缓解此问题的唯一方法是设置一个非常短的缓冲区大小,我不想这样做。

我一直在尝试使用start_threshold sw参数,但这没有效果。

在写入指定数量的缓冲区大小的数据时,我似乎应该能够强制它播放,这是正确的吗?这就是start_threshold似乎表明的,因为句点长度可以比​​缓冲区短得多(或者我在例子中看到过)。

我的代码是这样的:

调用HW参数设置

获取带数据的字节数组

循环并写入缓冲区,每次加一个字节偏移量

调用start(这应该强制它回放,对吧?)

如果有-EPIPE,请调用prepare并将0添加到offset(我认为这是玩游戏的唯一时间。)

谢谢!

0 个答案:

没有答案