简体   繁体   English

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

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

I'm making a music player using pygame.我正在使用 pygame 制作音乐播放器。 But I cannot understand how to play the next song automatically after the previous song is finished.但是我无法理解如何在上一首歌曲完成后自动播放下一首歌曲。 My program is reading all mp3 files in a selected folder first.我的程序首先读取选定文件夹中的所有 mp3 文件。 Can you tell me how to do it?你能告诉我怎么做吗?

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()

I want to play the next song after the first song in finished automatically.我想在自动完成第一首歌曲后播放下一首歌曲。

The files could be played in the initial for loop and you don't need to have them in a list then play them.这些文件可以在初始 for 循环中播放,您不需要将它们放在列表中然后播放它们。

Regarding playing the mp3 files you need to wait for the music to play before exiting.关于播放 mp3 文件,您需要等待音乐播放后再退出。 And after finishing each files you can start playing the next one in the same way.完成每个文件后,您可以以相同的方式开始播放下一个文件。

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)

You can select any song in the directory through Listbox and can play it too.您可以通过列表框选择目录中的任何歌曲,也可以播放。

if you want to play all song one by one, You can add another button say 'Play_all' and assign the code by @saloua to that button.如果您想一首播放所有歌曲,您可以添加另一个按钮,例如“Play_all”,并通过@saloua 将代码分配给该按钮。

ringtone folder is placed inside the same folder where this "audio_player.py" is present.铃声文件夹放置在此“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