ALSA:如何判断声音何时播放完毕

我有一个c ++对象,它接受声音请求并用ALSA播放它们。 有线程处理声音请求。 有些声音是周期性的,在wav文件内容写入ALSA库之后会重新安排。 有什么方法可以查明所有数据何时播放? 函数snd_pcm_writei是一个阻塞写入函数,但并不一定意味着该文件已被播放。

我正在考虑的一个选项是在播放每个声音文件后调用snd_pcm_drain,然后在播放下一个文件时调用snd_pcm_prepare。 这会是一个很好的解决方案吗? 或者这是低效的?

更新: “排水解决方案”似乎工作,但效率不高。 这些调用需要一段时间才能返回(也许它会清理一些资源),并增加了程序的延迟时间。 当我连续播放许多小文件时,延迟效果最佳。 每个文件之间可以听到几秒钟的静音; 这是执行snd_pcm_drain。


可能不是正确的(我在这方面做了很少的工作),但是从这里查看ALSA文档:http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html

它看起来像snd_pcm_status_t持有的状态信息,应该给你一个流是否正在处理数据的指示。

链接地址: http://www.djcxy.com/p/48381.html

上一篇: ALSA: How to tell when a sound is finished playing

下一篇: How to uninstall Netbeans 6.9 on Windows 7?