python - Pyglet 无法加载 .wav 文件
问题描述
环境:
Ubuntu 18.04
Python 3.6.6
pyglet 1.3.2
问题:
根据 pyglet 的文档,我尝试运行以下代码:
import pyglet
pyglet.options["audio"] = ("openal", "pulse", "directsound", "silent")
explosion = pyglet.media.load('explosion.wav')
但是发生了以下异常:
1)如果文件由ffmpeg -i input.mp3 output.wav
Traceback (most recent call last):
File "<path_to_dir>/test_sound.py", line 3, in <module>
explosion = pyglet.media.load('zxc.wav', streaming=False)
File "<path_to_env>lib/python3.6/site-packages/pyglet/media/sources/loader.py", line 63, in load
source = get_source_loader().load(filename, file)
File "<path_to_env>lib/python3.6/site-packages/pyglet/media/sources/loader.py", line 84, in load
return WaveSource(filename, file)
File "<path_to_env>lib/python3.6/site-packages/pyglet/media/sources/riff.py", line 197, in __init__
raise WAVEFormatException('Not a WAVE file')
pyglet.media.sources.riff.WAVEFormatException: Not a WAVE file
2)或者这个来自互联网的几个.wav
Traceback (most recent call last):
File "<path_to_dir>//test_sound.py", line 3, in <module>
explosion = pyglet.media.load('explosion.wav', streaming=False)
File "<path_to_env>lib/python3.6/site-packages/pyglet/media/sources/loader.py", line 63, in load
source = get_source_loader().load(filename, file)
File "<path_to_env>lib/python3.6/site-packages/pyglet/media/sources/loader.py", line 84, in load
return WaveSource(filename, file)
File "<path_to_env>lib/python3.6/site-packages/pyglet/media/sources/riff.py", line 192, in __init__
format = wave_form.get_format_chunk()
File "<path_to_env>lib/python3.6/site-packages/pyglet/media/sources/riff.py", line 172, in get_format_chunk
for chunk in self.get_chunks():
File "<path_to_env>lib/python3.6/site-packages/pyglet/media/sources/riff.py", line 108, in get_chunks
chunk = cls(self.file, name, length, offset)
File "<path_to_env>lib/python3.6/site-packages/pyglet/media/sources/riff.py", line 153, in __init__
raise RIFFFormatException('Size of format chunk is incorrect.')
pyglet.media.sources.riff.RIFFFormatException: Size of format chunk is incorrect.
问题:
如何.wav
通过pyglet正确运行文件?
解决方案
就像在示例中一样,这可能是 openal 或 wav 文件的问题。程序声音是否正确播放,例如:
from pyglet.media.sources.procedural import Sine
sine = Sine(duration=1, frequency=500,
sample_size=16, sample_rate=44100)
pyglet.media.StaticSource(sine).play()
你能分享一个有问题的wav文件吗?我刚刚使用https://github.com/pyreiz/pyreiz/blob/master/reiz/media/wav/ding.wav在 Linux Mint 19、Python 3.7.1 和 pyglet 1.3.2 上进行了测试,它运行良好。
推荐阅读
- unity3d - “使用 MRTK 开发 Hololens 应用程序的最佳 Unity 版本是什么?”
- javascript - TypeError:无法读取未定义的属性“startDate”
- javascript - 如何为jvector地图创建动态json以添加国家数据
- amazon-web-services - JMeter - 添加 AWS 负载均衡器的 AWSALB Cookie 时出现格式错误的 Cookies Exc
- javascript - 如何使用 jQuery 处理 git 子模块
- android - 如何检测 NR 网络是 NSA 还是 SA 类型(使用 android API)
- c - 如何修复 68HC11 编译器生成无效的 JMP/BRA 代码
- cassandra - jdbc (insert,select) 添加节点后测试速度下降
- listview - 如何刷新列表视图项目
- android - 如何在 SharedPreferences RecyclerView 中保存特定的复选框项目并检索它们