运行程序,选择音乐所在的文件夹:
选择后即可播放音乐:
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()
发生异常: KeyError 'TIT2'
keyerror一般是你使用字典里不存在的key产生的错误,在本项目中realnames.append(audio['TIT2'].text[0]) 是一句容易出错的话。这是通过函数对音乐文件信息的识别。TIT2=标题、TPE1=作者、TALB=专集。
但是下载下来的音乐文件很多信息是残缺的。
所以在使用的时候需要注意下。
可以通过读取文件名来优化这个bug。