请不要将此问题报告为重复,因为现有的解决方案都没有为我工作,我对它们进行了全部测试
所以, 我试图在我的RaspberryPi模型B板上运行PyAudio示例录制程序, 这是我得到的错误,
Traceback (most recent call last):
File "/home/pi/pyaudio/test/testing.py", line 23, in <module>
data = stream.read(chunk)
File "/usr/local/lib/python2.7/dist-packages/pyaudio.py", line 605, in read
return pa.read_stream(self._stream, num_frames)
IOError: [Errno Input overflowed] -9981
已经有某些解决方案可以解决许多用户的问题,在我看来,这是不正确的。
这是我尝试过的,
首先,这是代码,
"""PyAudio example: Record a few seconds of audio and save to a WAVE file."""
import pyaudio
import wave
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
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()
如果支持或不支持当前配置,我也尝试过,
import pyaudio
p = pyaudio.PyAudio()
if p.is_format_supported(48000.0,
input_device=1,
input_channels=1,
input_format=pyaudio.paInt16):
print 'True!'
44,000和44,100都是支持,但我仍然一次又一次地得到同样的错误。
这是我的USB声卡设备信息,
p.get_device_info_by_index(1)
{'defaultSampleRate': 44100.0,
'defaultLowOutputLatency': 0.011609977324263039,
'defaultLowInputLatency': 0.011609977324263039,
'maxInputChannels': 1L,
'structVersion': 2L,
'hostApi': 0L,
'index': 1,
'defaultHighOutputLatency': 0.046439909297052155,
'maxOutputChannels': 2L,
'name': u'Generic USB Audio Device: USB Audio (hw:1,0)',
'defaultHighInputLatency': 0.046439909297052155}
有没有人知道我为什么还会收到错误?
答案 0 :(得分:5)
将您的chunk参数更改为8192而不是1024.为我工作。 参考:IOError: [Errno Input overflowed] -9981
答案 1 :(得分:2)
Did you try setting exception_on_overflow to False? From the Pyaudio documentation:
read(num_frames, exception_on_overflow=True)
Read samples from the stream. Do not call when using non-blocking mode.
Parameters:
num_frames – The number of frames to read.
exception_on_overflow – Specifies whether an IOError exception should be thrown (or silently ignored) on input buffer overflow. Defaults to True.
Raises IOError:
if stream is not an input stream or if the read operation was unsuccessful.
Return type:
string
答案 2 :(得分:0)
# importing modules for sound handling
# importing modules for sound handling
from sys import byteorder
from array import array
from struct import pack
import pyaudio
import wave
def audioeffect():
CHUNK = 16 # played with, this can be 2048 1024, 512, 256 etc
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 48000
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
output=True,
frames_per_buffer=CHUNK)
r = array('h') # define r
snd_data = array('h', stream.read(CHUNK)) # read sounddata from input
r.extend(snd_data)
stream.stop_stream()
stream.close()
p.terminate()
N = 1
SumOfSquars = 0
for i in snd_data: # determing the value for tel of
N = N +1
# adding all quadrates
for i in range(0, N-1):
SumOfSquars = snd_data[i]**2
Rms_Value = np.sqrt(SumOfSquars / N)
#print("Rms_Value is :", Rms_Value)
return int(Rms_Value)
答案 3 :(得分:0)
我刚刚增加了块数,看起来它有效! 这是我的代码
import pyaudio
import wave
CHUNK = 44100 #just a big number
FORMAT = pyaudio.paInt16
CHANNELS = 1 #i found that my mic has 1 channel
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input_device_index=3, #found that also
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()
答案 4 :(得分:0)
详细说明@Sidd Rajput的答案,因为我没有清楚地指出这一点, 如果要导入,仅在脚本/项目中进行设置是不够的-pyaudio.py本身需要修改
def read(self, num_frames, exception_on_overflow=False):
^ pyaudio.py v0.2.8中的589/590行: