问题描述
有什么办法可以判断一首歌在pygame中是否播放完毕?
代码如下:
from tkinter import *
import pygame
root = Tk()
pygame.init()
def play():
pygame.mixer.music.load("test.ogg")
pygame.mixer.music.play(loops = 0)
def pause():
global paused
if paused == False:
pygame.mixer.music.pause()
paused = True
elif paused:
pygame.mixer.music.unpause()
paused = False
def check_if_finished():
if pygame.mixer.music.get_busy():
print("Song is not finished")
else:
print("Song is finshed")
paused = False
play_button = Button(root,text = "Play Song",command = play)
play_button.grid(row = 0,column = 0)
pause_button = Button(root,text = "Pause Song",command = pause)
pause_button.grid(row = 1,column = 0,pady = 15)
check_button = Button(root,text = "Check",command = check_if_finished)
check_button.grid(row = 2,column = 0)
mainloop()
在这里,我使用了 pygame.mixer.music.get_busy()
函数来检查歌曲是否已完成,但问题是当我暂停歌曲时,check_if_finished()
函数没有给我预期的输出。我想要的是在暂停歌曲时不打印 "The song is finished"
。
有没有办法在 pygame 中实现这一点?
如果有人能帮助我就好了。
解决方法
我想要的是在暂停歌曲时不打印“歌曲完成”。
你说得对。见pygame.mixer.music.get_busy()
:
当音乐流正在播放时返回 True。当音乐空闲时返回 False。在 pygame 2.0.1 及以上版本中,此函数在音乐暂停时返回 False。
您只需添加一个附加条件即可解决此问题:
def check_if_finished():
if paused or pygame.mixer.music.get_busy():
print("Song is not finished")
else:
print("Song is finshed")`