Python Pyaudio输出回调流提供非常不稳定的音频

Python Pyaudio输出回调流提供非常不稳定的音频,python,numpy,scipy,pyaudio,Python,Numpy,Scipy,Pyaudio,我正在写一个程序,它通过Pyaudio接收音频输入,通过fft分析输入,提取主频,然后根据获得的频率生成一个正弦波作为bytestring。所有这些步骤都起作用(有点) 然而,当通过pyaudio回调流播放正弦波时,信号变得非常不稳定。但是,如果我在阻塞流中播放音频,输出声音很好。 这是生成正弦波的函数(请注意,我在这里遗漏了很多相关代码): 所以我认为问题不在这里。 这是流和回调函数(它们显然都位于同一个类中): 在程序的其余部分,我只使用 self.stream2.start_stream(

我正在写一个程序,它通过Pyaudio接收音频输入,通过fft分析输入,提取主频,然后根据获得的频率生成一个正弦波作为bytestring。所有这些步骤都起作用(有点)

然而,当通过pyaudio回调流播放正弦波时,信号变得非常不稳定。但是,如果我在阻塞流中播放音频,输出声音很好。 这是生成正弦波的函数(请注意,我在这里遗漏了很多相关代码):

所以我认为问题不在这里。 这是流和回调函数(它们显然都位于同一个类中):

在程序的其余部分,我只使用

self.stream2.start_stream()
和(.stop_stream())开始播放。如前所述,它本身的播放正常。然而,在创建流的过程中,帧间隔中的起伏度=2**13。在简单的英语中,这意味着,当我增加缓冲区chunksize(如上所述)时,每个“chop”之间的间隔减小,当减小chunksize时,间隔分别增大

这似乎是一个很容易解决的问题,但我似乎无法在任何一篇文章甚至pyaudio的文档中找到答案。我将非常感谢任何帮助,甚至只是一个提示来解决这个问题。 如果您对代码片段感到困惑,请不要犹豫。如果需要的话,我会找到一个链接到我所有代码的方法

多谢各位


(另外:如果这个问题不合适,我会立即删除它)

好的,所以我找到了一种不用线程就用python播放音频的方法。我还改变了程序的范围,这样我在检查振幅时只播放一个wav文件。使用pygame.mixer.Channel(0.play)(pygame.mixer.Sound(文件名),-1)在后台播放wav文件。这还提供了轻松暂停和取消暂停整个频道的选项。然而,我不知道你是否能够像我在og程序中打算的那样玩SinWaves。尽管如此,PyPood和PyDoIP一起使用在同一个程序中,我认为这是成功的。好的,所以我找到了一个不用Python播放音频的方法。我还改变了程序的范围,这样我在检查振幅时只播放一个wav文件。使用pygame.mixer.Channel(0.play)(pygame.mixer.Sound(文件名),-1)在后台播放wav文件。这还提供了轻松暂停和取消暂停整个频道的选项。然而,我不知道你是否能够像我在og程序中打算的那样玩SinWaves。尽管如此,PyGod和PyDoIP一起使用在同一个程序中,我认为这是成功的。
def __init__(self):
        self.stream2 = p.open(format=pyaudio.paInt16, channels=1, rate=fs, output=True,output_device_index=5,frames_per_buffer=2**13,stream_callback=self.actuallyplaystream)

def actuallyplaystream(self,in_data, frame_count, time_info, status):
        return (self.waveData, pyaudio.paContinue)
self.stream2.start_stream()