我正在建立一个基于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。任何提示,建议,参考或建议将不胜感激。