PyAudio Input Overflowed -9981 - No solution working

后端 未结 5 1990
慢半拍i
慢半拍i 2021-01-14 12:07

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

相关标签:
5条回答
  • 2021-01-14 12:40

    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

    0 讨论(0)
  • 2021-01-14 12:49

    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:

    0 讨论(0)
  • 2021-01-14 12:51

    Change your chunk parameter to 8192 instead of 1024. Worked for me. reference: IOError: [Errno Input overflowed] -9981

    0 讨论(0)
  • 2021-01-14 12:53
    # 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)
    
    0 讨论(0)
  • 2021-01-14 12:58

    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()
    
    0 讨论(0)
提交回复
热议问题