Python 使用 Pyglet 播放音乐时出错:UserWarning:异常:访问冲突读取 0x00000014

Python error when playing music with Pyglet: UserWarning: exception: access violation reading 0x00000014

我尝试使用方法、时间表和其他方法对该代码进行多次迭代。我设法克服了 "access violation writing error" 但无论我尝试什么,"access violation reading error" 仍然存在。这是代码:

import pyglet

window = pyglet.window.Window()
window.set_caption('First Pyglet Experiment')

player = pyglet.media.Player()
player.queue(pyglet.resource.media('test song.mp3'))
player.loop = True

@window.event
def on_close():
    player.delete()

player.play()  
pyglet.app.run()  

完成我的歌曲的第一次互动后,它反复出现此错误:

D:\_Programming_\Python\venv\lib\site-packages\pyglet\media\codecs\wmf.py:771: UserWarning: exception: access violation reading 0x00000014
  warnings.warn(e)

如有任何建议,我将不胜感激。提前致谢。

好的,所以当我使用 .wav 而不是 .mp3 时,一切都自行解决了。似乎 pyglet 支持 mp3 但它有某种内部问题。它也可能只是一个错误导出的文件。

不过你仍然需要这部分:

@window.event
def on_close():
    player.delete()

如果 window 突然关闭,这确保了文件的正确关闭。 "access violation writing" 没有它,错误仍然存​​在。

出于某种原因,此简单版本中不存在此错误:

import pyglet

window = pyglet.window.Window()
window.set_caption('First Pyglet Experiment')

music = pyglet.resource.media('background.wav')
music.play()

pyglet.app.run()

但在我更复杂的应用程序中导致了问题。可能需要安全关闭 Player()。

我是 Pyglet 的代码贡献者,我编写了导致问题的编解码器。这是一个错误,应该在下一个 pyglet 版本 (1.5.6) 中修复。

我最近添加了 Windows 媒体基金会支持。它允许像 mp3 这样的简单格式被解码,而无需安装像 ffmpeg 这样的第三方库(否则只支持 wav)。在遇到此问题的另一个人的帮助下,我能够重现此错误。我将它缩小到只影响 32 位 python 用户,但这是我的一个错误。

它适用于 wave 的原因是您实际上选择了不同的解码器。有问题的解码器应该在下一个版本中修复。抱歉给您带来麻烦。