如何用PyAudio获取可用于PocketSphinx的无噪声原始音频文件?
解决PyAudio录制原始音频给PocketSphinx时的噪声问题
嘿,我注意到你在尝试用PyAudio录制原始音频供PocketSphinx使用时,碰到了随机噪声的问题。咱们来看看代码里的问题出在哪,以及怎么修复它!
问题根源
- 音频格式不匹配:PocketSphinx默认要求的是**16位有符号整数(
paInt16)**格式的音频,而你当前代码里用的是paInt32(32位整数)。这种格式不兼容会让PocketSphinx错误解析音频数据,直接导致噪声。 - 文件写入模式错误:你用了文本模式
"w"来写入原始音频文件,这会在部分系统中把二进制音频数据当成文本处理,破坏原始字节流,进而引入噪声。正确的做法是用二进制写入模式"wb"。
修正后的代码
import pyaudio FORMAT = pyaudio.paInt16 # 改成PocketSphinx兼容的16位格式 CHANNELS = 1 RATE = 16000 CHUNK = 1024 RECORD_SECONDS = 2 audio = pyaudio.PyAudio() # 开始录制 stream = audio.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("finished recording") # 停止录制并释放资源 stream.stop_stream() stream.close() audio.terminate() # 用二进制模式写入原始文件 with open("newfile.raw", "wb") as file: file.write(b''.join(frames))
额外说明
- 我把文件写入换成了
with语句,这样能自动处理文件关闭,避免资源泄漏。 - 确认你的麦克风输入正常,有时候硬件本身的噪声也可能是问题来源,但根据你的代码情况,格式和写入模式应该是主要原因。
内容的提问来源于stack exchange,提问作者shreyansh
相关产品推荐
相关产品推荐

