我正在寻求帮助解决迄今为止我无法解决的问题...... 我使用的是Raspberry Pi 3 Model B,我在其上插入了一个插入XLR麦克风的Focusrite Scarlett 2i2 USB声卡。例如,整个事情在Audacity上工作得很好。它可以录制和/或播放声音。 现在我想使用这个设置在Python中录制流并用FFT函数对其进行分析,以实时估计我正在收听的声音的音高。当我在Raspberry上使用Python 2.7运行代码时,它可以工作4 5秒,然后停止并出现以下异常:
IOError: [Errno Input overflowed] -9981
然后它崩溃了python控制台。
请注意,此代码在基本计算机上运行正常,但我需要它才能在Pi3上运行...
我想知道是不是线程导致数据溢出问题,所以我回到了由Pyaudio发布的非常基本的代码到" test"设置。所以我运行下面的代码,发现自己面临完全相同的问题,并出现同样的错误。
import pyaudio
import wave
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print("* recording")
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print("* done recording")
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
但我有一个想法,为了减少CHUNK的大小,我发现在1010以上的几次运行之后,出现了异常。
所以我的问题很简单,有人知道这是从哪里来的吗?如果我想要或需要,为什么我的CHUNK大小不能达到1024?为什么它在电脑上正常运行,而不是在Pi上?有解决方案吗?
非常感谢, 爱德华
答案 0 :(得分:0)
不确定您的问题是否可以按照您的措辞明确回答。希望我能指出你的几个方向。我一直在使用我的Model 3做一些音频流工作,所以我对你的例子非常感兴趣。
Pi和计算机之间的最大区别是CPU速度和内存 - 1.2GHz cpu和1GB Ram的规格要比任何低端计算机低得多。使用解释语言进行流处理可能会增加
看起来你正在将所有录音记录到内存中 - 然后在最后写出来。我想象出现溢出的地方。我认为块大小只是一个红色的鲱鱼。
如果您要坚持使用Python处理,我认为更好的选择是在收到帧数据时进行写入。
在我看来,我认为更好的选择是直接使用arecord或ffmpeg / avconv将流直接记录到文件中。但我非常感兴趣,看看你是否可以用Python做到这一点
你安装了什么O / S - Raspbian或Raspbia Lite?
EDIT
只是为了感兴趣 - 您是否尝试添加调试打印 在每个追加之前只是为了看到帧字符串崩溃之前的大小?