2011-11-20 71 views
1

私はPygameで音楽ファイルを再生する簡単なプログラムを書こうとしています。私のスクリプトは以下の通りです。Pygameで音楽を再生できない

import pygame 

import sys 
import time 

FRAMERATE = 30 

if len(sys.argv) < 2: 
    sys.exit(2) 

filename = sys.argv[1] 

clock = pygame.time.Clock() 

pygame.init() 

pygame.mixer.init(frequency=44100) 
pygame.mixer.music.load(filename) 
print "%s loaded!" % filename 
pygame.mixer.music.play(1) 

while pygame.mixer.music.get_busy(): 
    clock.tick(FRAMERATE) 

しかし、私はいくつかの難題を抱えています。 "[File name] loaded!"メッセージは常に出力されますが、ループに入ることはなく、ただちに終了します。 pygame.mixer.music.get_busy()のステータスを確認すると、pygame.mixer.music.play(1)コマンドの直後にfalseと表示されます。これは不規則に起こります。私はちょうどコードを変更せずにプログラムを実行しようとしました。一度しか動作せず、直後にこの問題が発生しました。これらの一見無作為な再生の問題を引き起こす可能性があるのは誰ですか?

答えて

4

これは実際の音楽再生が別のスレッドで行われているためと思われますので、最初にget_busy()と呼んだ時点で開始しないことがあります。その場合は

、それはpygameのかSDL_mixerのいずれかのバグのように思える(pygameのを使用しています。)

音楽完了をチェックする別の方法として、あなたはあなたのイベントを与えるためにpygameのダウンロードを得ることができたときに音楽は終わり、それをチェックします。このように:

pygame.mixer.music.set_endevent(pygame.USEREVENT) 

quit = False 
while not quit: 
    clock.tick(FRAMERATE) 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
     quit = True 
     if event.type == pygame.USEREVENT: 
     print "Music ended" 
     quit = True 
関連する問題