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
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
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:
Change your chunk parameter to 8192 instead of 1024. Worked for me. reference: IOError: [Errno Input overflowed] -9981
# 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)
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()