Eso*_*ack 8 python audio stream portaudio pyaudio
我正在尝试用 PyAudio 做一个声音处理项目,但有时我会收到这个错误,我不明白为什么。
以下代码播放在我的笔记本电脑麦克风上听到的音频,然后暂停 3 秒钟,然后继续。这段代码运行良好,如果我鼓掌,在暂停期间,暂停结束后音频不会播放,这使得缓冲区填满后任何额外的音频都丢失了。
但是如果我将 CHUNK 减少到 20 这样的低数字,一旦它暂停一秒钟就会抛出错误
File "C:\Anaconda3\lib\site-packages\pyaudio.py", line 608, in read
return pa.read_stream(self._stream, num_frames, exception_on_overflow)
OSError: [Errno -9981] Input overflowed
Run Code Online (Sandbox Code Playgroud)
因此,如果音频在暂停期间由于(我认为)缓冲区填满而不会引发错误而丢失,那么当我减少每个缓冲区的帧数时为什么会出现错误?
代码:
import pyaudio
import time
# initialize stream parameters
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
CHUNK = 1024
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
output=True,
frames_per_buffer=CHUNK)
x = 1
while True:
data = stream.read(CHUNK)
stream.write(data)
x=x%100 + 1
if x == 100:
print(time.time())
time.sleep(3)
Run Code Online (Sandbox Code Playgroud)
编辑 - 我想我通过将此参数添加到读取中解决了这个问题:
data = stream.read(CHUNK, exception_on_overflow = False)
Run Code Online (Sandbox Code Playgroud)
但是,我的问题仍然存在。我不明白为什么错误只会发生在较小的 CHUNK 大小时,即使在这两种情况下缓冲区似乎都已填满。
| 归档时间: |
|
| 查看次数: |
1305 次 |
| 最近记录: |