如何实现录音程序自动将录制的音频保存至本地电脑?
解决PyAudio录制音频后无法保存到本地的问题
你的代码已经包含了音频保存的逻辑,但存在一个致命错误导致保存失败:在调用pa.get_sample_size(FORMAT)获取采样宽度之前,你已经执行了pa.terminate()销毁了PyAudio实例,这会导致程序无法正确设置WAV文件的参数,最终保存失败。
修正后的完整代码
import pyaudio import wave FRAMES_PER_BUFFER = 3200 FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 16000 pa = pyaudio.PyAudio() stream = pa.open( format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=FRAMES_PER_BUFFER ) print('start recording') seconds = 3 frames = [] for i in range(0, int(RATE/FRAMES_PER_BUFFER*seconds)): data = stream.read(FRAMES_PER_BUFFER) frames.append(data) stream.stop_stream() stream.close() # 先完成音频保存操作,再终止PyAudio实例 obj = wave.open('Recordings.wav', 'wb') obj.setnchannels(CHANNELS) obj.setsampwidth(pa.get_sample_size(FORMAT)) obj.setframerate(RATE) obj.writeframes(b''.join(frames)) obj.close() pa.terminate()
关键说明
- 保存路径:当前代码用的是相对路径
'Recordings.wav',音频会保存在你运行程序的当前文件夹下。如果要指定固定路径,直接替换成绝对路径即可,比如:- Windows:
'C:/Users/你的用户名/Documents/我的录音.wav' - macOS/Linux:
'/home/你的用户名/Documents/我的录音.wav'
- Windows:
- 核心修正:把
pa.terminate()移到音频保存完成之后,确保在获取采样宽度时PyAudio实例还处于可用状态。 - 验证结果:运行修正后的程序,录制完成后去对应路径找到WAV文件,用任意音频播放器即可收听。
内容的提问来源于stack exchange,提问作者Shania Jones
相关产品推荐
相关产品推荐

