如何解决Pyaudio输出回调流提供震撼的音频
我正在编写一个程序,该程序通过Pyaudio进行音频输入,通过fft分析输入,提取主导频率,然后根据所获得的频率生成正弦波作为字节串。所有这些步骤都可以工作(有点)。
但是,通过pyaudio回调流播放正弦波时,信号变得非常断断续续。如果我以阻塞流播放音频,则输出声音很好。 这是产生正弦波的函数(请注意,我在这里省略了很多周围的代码):
self.waveData = b'' #needs to be reset here,otherwise content of this grows exponentially i guess
for i in range(0,int(fs * 0.01)): #make just small sample of 0.1 duration
pcmValue = int(volume*np.sin(2*np.pi*frequency*i/fs)) #i replaces self.x
self.waveData += struct.pack('h',pcmValue)
self.waveData+=int((duration/0.01))*self.waveData[0:len(self.waveData)] #just multiply content of bytestring with duration/samplesize(duration/0.02)
因此,我认为问题不在于此。 这是流和回调函数(显然它们都位于同一个类中):
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()
和(.stop_stream())开始播放。如前所述,回放本身可以正常进行。但是,frames_per_buffer = 2 ** 13的时间间隔中的断续性在创建流时设置。用简单的英语来说,这意味着,当我如上所述增加buffer-chunksize时,每个“ chop”之间的间隔都会减小,而在减小chunksize时则分别增大。
这似乎是一个很容易解决的问题,但是我似乎在任何SO帖子甚至pyaudio的文档中都找不到答案。我将不胜感激,对于解决此问题的任何帮助甚至只是提示。 请毫不犹豫地询问您是否对代码段感到困惑。如果需要,我将找到一种方法链接到我的所有代码。
谢谢
(此外:如果这个问题不合适,我会立即将其删除)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。