播放歌曲后如何让pygame退出

时间:2014-04-23 14:18:20

标签: python pygame quit

我试图在我的脚本中使用此tutorial来运行pygame而不是Mplayer:

所以,在代码中:

import pygame     
pygame.init()
song = pygame.mixer.Sound(my_song.ogg)
clock = pygame.time.Clock()
song.play()
while True:
   clock.tick(60)
pygame.quit()
print "done"   # not appears
exit()

这首歌很好玩,但已经完成了#34;永远不会在控制台中打印。程序停留在循环中...... 怎么解决? 感谢

编辑:我发现了这个,它运作良好,有一首10秒的歌曲:

import pygame
import time     
pygame.init()
song = pygame.mixer.Sound(son)
clock = pygame.time.Clock()
song.play()
while True:
  clock.tick(60)
  time.sleep(10)
  break
pygame.quit()
print "done"
exit()

2 个答案:

答案 0 :(得分:5)

提供的两个示例有几个问题。

首先:

while True:
    clock.tick(60)

是任何上下文中的无限循环,而不仅仅是pygame,并且永远不会退出。

下一步:

while True:
    clock.tick(60)
    time.sleep(10)
    break

第一次通过循环只会break,与

等效
clock.tick(60)
time.sleep(10)

这就是为什么它适用于10第二首歌。

如果你想使用pygame.mixer.Sound,你应该这样做,使用Sound.get_length()

import pygame
import time     
pygame.init()
song = pygame.mixer.Sound("my_song.ogg")
clock = pygame.time.Clock()
song.play()
time.sleep(song.get_length()+1)  # wait the length of the sound with one additional second for a safe buffer
pygame.quit()
print "done"
exit()

pygame建议您使用mixer.music进行以下操作:

import pygame
import time     
pygame.init()
pygame.mixer.music.load("my_song.ogg")
pygame.mixer.music.play()
while pygame.mixer.music.get_busy() == True:
    continue
pygame.quit()
print "done"
exit()

See this answer for reference

答案 1 :(得分:0)

为循环设置一个变量,然后检查mixer.music.get_busy()以确定循环是否应该停止。

from pygame import mixer

filename =  "mymusic.mp3"

x = mixer.init(frequency=44100)
mixer.music.load(filename)
mixer.music.play()

run = True
while run: 
    # ..do some stuff
    pos = mixer.music.get_pos() / 1000
    print('pos', pos)
    
    if mixer.music.get_busy() == False:
        run = False