0

我正在开发一个应用程序,它将根据输入序列生成音频流 (PCM)。此声音(音频流)将从头到尾播放。我想要的是在播放生成的声音时有一些关于输入序列中位置的通知。

例子:

我的输入为“ABC”,生成的声音对应于字母 A 3 秒,字母 B 2 秒和字母 C 2 秒 ---> 总共 7 秒(3+2+2)。该通知意味着在 3 秒后发送有关“ A 发送”的事件,2 秒后发送有关“ B 发送”的事件,再过 2 秒发送“ C 发送”事件。

有没有这样做的经典方法,或者这对每个问题都是特定的?(我使用 C/C++ 和portaudio框架)

现在,我这样做的唯一方法是在播放器进入流时动态生成每个字母的音频数据。

注意:我知道如何在线程之间发送异步事件和线程间通信。我只是对是否有这样做的经典方法感兴趣。

谢谢

4

1 回答 1

1

当通过音频设备播放特定事件或经过特定时间时,Portaudio 没有通知您的机制。如果您需要知道特定数量的数据何时通过设备,您需要使用Pa_GetStreamTime轮询设备。

通常,尤其是在低延迟设置下,知道数据已写入并将被播放就足够了。在这种情况下,标准(无锁)线程间通信就可以了。

于 2012-04-19T17:54:45.513 回答