使用pygame自动完成歌曲后如何播放文件中的下一首歌曲
Posted
技术标签:
【中文标题】使用pygame自动完成歌曲后如何播放文件中的下一首歌曲【英文标题】:How to play the next song in file after the song is finished automatically using pygame 【发布时间】:2018-01-12 22:57:18 【问题描述】:我正在使用 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()
我想在第一首歌曲自动播放完毕后播放下一首歌曲。
【问题讨论】:
这是一个带有answer 的重复问题。我无法将此问题标记为重复问题,因为我的回答获得的赞成票为零。 【参考方案1】:这些文件可以在初始 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)
【讨论】:
感谢您回答我的问题。这种方式可以成功地连续播放歌曲。但我想将文件名放入列表中以在列表框中显示这些文件名。有没有办法将所有文件名存储到列表中并播放它们?任何界面都不能这样显示。 @spider_hand 为此,您可以将文件存储在一个列表中,然后像在初始代码 sn-p 中那样循环遍历所有文件。【参考方案2】:您可以通过Listbox选择目录中的任意一首歌曲,也可以播放。
如果您想一首一首播放所有歌曲,您可以添加另一个按钮,例如“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()
【讨论】:
以上是关于使用pygame自动完成歌曲后如何播放文件中的下一首歌曲的主要内容,如果未能解决你的问题,请参考以下文章