PyAudio录制语音遇[Errno -9981]输入溢出问题求助
问题:语音录制脚本
recognize.py抛出输入溢出错误 我在部署语音认证库时遇到问题:add_user.py可以正常录制语音并写入数据库,但recognize.py执行时触发OSError: [Errno -9981] Input overflowed错误。两个脚本的录制核心代码和参数完全一致,调整参数后问题依旧。当前环境为MacOS,未连接树莓派。
正常运行的add_user.py核心代码
FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 44100 CHUNK = 1024 RECORD_SECONDS = 3 source = "./voice_database/" + name os.mkdir(source) for i in range(3): audio = pyaudio.PyAudio() if i == 0: j = 3 while j >= 0: time.sleep(1.0) os.system('cls' if os.name == 'nt' else 'clear') print("Say your name in {} seconds".format(j)) j -= 1 elif i == 1: time.sleep(2.0) print("Say your name one more time") time.sleep(0.8) else: time.sleep(2.0) print("Say your name one last time") time.sleep(0.8) # start Recording stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) print("recording...") frames = [] for _ in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) frames.append(data) # stop Recording stream.stop_stream() stream.close() audio.terminate()
触发错误的recognize.py核心代码
FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 44100 CHUNK = 1024 RECORD_SECONDS = 4 FILENAME = "./test.wav" audio = pyaudio.PyAudio() # start Recording stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) time.sleep(2.0) print("recording...") frames = [] for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) frames.append(data) print("finished recording") # stop Recording stream.stop_stream() stream.close() audio.terminate()
解决方法
1. 调整流启动时机
recognize.py中在流启动后直接睡眠,导致后台缓冲的音频数据无法及时读取引发溢出。把睡眠操作移到流打开之前:
audio = pyaudio.PyAudio() time.sleep(2.0) print("recording...") # 先完成提示延迟,再启动音频流 stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) frames = [] for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) frames.append(data) print("finished recording")
2. 忽略溢出错误(可选)
如果可以接受少量数据丢失,在读取时添加参数关闭溢出异常:
data = stream.read(CHUNK, exception_on_overflow=False)
3. 检查MacOS麦克风权限
打开「系统偏好设置 → 安全性与隐私 → 隐私 → 麦克风」,确认你的Python解释器已被授予麦克风访问权限。
4. 调整采样参数降低压力
尝试降低采样率或增大块大小,减少系统实时处理负载:
RATE = 22050 CHUNK = 2048
内容的提问来源于stack exchange,提问作者Ananya Aggarwal
相关产品推荐
相关产品推荐

