2014-06-30 112 views
2

我對Python非常陌生,我已經研究了一下,但是我發現的答案似乎並不奏效。我試圖加載具有與absolutie路徑pyglet一個mp3文件,但它給出了這樣的錯誤:Pyglet用絕對路徑加載資源

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() 

回答

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']來使用isntruct pyglet,例如directsound

+0

這似乎並沒有工作:(,isfile(路徑)是真的,但音樂= pyglet.resource.media(路徑)仍然產生錯誤,但我發現了其他類似的工作。我使用src = media.load(fname)和player = media.Player()player.queue(src),它只適用於與文件夾位置相同路徑的文件,即使我使用絕對路徑。不知道如何解決這個問題.. – RuteNL

+0

@RuteNL在我看來,這實際上並不是一個具有適當編碼的MP3。我之前有過這個問題,MP3的行爲如同一個MP3,但有一個很糟糕的編碼,並不是真的大多數現代球員(VLC等)已經學會了處理這些差異化的格式,而不是如此先進和進化的球員(如GL庫)應對困難時期。嘗試通過音頻庫/混音器播放或用另一個文件測試在同一個地方同名,並嘗試'.vmw'可能會更好,因爲它更常用的奇怪。 – Torxed

2

嘗試使用:

music=pyglet.media.load(path) 

代替:

music=pyglet.resource.media(path) 

爲我工作。 =)

+0

我和作者有同樣的問題,那是解決它的唯一答案。謝謝! –