[英]Python 3 pygame mixer - next song
我是python的新手,所以请保持友善。 我最近开始了一个项目,使用 pygame 和 tkinter 的 mp3 播放器遇到了问题。 当前一首歌曲播放完毕后,我无法让播放器转到下一首歌曲。 有什么办法可以做到这一点,或者有什么办法可以看出这首歌有多长?
其他一切都运行良好,播放良好。 这是代码:
#IMPORTS
from tkinter import *
from pygame import mixer
import pygame
import time
#listing music:
music = [
"Tobu - Candyland.mp3",
"Alan Walker - Spectre.mp3",
"Tobu - Hope.mp3",
"Tobu - Life.mp3",
"Tobu - Mesmerize.mp3",
"DEAF KEV - Invincible.mp3",
"Different Heaven & EH!DE - My Heart.mp3",
"Disfigure - Blank.mp3",
"Ahrix - Nova.mp3",
"Alan Walker - Fade.mp3",
"jim-yosef-firefly-ncs-release.mp3",
"Alan Walker - Force.mp3",
]
#WINDOW SETTINGS
window = Tk()
window.title("GAMING MUSIC by KOOB")
window.geometry("700x50")
window.wm_iconbitmap('media_logo.ico')
topFrame = Frame(window)
topFrame.pack()
bottomFrame = Frame(window)
bottomFrame.pack(side=BOTTOM)
window.resizable(width=False, height=False)
window["bg"] = "black"
music_number = int(0)
music_number2 = (music_number)
next_music = (music[music_number + 1])
current_music = (music[music_number])
paused = True
#DEFINITIONS BELOW:
def quitprogram():
time.sleep(0.25)
window.destroy()
time.sleep(0.25)
quit()
def nextsong():
global songLABEL
global music_number
global current_music
global music
global music_number2
global next_music
mixer.music.stop()
music_number = int(music_number2 + 1)
music_number2 = (music_number)
print (music_number)
current_music = (music[music_number])
mixer.music.load(current_music)
songLABEL.forget()
time.sleep(0.5)
songLABEL = Label(text=current_music, fg="white")
songLABEL.pack(side=TOP)
songLABEL["bg"] = "black"
time.sleep(0.5)
mixer.music.play()
next_music = (music[music_number + 1])
pygame.mixer.music.queue(next_music)
print ("NEXT: ", next_music)
def lastsong():
global songLABEL
global music_number
global current_music
global music
global music_number2
global next_music
mixer.music.stop()
music_number = int(music_number2 - 1)
music_number2 = (music_number)
print (music_number)
current_music = (music[music_number])
mixer.music.load(current_music)
songLABEL.forget()
time.sleep(0.5)
songLABEL = Label(text=current_music, fg="white")
songLABEL.pack(side=TOP)
songLABEL["bg"] = "black"
time.sleep(0.5)
mixer.music.play()
next_music = (music[music_number + 1])
pygame.mixer.music.queue(next_music)
print ("NEXT: ", next_music)
def playpause():
global songLABEL
global current_music
global next_music
print(music_number)
current_music = (music[music_number])
global paused
if mixer.get_init():
if paused is False:
mixer.music.pause()
paused = True
else:
mixer.music.unpause()
paused = False
else:
mixer.init()
mixer.music.load(current_music)
mixer.music.play()
paused = False
songLABEL.forget()
songLABEL = Label(text=current_music, fg="white")
songLABEL.pack(side=TOP)
songLABEL["bg"] = "black"
next_music = (music[music_number + 1])
pygame.mixer.music.queue(next_music)
print ("NEXT: ", next_music)
def rewindsong():
pygame.mixer.music.rewind()
def volumedown():
pygame.mixer.music.set_volume(pygame.mixer.music.get_volume() - 0.1)
def volumeup():
pygame.mixer.music.set_volume(pygame.mixer.music.get_volume() + 0.1)
playBUTTON = Button(text="PLAY-PAUSE", fg="white")
playBUTTON.pack(side=LEFT)
playBUTTON.configure(command=playpause)
playBUTTON["bg"] = "black"
nextBUTTON = Button(text=">>>", fg="white")
nextBUTTON.pack(side=LEFT, padx=10)
nextBUTTON.configure(command=nextsong)
nextBUTTON["bg"] = "black"
lastBUTTON = Button(text="<<<", fg="white")
lastBUTTON.pack(side=LEFT, padx=10)
lastBUTTON.configure(command=lastsong)
lastBUTTON["bg"] = "black"
rewindBUTTON = Button(text="replay", fg="white")
rewindBUTTON.pack(side=LEFT, padx=10)
rewindBUTTON.configure(command=rewindsong)
rewindBUTTON["bg"] = "black"
volumedownBUTTON = Button(text="VOL -", fg="white")
volumedownBUTTON.pack(side=LEFT, padx=10)
volumedownBUTTON.configure(command=volumedown)
volumedownBUTTON["bg"] = "black"
volumeupBUTTON = Button(text="VOL +", fg="white")
volumeupBUTTON.pack(side=LEFT, padx=10)
volumeupBUTTON.configure(command=volumeup)
volumeupBUTTON["bg"] = "black"
songLABEL = Label(text="music provided by NoCopyrightSounds", fg="white")
songLABEL.pack(side=TOP)
songLABEL["bg"] = "black"
window.protocol('WM_DELETE_WINDOW', quitprogram)
#THE WINDOW BEING KEPT OPEN
window.mainloop()
当您告诉Python歌曲结束后该怎么做时,您需要将其设置为如下事件:
def nextsong(event):
global index
index += 1
pygame.mixer.music.load(listofsongs[index])
pygame.mixer.music.play()
你可以试试这个。 这个对我有用。 现在我只想弄清楚如何让它跳到队列中的下一首歌曲。
from os import listdir
from pygame import mixer
from random import shuffle
from tkinter import Tk
window = Tk()
mixer.init()
# get list of files
music_files = listdir('./Music')
# Get number of files
file_range = len(music_files)
# Get first file and load then queue all remaining files
my_file = music_files.__getitem__(0)
mixer.music.load(f"./Music/{my_file}")
for song in range(1, file_range-1):
mixer.music.queue(f"./Music/{music_files.__getitem__(song)}")
play_music = True
shuffle_music = True
# Shuffle if needed
if shuffle_music:
shuffle(music_files)
# Creates and loops the queue each time the mixer stops playing music
while play_music:
while not mixer.music.get_busy():
# Get first file and load then queue all remaining files
mixer.music.load(f"./Music/{music_files.__getitem__(0)}")
for song in range(1, file_range - 1):
mixer.music.queue(f"./Music/{music_files.__getitem__(song)}")
mixer.music.play()
window.mainloop()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.