我计划用Python实现一个类似DSP的信号处理器。它应该通过ALSA捕获音频片段,对其进行处理,然后通过ALSA播放。在
为了开始工作,我写了以下代码(非常简单)。在import alsaaudio
inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE, alsaaudio.PCM_NORMAL)
inp.setchannels(1)
inp.setrate(96000)
inp.setformat(alsaaudio.PCM_FORMAT_U32_LE)
inp.setperiodsize(1920)
outp = alsaaudio.PCM(alsaaudio.PCM_PLAYBACK, alsaaudio.PCM_NORMAL)
outp.setchannels(1)
outp.setrate(96000)
outp.setformat(alsaaudio.PCM_FORMAT_U32_LE)
outp.setperiodsize(1920)
while True:
l, data = inp.read()
# TODO: Perform some processing.
outp.write(data)
问题是,音频“结巴”而不是无间隙。我试着用PCM模式做实验,把它设为PCM_ASYNC或PCM_NONBLOCK,但问题仍然存在。我认为问题是“两个后续调用之间”的样本输入读取()“丢失。在
有没有一种方法可以在Python中“连续地”捕获音频(最好不需要太“特定的”/“非标准”的库)?我希望信号总是“在后台”被捕获到某个缓冲区,从中我可以读取一些“瞬时状态”,而音频则进一步被捕获到缓冲区中,即使