用python 做一个简单的MP3

mac2022-10-06  27

本节将教大家如何做一个简单的mp3,希望大家能有所收获,写的不足之处望大家谅解。

废话少说,直接上代码:

#!/usr/bin/env python # -*- coding: utf-8 -*- # 遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 # 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! import pygame import os from tkinter import * root = Tk() root.title('老婆专用播放器') root.geometry('800x600') pygame.init() music_path = r'C:\Users\zlcao\Music' current_play = 'R3hab - Skydrop (Radio Edit).mp3' music_name = StringVar() def play(): music_name.set(current_play) pygame.mixer.music.load(os.path.join(music_path, current_play)) pygame.mixer.music.play() Label(root, textvariable=music_name, font=('宋体', 14), justify='center', bg='#ADD8E6').place(relx=0, rely=0.1, relwidth=1, relheight=0.3) Button(root, text="播放", command=play).place(relx=0, rely=0.5, relwidth=0.2, relheight=0.1) Button(root, text="暂停", command=lambda: pygame.mixer.music.pause()).place(relx=0.2, rely=0.5, relwidth=0.2, relheight=0.1) Button(root, text="恢复", command=lambda: pygame.mixer.music.unpause()).place(relx=0.4, rely=0.5, relwidth=0.2, relheight=0.1) Button(root, text="停止", command=lambda: pygame.mixer.music.stop()).place(relx=0.6, rely=0.5, relwidth=0.2, relheight=0.1) Button(root, text="重播", command=lambda: pygame.mixer.music.rewind()).place(relx=0.8, rely=0.5, relwidth=0.2, relheight=0.1) root.mainloop()

效果: 先吐槽一下,代码没有粘贴出应有的效果,不知道是不是我使用的姿势不对。

首先我们使用pygame库来支持音频处理,pygame是python的一个游戏库,有兴趣的童鞋可以了解一下。

pygame.init() 意思是初始化所有导入的pygame模块

music_name = StringVar() 这句话声明了一个StringVar对象,他配合Label, Button的textvarable属性来实现变量更新,界面显示字符更新的功能。

pygame.mixer.music.load(os.path.join(music_path, current_play))

加载一个音频文件

pygame.mixer.music.play()

播放加载的音频文件

Label(root, textvariable=music_name, font=('宋体', 14), justify='center', bg='#ADD8E6').place(relx=0, rely=0.1, relwidth=1, relheight=0.3)

加载一个Label控件,该label控件的文字受StingVar类型的变量music_name 控制,可以通过music_name.set() 来改变label显示的文字。

font=(‘宋体’, 14) 指定label控件的字体为宋体,字体大小为14号。justify属性用来设置label控件的对齐方式,bg 是background的缩写,指定label控件的背景色,如果要设置字体颜色,可以使用fg(foreground),用法同bg一样。

place是tk 的一种布局方式, tkinter共有三种布局方式,pack, grid, place

relx和rely是相对父控件的位置。0是最左边,0.5是正中间,1是最右边

relwidth, relheight是相对父控件的大小。例如 relwidth=0.1相当于父控件宽度的0.1倍。

lambda是匿名函数,如果一个函数不想命名又没有复杂的功能的情况下,可以使用匿名函 数,可以让代码更为简洁。如何理解lambda呢,我举个例子。

比如func = lambda x: x+1 等同于

def func(x): return(x+1)

x是入参,x+1是函数体里的执行语句并返回结果。

有些人可能会说,这些我都懂了,我如何能丰富我的界面功能了,这个也太简陋了 这里我搜集了一些给大家提供一些参考

pygame.mixer.music.load() —— 载入一个音乐文件用于播放 pygame.mixer.music.play() —— 开始播放音乐流 pygame.mixer.music.rewind() —— 重新开始播放音乐 pygame.mixer.music.stop() —— 结束音乐播放 pygame.mixer.music.pause() —— 暂停音乐播放 pygame.mixer.music.unpause() —— 恢复音乐播放 pygame.mixer.music.fadeout() —— 淡出的效果结束音乐播放 pygame.mixer.music.set_volume() —— 设置音量 pygame.mixer.music.get_volume() —— 获取音量 pygame.mixer.music.get_busy() —— 检查是否正在播放音乐 pygame.mixer.music.set_pos() —— 设置播放的位置 pygame.mixer.music.get_pos() —— 获取播放的位置 pygame.mixer.music.queue() —— 将一个音乐文件放入队列中,并排在当前播放的音乐之后 pygame.mixer.music.set_endevent() —— 当播放结束时发出一个事件 pygame.mixer.music.get_endevent() —— 获取播放结束时发送的事件

大家可以在我这个程序的基础上继续完善和改进,可以添加上一首下一首功能,也可以添加播放列表(treeview去做),感兴趣的童鞋可以加我讨论,一定知无不言言无不尽。最后通过pyinstaller打包成exe就好了,具体打包方法大家可以自行探索,另外希望大家多多支持。

最新回复(0)