Python3_pygame—简易的音乐播放器
在pygame的学习中,接触到了其中的mixer.music模块,突发想法,就写了这个音乐播放器,可能时间不是太多,就只做了基础的部分。
本播放器使用了python中内置的模块:
pygame(pygame.mixer.music, pygame.event, pygame.time, pygame.display, pygame.draw.rect)
pickle(pickle.dump, pickle.load)
os(os.path.exists)
tkinter(tkinter.filedialog.askopenfilename, tkinter.messagebox,tkinter.Tk)
sys(sys.exit)
整个播放器的核心为pygame.mixer.music模块,以文件操作、pickle和os为辅完成音乐的载入和播放,用pygame.display建立窗口框架和窗口小组件,结合tkinter.Tk等建立二级小窗口协作完成整个程序。
本程序分为如下两大类和一个主函数:
- 文件类
文件类主要负责完成音乐载入、播放、添加等操作。
定义函数:
def __init__(self):
self.flag = False //音乐是否停止(可以去掉,因为音乐停止后获取音乐播放进度还是不变)
self.number = 0 //记录当前播放音乐的序号
self.all = 0 //音乐的总个数
self.length = 0 //当前音乐的长度
self.current = 0 //当前音乐播放的进度
self.load_information() //载入音乐
载入音乐路径文件函数:
def load_information(self):
global music_list //声明:在程序前方已经有全局变量定义,此为音乐路径文件
global music_name //同上,此为音乐名称文件
if os.path.exists("music.txt") == 0: //检测音乐文件是否存在...
music_db = open("music.txt", "wb") //创建文件
music_nm = open("name.txt","wb")
music_list = ['徐梦圆 - China-X.ogg']
music_name = ['徐梦圆 - China-X']
pickle.dump(music_list, music_db) //将列表保存到文件中
pickle.dump(music_name, music_nm) //同上
self.all = len(music_list)
music_db.close()
music_nm.close()
else:
music_db = open("music.txt", "rb")
music_nm = open("name.txt","rb")
music_list = pickle.load(music_db) //读取文件
music_name = pickle.load(music_nm) //同上
self.all = len(music_list)
music_db.close()
music_nm.close()
对音乐文件内容的实时更新和保存函数:
def save_music(self):
music_db = open("music.txt","wb")
music_nm = open("name.txt", "wb")
pickle.dump(music_list, music_db)
pickle.dump(music_name, music_nm)
music_db.close()
music_nm.close()
从本地系统添加音乐的函数:
def add_music(self): //稍微有些复杂此函数
middle = []
name_ = []
root = tkinter.Tk() //创建父窗口
root.withdraw() //让父窗口隐藏
self.file_opt = options = {} //一些关于askopenfilenames的参数
options['defaultextension'] = ''
options['filetypes'] = [('ogg files', '.ogg'), ('wav files', '.wav'),('mp3 files','.mp3')]
options['initialdir'] = 'C:\\'
options['initialfile'] = ''
options['parent'] = root //root为打开文件的父窗口
options['title'] = '添加音乐文件...'
path_ = tkinter.filedialog.askopenfilenames(**self.file_opt)
root.destroy() //消除父窗口
for each in path_: //从音乐路径中的筛选出音乐名称
each = list(each)
name = ''
flag = False
while True:
try: