Pyglet 使用绝对路径加载资源

3 投票
2 回答
2457 浏览
提问于 2025-04-18 11:38

我刚接触Python,对这个问题还不太熟悉。我查了一些资料,但找到的答案似乎都不管用。我想用pyglet加载一个mp3文件,使用的是绝对路径,但出现了这个错误:

Traceback (most recent call last):
  File "C:\Apps\Python\lib\site-packages\pyglet\resource.py", line 624, in media
    location = self._index[name]
KeyError: 'C:/Users/Ruurd/Google Drive/Script/Python/music2.mp3'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/Ruurd/Desktop/playmus.py", line 3, in <module>
    music=pyglet.resource.media(path)
  File "C:\Apps\Python\lib\site-packages\pyglet\resource.py", line 634, in media
    raise ResourceNotFoundException(name)
pyglet.resource.ResourceNotFoundException: Resource "C:/Users/Ruurd/Google Drive/Script/Python/music2.mp3" was not found on the path.  Ensure that the filename has the correct captialisation.

当我用'music2.mp3'作为路径时,一切正常。这里是那段不工作的代码:

import pyglet
path='C:/Users/Ruurd/Google Drive/Script/Python/music2.mp3'
music=pyglet.resource.media(path)
music.play()

2 个回答

0
import pyglet
from os.path import abspath, isfile

pyglet.options['audio'] = ('directsound', 'alsa', 'openal', 'silent')

path = abspath('C:/Users/Ruurd/Google Drive/Script/Python/music2.mp3')
if isfile(path):
    music = pyglet.resource.media(path)
    music.play()

因为你没有提供mp3文件的来源,我无法测试这个。
不过,通常来说,使用 abspath 是个好主意,这样可以确保语法是正确的;而使用 isfile 可以检查这个路径下的文件是否存在。

如果你想更好地控制使用的驱动程序,可以用 pyglet.options['audio'] 来指示 pyglet 使用,比如说 directsound

3

试试这个:

music=pyglet.media.load(path)

而不是这个:

music=pyglet.resource.media(path)

对我有效哦。=)

撰写回答