繁体   English   中英

如何使用pygame在歌曲自动完成后播放文件中的下一首歌曲

[英]How to play the next song in file after the song is finished automatically using pygame

我正在使用 pygame 制作音乐播放器。 但是我无法理解如何在上一首歌曲完成后自动播放下一首歌曲。 我的程序首先读取选定文件夹中的所有 mp3 文件。 你能告诉我怎么做吗?

import tkinter.filedialog as filedialog
import os
import pygame

directory = filedialog.askdirectory()
os.chdir(directory)
song_list = []
for file in os.listdir(directory):
    if file.endswith('.mp3'):
         song_list.append(file)
pygame.mixer.init()
pygame.mixer.music.load(song_list[0])
pygame.mixer.music.play()

我想在自动完成第一首歌曲后播放下一首歌曲。

这些文件可以在初始 for 循环中播放,您不需要将它们放在列表中然后播放它们。

关于播放 mp3 文件,您需要等待音乐播放后再退出。 完成每个文件后,您可以以相同的方式开始播放下一个文件。

import tkinter.filedialog as filedialog
import os
import pygame

directory = filedialog.askdirectory()
print("Loding files from directory:", directory)
os.chdir(directory)
pygame.mixer.init()
for file in os.listdir(directory):
    if file.endswith('.mp3'):
        print("Playing file:", file)
        pygame.mixer.music.load(file)
        pygame.mixer.music.play()
        # Wait for the music to play before exiting 
        while pygame.mixer.music.get_busy():   
            pygame.time.Clock().tick(5)

您可以通过列表框选择目录中的任何歌曲,也可以播放。

如果您想一首播放所有歌曲,您可以添加另一个按钮,例如“Play_all”,并通过@saloua 将代码分配给该按钮。

铃声文件夹放置在此“audio_player.py”所在的同一文件夹中。

#audio_player.py
import os
import tkinter as tk
import pygame

def songs_list():
    files = [file for file in os.listdir('ringtone')]
    List = []
    for file in files:
        List.append(str(file))
        #print(file)
    #print(List)
    return List

def play(song_name):

    song_name_label['text'] = "Now Playing: " + song_name
    pygame.mixer.init()
    pygame.mixer.music.load("./ringtone/" + song_name)
    print("Playing:", song_name)
    pygame.mixer.music.play()

window = tk.Tk()
window .title("Any Name")
Height = 720
Width = 1080

# define size of window
canvas = tk.Canvas(window, bg='#3cd1fa',  height=Height, width=Width)
canvas.pack()

# play button **************************************************
play_button_frame = tk.Frame(window)
play_button_frame.place(relx=0.40, rely=0.88, relheight=0.1, relwidth=0.10)

play_button = tk.Button(play_button_frame, text="Play", font=25, fg='#d1d1d1', bg='black',
                        command=lambda: play(listbox.get(listbox.curselection()))  )
play_button.place(relx=0.01, rely=0.005, relheight=0.98, relwidth=0.49)


#list box (playlist) *************************************************
listbox_frame = tk.Frame(window, bg='green')
listbox_frame.place(relx=0.7, rely=0.2, relheight=0.6, relwidth=0.29)

listbox = tk.Listbox(listbox_frame, bg="white", selectmode='ACTIVE')
listbox.place(relx=0.01, rely=0.01, relheight=0.98, relwidth=0.98)

# song name *****************************************************************
song_name_frame = tk.Frame(window, bg='white')
song_name_frame.place(relx=0.20, rely=0.1, relheight=0.05, relwidth=0.60)
song_name_label = tk.Label(song_name_frame,font=("times now roman", 10))
song_name_label.place(relx=0.0, rely=0, relheight=1, relwidth=1)

# PLaylist, to display song in the list
playlist = songs_list()
for item in playlist:
    listbox.insert(tk.END, item)
# auto selecting 1st element of list box
listbox.selection_set( first = 0 )

window.mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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