Ubuntu 18.04下如何通过Pyglet正确加载运行WAV文件?
解决pyglet加载WAV文件的格式异常问题
我之前在pyglet 1.x版本搭配Ubuntu环境时,也碰到过几乎一模一样的WAV加载报错,结合你的环境和错误信息,给你几个亲测有效的解决思路:
一、针对ffmpeg转换的WAV提示「Not a WAVE file」的问题
pyglet的WaveSource只支持PCM编码的标准WAV文件,而ffmpeg默认转换的WAV可能会包含一些非标准的元数据或者编码格式,导致pyglet无法识别。你需要在转换时明确指定PCM编码参数,用这条命令重新转换:
ffmpeg -i input.mp3 -acodec pcm_s16le -ar 44100 -ac 2 output.wav
参数说明:
-acodec pcm_s16le:强制使用16位小端PCM编码(pyglet最兼容的格式)-ar 44100:设置采样率为44.1kHz(标准音频采样率)-ac 2:设置双声道(如果需要单声道可以改成1)
转换完成后再用pyglet加载,应该就能识别为合法的WAVE文件了。
二、针对下载的WAV提示「Size of format chunk is incorrect」的问题
这个报错是因为下载的WAV文件的RIFF格式不符合pyglet的严格校验逻辑——pyglet 1.3.2的riff.py会检查WAV的格式块(fmt chunk)大小是否为标准的16字节(PCM格式)或18字节(带扩展信息的PCM),而很多网上下载的WAV可能是经过压缩、修改过的非标准变种。
解决方法同样是将这些文件重新转成标准PCM WAV:
- 用上面的ffmpeg命令重新转换下载的WAV文件(即使原文件是WAV,重新转一次也能修复格式问题)
- 或者用音频编辑工具(比如Audacity)打开文件,选择「导出音频」,格式选「WAV (Microsoft)」,编码选「16位PCM」,导出后的文件就能被pyglet正常加载。
额外注意事项
- 确认你的代码中
pyglet.media.load()的参数:如果是小音频文件(比如音效),streaming=False是没问题的;如果是大文件,建议设为streaming=True避免内存占用过高。 - 虽然你已经设置了音频后端选项,但如果后续播放时还有问题,可以检查Ubuntu上的
pulseaudio或openal服务是否正常运行,不过当前的报错都是格式问题,和后端关系不大。
内容的提问来源于stack exchange,提问作者Yuriy Leonov
相关产品推荐
相关产品推荐

