1.操作演示
运行程序,选择音乐所在的文件夹:
选择后即可播放音乐:
2. 代码
import os
import pygame
import tkinter
import tkinter.filedialog
from mutagen.id3 import ID3
root = tkinter.Tk()
root.minsize(300, 300)
listofsongs = []
realnames = []
v = tkinter.StringVar()
songlabel = tkinter.Label(root, textvariable=v, width=35)
index = 0
def nextsong(event):
global index
if index < len(listofsongs) - 1:
index += 1
else:
index = 0;
pygame.mixer.music.load(listofsongs[index])
pygame.mixer.music.play()
updatelabel()
def previoussong(event):
global index
if index > 0 :
index -= 1
else:
index = len(listofsongs) - 1
pygame.mixer.music.load(listofsongs[index])
pygame.mixer.music.play()
updatelabel()
def stopsong(event):
pygame.mixer.music.stop()
v.set("")
def updatelabel():
global index
v.set(realnames[index])
def directorychooser():
directory = tkinter.filedialog.askdirectory()
os.chdir(directory)
for files in os.listdir(directory):
if files.endswith('.mp3'):
realdir = os.path.realpath(files)
audio = ID3(realdir)
realnames.append(audio['TIT2'].text[0])
'''
用四个字符标识一个帧,说明一个帧的内容含义,常用的对照如下:
TIT2=标题表示内容为这首歌的标题,下同
TPE1=作者
TALB=专集
TRCK=音轨格式:N/M 其中N 为专集中的第N 首,M为专集*M 首,N和M 为ASCII 码表示的数字
TYER=年代是用ASCII 码表示的数字
TCON=类型直接用字符串表示
COMM=备注格式:”eng\0备注内容”,其中eng 表示备注所使用的自然语言
'''
listofsongs.append(files)
# print(files)
pygame.mixer.init()
pygame.mixer.music.load(listofsongs[0])
pygame.mixer.music.play()
directorychooser()
label = tkinter.Label(root, text="一款简易的音乐播放器")
label.pack()
listbox = tkinter.Listbox(root)
listbox.pack()
# List of songs
realnames.reverse()
for item in realnames:
listbox.insert(0, item)
realnames.reverse()
nextbutton = tkinter.Button(root, text='下一曲')
nextbutton.pack()
previousbutton = tkinter.Button(root, text="上一曲")
previousbutton.pack()
stopbutton = tkinter.Button(root, text="停止播放")
stopbutton.pack()
nextbutton.bind("<Button-1>", nextsong)
previousbutton.bind("<Button-1>", previoussong)
stopbutton.bind('<Button-1>', stopsong)
songlabel.pack()
root.mainloop()
3.注意
发生异常: KeyError 'TIT2'
keyerror一般是你使用字典里不存在的key产生的错误,在本项目中realnames.append(audio['TIT2'].text[0]) 是一句容易出错的话。这是通过函数对音乐文件信息的识别。TIT2=标题、TPE1=作者、TALB=专集。
但是下载下来的音乐文件很多信息是残缺的。
所以在使用的时候需要注意下。
可以通过读取文件名来优化这个bug。