Reputation: 18763
Please do not report this question as a duplicate, because none of the already available Solution working for me, I tested them all
So, I am trying to run a PyAudio sample Recording program in my RaspberryPi model B board, This is the error I am getting,
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
There are certain solutions already available that solved many user's problem, which in my case, isn't true.
Here is what I've tried,
First of all, Here is the code,
"""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()
I have also tried if the current configuration is supported or not,
import pyaudio
p = pyaudio.PyAudio()
if p.is_format_supported(48000.0,
input_device=1,
input_channels=1,
input_format=pyaudio.paInt16):
print 'True!'
Both 44,000 and 44,100 are support but still I'm getting the same error again and again.
This is my USB Audio Card device info,
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}
Does anybody has any idea as why I'm still getting the error ?
Upvotes: 3
Views: 6357
Reputation: 1
elaborating on @Sidd Rajput 's answer since I did not find this clearly stated, it's not enough to set this inside your script/project, if you're importing -- pyaudio.py itself needs to be modified
def read(self, num_frames, exception_on_overflow=False):
^Line 589/590 in pyaudio.py v0.2.8:
Upvotes: 0
Reputation: 1
I just increased the chunk number and it appears that it works! here's my code
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()
Upvotes: 0
Reputation: 1
# 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)
Upvotes: 0
Reputation: 46
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
Upvotes: 3
Reputation: 91
Change your chunk parameter to 8192 instead of 1024. Worked for me. reference: IOError: [Errno Input overflowed] -9981
Upvotes: 5