Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在pygame中(或者甚至在一般的python中),我如何创建一个循环,在声音播放时保持执行?_Python_Pygame_Audio - Fatal编程技术网

在pygame中(或者甚至在一般的python中),我如何创建一个循环,在声音播放时保持执行?

在pygame中(或者甚至在一般的python中),我如何创建一个循环,在声音播放时保持执行?,python,pygame,audio,Python,Pygame,Audio,在pygame中,有没有办法判断声音是否已播放完毕?我阅读了set\u endevent和get\u endevent文档,但我无法理解它或找到一个示例 我试图具体做到以下几点: 播放声音 当声音播放时,继续循环 声音播放完毕后,继续 我确实检查了其他被问到的问题——没有发现任何专门针对python/pygame的问题 谢谢 您可以使用如下代码: import pygame pygame.mixer.music.load('your_sound_file.mid') pygame.mixer.m

在pygame中,有没有办法判断声音是否已播放完毕?我阅读了
set\u endevent
get\u endevent
文档,但我无法理解它或找到一个示例

我试图具体做到以下几点:

  • 播放声音
  • 当声音播放时,继续循环
  • 声音播放完毕后,继续
  • 我确实检查了其他被问到的问题——没有发现任何专门针对python/pygame的问题


    谢谢

    您可以使用如下代码:

    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
    
    # 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"
                ...
    
    而且,它不必是.mid文件。它可以是pygame理解的任何文件类型。

    要使用它,您必须执行以下操作:

    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
    
    # 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网站信息淡出。 你可以随心所欲,音乐就会继续。如果你需要播放两次音乐,而不是-1放1。然后音乐将播放一次并重复一次。 您可以通过执行
    pygame.mixer.music.get_busy()
    来检查流是否正在播放。
    如果返回True,则为。False表示它已完成

    诀窍在于,当调用声音的
    play()
    方法(
    pygame.mixer.sound
    )时,您会得到类型为
    pygame.mixer.Channel
    的对象。您可以使用频道的
    get\u 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”的声音文件。

    听起来您需要。。。听众。等待调用可以防止程序占用CPU内核,从而节省能源并保持性能。