4

pygame で、サウンドの再生が終了したかどうかを確認する方法はありますか? set_endeventとドキュメントを読みましたget_endeventが、意味が分からなかったり、例が見つかりません。

私は具体的に次のことをしようとしています:

  1. 音を鳴らす
  2. サウンドが再生されている間、ループを繰り返し続けます
  3. サウンドの再生が終了したら、次に進みます。

尋ねられた他の質問を確認しました-特にpython / pygameをターゲットにしたものは見つかりませんでした。

ありがとう!

4

4 に答える 4

9

コツは、サウンドpygame.mixer.Channelのメソッド ( ) を呼び出すと、型のオブジェクトを取得することです。チャネルのメソッドを使用して、サウンドの再生が終了したかどうかをテストできます。play()pygame.mixer.Soundget_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' というサウンド ファイルがあることを前提としています。

于 2014-10-10T07:36:05.383 に答える
5

次のようなコードを使用できます。

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 が理解できる任意のファイル タイプにすることができます。

于 2012-07-27T16:18:34.320 に答える
2

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"
            ...
于 2012-07-27T18:00:51.653 に答える
0
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 は終了したことを意味します。

于 2014-09-19T06:54:33.677 に答える