首页 > 解决方案 > 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正确运行文件?

标签: pythonpython-3.xaudiopyglet

解决方案


就像在示例中一样,这可能是 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 上进行了测试,它运行良好。


推荐阅读