私のコード、Vincible.py は次の場所にあります。
C:\Users\Nick\Desktop\Vincible
にある midi ファイルにアクセスしようとしています。
C:\Users\Nick\Desktop\Vincible\Audio
私はまとめました:
#!C:\Python33\python.exe import sys, pygame, os.path print("Loading...") pygame.mixer.pre_init(44100, -16, 2, 2048) try: pygame.mixer.music.load(os.path.join('Audio', 'title.midi')) pygame.mixer.music.load(os.path.join('Audio', 'dun1.midi')) pygame.mixer.music.load(os.path.join('Audio', 'dun2.midi')) pygame.mixer.music.load(os.path.join('Audio', 'dun3.midi')) pygame.mixer.music.load(os.path.join('Audio', 'dun4.midi')) pygame.mixer.music.load(os.path.join('Audio', 'dun5.midi')) pygame.mixer.music.load(os.path.join('Audio', 'dun6.midi')) pygame.mixer.music.load(os.path.join('Audio', 'echostheme')) pygame.mixer.music.load(os.path.join('Audio', 'town1.midi')) pygame.mixer.music.load(os.path.join('Audio', 'town2.midi')) pygame.mixer.music.load(os.path.join('Audio', 'town3.midi')) except: raise UserWarning("Could not load or play soundfiles in 'Audio' folder") pygame.init() size = width, height = 580, 444 screen = pygame.display.set_mode(size) print("Loaded!") while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() pygame.mixer.Sound('title.midi').play()
それを実行すると、例外ビットが実行され、これを正常に実行する方法を理解するのに苦労しています。私は通常、Python で異なるパスからファイルにアクセスすることはありません。そのため、ご協力をお願いします。
編集:微妙に要求されたように、コードから try/except を削除しました。新しいコードは次のとおりです。
#!C:\Python33\python.exe import sys, pygame, os.path print("Loading...") pygame.mixer.pre_init(44100, -16, 2, 2048) pygame.init() pygame.mixer.music.load(os.path.join('Audio', 'title.midi')) pygame.mixer.music.load(os.path.join('Audio', 'dun1.midi')) pygame.mixer.music.load(os.path.join('Audio', 'dun2.midi')) pygame.mixer.music.load(os.path.join('Audio', 'dun3.midi')) pygame.mixer.music.load(os.path.join('Audio', 'dun4.midi')) pygame.mixer.music.load(os.path.join('Audio', 'dun5.midi')) pygame.mixer.music.load(os.path.join('Audio', 'dun6.midi')) pygame.mixer.music.load(os.path.join('Audio', 'echostheme')) pygame.mixer.music.load(os.path.join('Audio', 'town1.midi')) pygame.mixer.music.load(os.path.join('Audio', 'town2.midi')) pygame.mixer.music.load(os.path.join('Audio', 'town3.midi')) size = width, height = 580, 444 screen = pygame.display.set_mode(size) print("Loaded!") while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() pygame.mixer.Sound('title.midi').play()
今回は以下を出します:
Traceback (most recent call last): File "C:\Users\Nick\Desktop\Vincible\Vincible.py", line 8, in <module> pygame.mixer.music.load(os.path.join('Audio', 'title.midi')) pygame.error: Couldn't open 'Audio\title.midi'
ファイルは破損しておらず、実際に
Vincible\Audio
しかし、それでもこのエラーが返されます。私はそれが私の使用と関係があると思います
os.path.join
しかし、繰り返しになりますが、私は os.path モジュールを初めて使用します。どんな助けでも大歓迎です。
Fredrik が推奨したように、コードを次のように修正してみました。
#!C:\Python33\python.exe
import sys, pygame, os.path
print("Loading...")
pygame.mixer.pre_init(44100, -16, 2, 2048)
pygame.init()
def load(midi_file):
module_directory = os.path.dirname(__file__)
filename = os.path.join(module_directory, 'Audio', midi_file)
pygame.mixer.music.load(filename)
load("title.midi")
size = width, height = 580, 444
screen = pygame.display.set_mode(size)
print("Loaded!")
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
titlemusic.play(-1)
注: コードを小さく/読みやすくするために、他のすべての .midi ファイルを削除しました。問題が解決されたら、正しい方法で追加されます。
実行すると、インタープリターは 13 行目 (「title.midi」をロードする場所) で別の pygame.error 「ファイルを開けませんでした」を発生させます。どんな助けでも大歓迎です。