c++ - 带有位置通知的音频流

标签 c++ c audio portaudio

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

例子:

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

有没有一种经典的方法可以做到这一点,或者这是针对每个问题的特定方法? (我在 portaudio 框架中使用 C/C++)

目前,我唯一能做到这一点的方法是在播放器进入流时为每个字母动态生成音频数据。

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

谢谢

最佳答案

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

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

关于c++ - 带有位置通知的音频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10216895/

相关文章:

c++ - 使用转换构造函数进行类到类类型转换的程序崩溃

c++ - Visual Studio "cannot find the path specified"错误

c++ - 在 C++ 中使用 const 成员变量有优势吗

谁能给我解释一下这段代码?

c - 跳过空格并在 C 中一次返回一个单词

android - 启动其他MediaPlayer时重播MediaPlayer

android - 如何使用ImageButton和Exoplayer播放音频

c++ - 关于 glColorMask 及其工作的快速问题

c - 使用 fwrite 将十六进制字节写入文件(小端问题)

java - 如何在Android音乐应用程序中录制多个声音