pygame で、サウンドの再生が終了したかどうかを確認する方法はありますか? set_endevent
とドキュメントを読みましたget_endevent
が、意味が分からなかったり、例が見つかりません。
私は具体的に次のことをしようとしています:
- 音を鳴らす
- サウンドが再生されている間、ループを繰り返し続けます
- サウンドの再生が終了したら、次に進みます。
尋ねられた他の質問を確認しました-特にpython / pygameをターゲットにしたものは見つかりませんでした。
ありがとう!
コツは、サウンドpygame.mixer.Channel
のメソッド ( ) を呼び出すと、型のオブジェクトを取得することです。チャネルのメソッドを使用して、サウンドの再生が終了したかどうかをテストできます。play()
pygame.mixer.Sound
get_busy()
簡単な例:
import pygame.mixer, pygame.time
mixer = pygame.mixer
mixer.init()
tada = mixer.Sound('tada.wav')
channel = tada.play()
while channel.get_busy():
pygame.time.wait(100) # ms
print "Playing..."
print "Finished."
例では、'tada.wav' というサウンド ファイルがあることを前提としています。
次のようなコードを使用できます。
import pygame
pygame.mixer.music.load('your_sound_file.mid')
pygame.mixer.music.play(-1, 0.0)
while pygame.mixer.music.get_busy() == True:
continue
また、.mid ファイルである必要はありません。pygame が理解できる任意のファイル タイプにすることができます。
set_endeventを使用するには、次のようにする必要があります。
# You can have several User Events, so make a separate Id for each one
END_MUSIC_EVENT = pygame.USEREVENT + 0 # ID for music Event
pygame.mixer.music.set_endevent(END_MUSIC_EVENT)
running = True
# Main loop
while running:
events = pygame.event.get()
if events:
for event in events:
...
if event.type == END_MUSIC_EVENT and event.code == 0:
print "Music ended"
...
pygame.mixer.pre_init(44100, 16, 2, 4096) # setup mixer to avoid sound lag
pygame.init()
startmusic="resources\snd\SGOpeningtheme.ogg"
pygame.mixer.set_num_channels(64) # set a large number of channels so all the game sounds will play WITHOUT stopping another
pygame.mixer.music.load(startmusic)
pygame.mixer.music.set_volume(0.3)
pygame.mixer.music.play(-1) # the music will loop endlessly
上記のコードが実行されると、pygame サイトの情報に従って停止するかフェードアウトするまで音楽が再生され続けます。心ゆくまでループでき、音楽は続きます。音楽を 2 回再生する必要がある場合は、-1 の代わりに 1 を入力します。その後、音楽は 1 回再生され、1 回繰り返されます。を実行すると、ストリームが再生されているかどうかを確認できますpygame.mixer.music.get_busy()
。True が返された場合は、そうです。False は終了したことを意味します。