alsaaudio.PCM_FORMAT_MPEG功能解析及录制MPEG文件无法播放排查
PyAlsaAudio录制音频文件无法播放的解决方案
问题根源
PCM_FORMAT_MPEG的误用:这个格式仅针对少数能直接输出MPEG编码数据流的专业音频设备设计,普通麦克风输出的是未经压缩的原始PCM数据,强行用该格式读取会得到播放器无法识别的无效数据。- 非标准采样率:你设置的
44400Hz是非标准采样率,多数播放器和编码工具对标准采样率(如44100Hz、48000Hz)支持更完善。 - 录制数据量不足:原代码仅调用一次
inp.read(),仅获取了极少量数据,播放器无法解析这类极小的音频文件。
修正后的代码(录制可直接播放的WAV文件)
import alsaaudio import wave # 标准音频配置参数 CHANNELS = 1 RATE = 44100 PERIOD_SIZE = 1024 # 用2的幂作为周期大小,避免音频卡顿 RECORD_SECONDS = 5 # 初始化PCM捕获设备,采用通用的16位小端原始PCM格式 inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE, alsaaudio.PCM_NORMAL, channels=CHANNELS, rate=RATE, format=alsaaudio.PCM_FORMAT_S16_LE, periodsize=PERIOD_SIZE) # 写入带文件头的WAV文件,播放器可直接识别 with wave.open('recorded.wav', 'wb') as wf: wf.setnchannels(CHANNELS) wf.setsampwidth(2) # 16位采样对应2字节宽度 wf.setframerate(RATE) # 循环读取数据,完成指定时长的录制 total_frames = int(RATE / PERIOD_SIZE * RECORD_SECONDS) for _ in range(total_frames): length, data = inp.read() wf.writeframes(data) print("录制完成,生成文件:recorded.wav")
如需生成MPEG/MP3格式文件
先录制WAV文件,再通过ffmpeg转换:
ffmpeg -i recorded.wav -codec:a libmp3lame -qscale:a 2 recorded.mp3
内容的提问来源于stack exchange,提问作者Lima
相关产品推荐
相关产品推荐

