PyAudio Input Overflowed -9981 – No solution working
请不要将此问题报告为重复问题,因为没有任何可用的解决方案适合我,我对它们都进行了测试
所以,
我正在尝试在我的 RaspberryPi 模型 B 板上运行 PyAudio 示例录音程序,
这是我得到的错误,
1
2 3 4 5 6 |
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 |
已经有一些解决方案可以解决许多用户的问题,但就我而言,这不是真的。
这是我尝试过的,
首先,这是代码,
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
“””PyAudio example: Record a few seconds of audio and save to a WAVE file.”””
import pyaudio CHUNK = 1024 p = pyaudio.PyAudio() stream = p.open(format=FORMAT, print(“* recording”) frames = [] for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): print(“* done recording”) stream.stop_stream() wf = wave.open(WAVE_OUTPUT_FILENAME, ‘wb’) |
我也试过当前配置是否支持,
1
2 3 4 5 6 7 |
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 声卡设备信息,
1
2 3 4 5 6 7 8 9 10 11 12 13 |
p.get_device_info_by_index(1)
{‘defaultSampleRate’: 44100.0, |
有人知道为什么我仍然收到错误吗?
- 如果您执行 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
将您的块参数更改为 8192 而不是 1024。为我工作。
参考:IOError:[Errno 输入溢出] -9981
您是否尝试将 exception_on_overflow 设置为 False?来自 Pyaudio 文档:
1
|
read(num_frames, exception_on_overflow=True)
|
从流中读取样本。使用非阻塞模式时不要调用。
参数:
num_frames a€”要读取的帧数。
exception_on_overflow a€” 指定是否应在输入缓冲区溢出时抛出(或静默忽略)IOError 异常。默认为真。
引发 IOError:
如果流不是输入流或读取操作不成功。
返回类型:
字符串
- 这似乎不适用于 PyAudio 0.2.8。 (这是 2 月 17 日 Pi 附带的)我得到”意外关键字”如果我只是尝试添加 False(没有关键字,只是参数),我会被告知参数太多。
- @Sidd 你拯救了我的一天!谢谢!
详细说明@Sidd Rajput 的答案,因为我没有明确说明这一点,
如果您正在导入,在脚本/项目中设置它是不够的 – pyaudio.py 本身需要修改
1
|
def read(self, num_frames, exception_on_overflow=False):
|
^pyaudio.py v0.2.8 中的第 589/590 行:
我只是增加了块数,它似乎有效!
这是我的代码
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import pyaudio
import wave CHUNK = 44100 #just a big number p = pyaudio.PyAudio() stream = p.open(format=FORMAT, print(“* recording”) frames = [] for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): print(“* done recording”) stream.stop_stream() wf = wave.open(WAVE_OUTPUT_FILENAME, ‘wb’) |
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# importing modules for sound handling
# importing modules for sound handling from sys import byteorder from array import array from struct import pack import pyaudio def audioeffect(): p = pyaudio.PyAudio() stream = p.open(format=FORMAT, # adding all quadrates #print(“Rms_Value is :”, Rms_Value) |
- 首先,我使用速率 44100 并被错误和溢出等轰炸,速率 = 48000,它可以工作。就我而言,CHUNK 是 16 岁,因为我只想要一个非常短的样本来驱动 APA Led String。
- 欢迎来到堆栈溢出!你能解释一下这是做什么的吗?请记住,答案是针对更广泛的受众,而不仅仅是最初的提问者。谢谢!
来源:https://www.codenong.com/19081181/