播放纯音,可变相位流与pyaudio

时间:2016-11-08 23:47:41

标签: python-2.7 raspberry-pi3 pyaudio

我正在建立一个基于Pyaudio的声学消除设备,傅里叶变换和。 c-Media usb声卡。该软件使用生产者/消费者模型进行线程化。

该设备可检测环境中的纯音(读取麦克风音频块),使用傅里叶来检测纯音,到目前为止它非常好用,就像魅力一样。

然而,最后一步变得棘手。我的目标是产生一个100ms的波(正弦波),它保持一定数量的频率周期被消除。

这个波形缓冲区必须连续在一个单独的线程上与Pyaudio一起播放,这也必须一点一点地增加相位,直到检测到环境中音调的幅度下降。这基本上是破坏性干扰。

我的问题是当使用Pyaudio.stream.write()时,缓冲区保持超限,因为我没有IDEA,这个函数在内部做了什么。我尝试了很多组合" frame_buffer_size"和音频长度,无论我做什么,缓冲区都被超限。

理想情况下,不必在每次运行时使用不同的相位重新计算缓冲区...而是,我尝试使用pyaudio读取缓冲区(窗口)的不同部分以开始写入正弦波每次都有不同的起源。

我不知道该怎么做。

长话短说,你会怎么样:

1)创建一个线程,用音频数据连续填充循环缓冲区。 2)创建一个pyaudio消费者线程,连续读取缓冲区而不会溢出。 3)实时操作音量

我的输出数据必须是44100 hz,little endian,16bit signed int。任何提示,建议,参考或建议将不胜感激。

0 个答案:

没有答案