【问题标题】:PyAudio Input Overflowed -9981 - No solution workingPyAudio 输入溢出 -9981 - 没有解决方案工作
【发布时间】:2013-10-05 13:07:11
【问题描述】:

请不要将此问题报告为重复问题,因为没有任何可用的解决方案适合我,我对它们都进行了测试

所以, 我正在尝试在我的 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}

有人知道为什么我仍然收到错误吗?

【问题讨论】:

  • 你能发布如果你做p.get_default_input_device_info()会发生什么吗?
  • @joseph 我也面临同样的问题和同样的错误,我从命令p.get_default_input_device_info() 得到的信息是{'defaultSampleRate': 44100.0, 'defaultLowOutputLatency': 0.011609977324263039, 'defaultLowInputLatency': 0.011609977324263039, 'maxInputChannels': 1L, 'structVersion': 2L, 'hostApi': 0L, 'index': 0L, 'defaultHighOutputLatency': 0.046439909297052155, 'maxOutputChannels': 2L, 'name': u'USB PnP Sound Device: USB Audio (hw:0,0)', 'defaultHighInputLatency': 0.046439909297052155} 指导我解决这个问题?
  • @FahadUddin,尝试降低或增加你的块大小
  • @SufiyanGhori 我试过 1024、512、256

标签: python audio pyaudio


【解决方案1】:

详细说明@Sidd Rajput 的答案,因为我没有明确说明这一点, 如果要导入,在脚本/项目中设置它是不够的——pyaudio.py 本身需要修改

def read(self, num_frames, exception_on_overflow=False):

^pyaudio.py v0.2.8 中的第 589/590 行:

【讨论】:

    【解决方案2】:

    我只是增加了块数,看来它有效! 这是我的代码

    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()
    

    【讨论】:

      【解决方案3】:
      # 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)
      

      【讨论】:

      • 首先我使用了 44100 的速率,但在 RATE = 48000 的情况下被错误和溢出等轰炸,它可以工作。就我而言,CHUNK 是 16 岁,因为我只想要一个非常短的样本来驱动 APA Led String。
      • 欢迎来到Stack Overflow!你能解释一下这是做什么的吗?请记住,答案是针对更广泛的受众,而不仅仅是最初的提问者。谢谢!
      【解决方案4】:

      您是否尝试将 exception_on_overflow 设置为 False?来自 Pyaudio 文档:

      read(num_frames, exception_on_overflow=True)
      

      从流中读取样本。使用非阻塞模式时不要调用。

      参数: num_frames – 要读取的帧数。 exception_on_overflow – 指定输入缓冲区溢出时是否应抛出(或静默忽略)IOError 异常。默认为真。 引发 IOError: 如果流不是输入流或读取操作不成功。 返回类型:
      字符串

      【讨论】:

      • 这似乎不适用于 PyAudio 0.2.8。 (这是 2 月 17 日 Pi 附带的)我得到“意外的关键字”如果我只是尝试添加 False(没有关键字,只是参数),我会被告知参数太多。
      • @Sidd 你拯救了我的一天!谢谢你!
      【解决方案5】:

      将您的块参数更改为 8192 而不是 1024。为我工作。 参考:IOError: [Errno Input overflowed] -9981

      【讨论】:

        猜你喜欢
        • 2013-01-17
        • 2015-03-26
        • 2012-05-30
        • 1970-01-01
        • 2019-09-07
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        • 1970-01-01
        相关资源
        最近更新 更多