繁体   English   中英

Python 3 pygame 混音器 - 下一首歌

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM