我正在开发一个应用程序,它将根据输入序列生成音频流(PCM)。此声音(音频流)将从头到尾播放。我想要的是在播放生成的声音时,有一些关于输入序列中位置的通知。
示例:
输入为“ABC”,生成的声音对应字母A为3秒,字母B为2秒,字母C为2秒--->共7秒(3 + 2 + 2)。通知意味着在3秒后发送关于“ A传输”的事件,2秒后发送关于“ B传输”的事件,并在2秒后再发送 C传输'事件已发送。
是否有一种经典的方法可以做到这一点,或者这对每个问题都有用吗? (我正在使用带有portaudio框架的C / C ++)
现在我唯一能做到这一点的方法就是当玩家进入流中时,动态生成每个字母的音频数据。
注意:我知道如何在线程和线程间通信之间发送异步事件。如果有一种经典的方式,我只是感兴趣。
由于
答案 0 :(得分:1)
Portaudio没有通过音频设备播放特定事件或特定时间过去时通知您的机制。如果您需要知道特定数量的数据何时通过设备,则需要使用Pa_GetStreamTime轮询设备。
通常,特别是在低延迟设置下,知道数据已写入并将被播放就足够了。在这种情况下,标准(无锁)线程间通信就可以了。