Raspberry Pi 3上的python2.7-Pyaudio输入溢出
我在为一个我至今还没能解决的问题寻求帮助。。。 我用的是覆盆子皮3 B型,上面插着Focusrite Scarlett 2i2 USB声卡,上面插着卡侬话筒。例如,整个过程在《无畏》上运行良好。它可以录制和/或播放声音。 现在,我想使用这个设置在Python中记录一个流,并使用和FFT函数对其进行分析,以实时估计我所听到的声音的音调。当我在Raspberry上使用Python 2.7运行代码时,它会运行4到5秒,然后停止运行,出现以下异常:Raspberry Pi 3上的python2.7-Pyaudio输入溢出,python,python-2.7,raspbian,raspberry-pi3,Python,Python 2.7,Raspbian,Raspberry Pi3,我在为一个我至今还没能解决的问题寻求帮助。。。 我用的是覆盆子皮3 B型,上面插着Focusrite Scarlett 2i2 USB声卡,上面插着卡侬话筒。例如,整个过程在《无畏》上运行良好。它可以录制和/或播放声音。 现在,我想使用这个设置在Python中记录一个流,并使用和FFT函数对其进行分析,以实时估计我所听到的声音的音调。当我在Raspberry上使用Python 2.7运行代码时,它会运行4到5秒,然后停止运行,出现以下异常: IOError: [Errno Input overf
IOError: [Errno Input overflowed] -9981
然后它使python控制台崩溃
请注意,这段代码在基本计算机上运行良好,但我需要它在Pi3上运行
我想知道是不是线程导致了数据溢出的问题,所以我回到Pyaudio发布的非常基本的代码来“测试”设置。所以我运行了下面的代码,发现自己面临着完全相同的问题,有着相同的错误
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()
但我有一个想法,那就是减小块大小,在运行了几次之后,我发现在1010以上,出现了异常
所以我的问题很简单,有人知道这是从哪里来的吗?如果我想或需要,为什么不能将块大小设置为1024?为什么它能在计算机上正常运行,而不是在Pi上?有解决办法吗
多谢各位,
爱德华不确定你的问题是否能以你的措辞得到明确的回答。希望我能给你指出几个方向。我一直在用我的型号3做一些音频流的工作,所以我对你的例子很感兴趣 Pi和计算机最大的区别在于CPU速度和内存—1.2GHz CPU和1GB Ram的规格比任何低端计算机都要低。使用解释语言进行流处理可能会增加 看起来你正在把所有的录音都记录到内存中,然后在最后把它写出来。我想那就是溢出发生的地方。我认为块大小只是一个骗局 如果要坚持Python处理,我认为更好的选择是在接收帧数据时编写帧数据 在我看来,我认为更好的选择是直接使用arecord或ffmpeg/avconv将流直接记录到文件中。但是我非常感兴趣的是看看你是否能在Python中做到这一点 您安装了什么操作系统-Raspbian或Raspbia Lite 编辑
只是出于兴趣-您是否尝试添加调试打印 在每次追加之前只是为了在崩溃之前查看帧字符串的大小
不确定你的问题是否能以你的措辞得到明确的回答。希望我能给你指出几个方向。我一直在用我的型号3做一些音频流的工作,所以我对你的例子很感兴趣 Pi和计算机最大的区别在于CPU速度和内存—1.2GHz CPU和1GB Ram的规格比任何低端计算机都要低。使用解释语言进行流处理可能会增加 看起来你正在把所有的录音都记录到内存中,然后在最后把它写出来。我想那就是溢出发生的地方。我认为块大小只是一个骗局 如果要坚持Python处理,我认为更好的选择是在接收帧数据时编写帧数据 在我看来,我认为更好的选择是直接使用arecord或ffmpeg/avconv将流直接记录到文件中。但是我非常感兴趣的是看看你是否能在Python中做到这一点 您安装了什么操作系统-Raspbian或Raspbia Lite 编辑
只是出于兴趣-您是否尝试添加调试打印 在每次追加之前只是为了在崩溃之前查看帧字符串的大小 相关:-检查输入格式(速率和格式),如果不是,则代码处理数据太慢。相关:-检查输入格式(速率和格式),如果不是,则代码处理数据太慢。