AJ Kipper:用Python写一个简易的MP3播放器

用Python写一个简易的MP3播放器

前言

最近在学习Web.py框架的时候,了解了基本的Python连接数据库(MySQL)的方法。学完后,总想用它来干点啥,于是,就想能不能写一个MP3播放器。一开始大概的想法是一方面实现连接MySQL数据库,可以进行歌曲的存入和删除;另一方面实现在终端控制歌曲的播放和停止等功能。

产品设计

既然做一个项目,一开始要做的肯定不是编程,而是项目设计,从产品功能层面开始,再到程序实现层面。

产品层面还算简单,毕竟不用考虑太细节的用户体验,先把框架搭建出来。

界面信息

显示可播放的歌曲

显示功能操作信息

功能操作

点击播放

点击停止

点击继续

删除歌曲

增加歌曲

产品层面大概就这样了,因为我没打算写客户端界面(虽然可以用Python的GUI包PyQt来实现),先把功能实现再说。

程序框架

现在来考虑程序的实现层面。

从最简单的开始吧,那就先写界面。于是,写了下面的main.py模块:


第九行为:unction_dict={"1":"play","2":"stop","3":"continue","4":"delete","5":"upload"}

终端运行一下,看看效果:

逻辑是设定好了,输入指令,调用相关函数,输出相关信息。下一步我想的是完善捕获异常输入,比如说,如果用户输入的指令不在范围内,程序岂不是崩溃了!

但是这个都比较简单,也就是增加一些判断逻辑嘛,所以不给代码了,待会一块给。

MySQLdb的使用

前面的代码相信大家都能看明白。接下来就是数据库方面了,先要写一个数据库模块提供操作接口。这个是重点,我就一点一点讲吧。

首先,你得确认电脑安装了MySQL和Python用于操作数据库的模块MySQLdb哦,安装方法就不在这里说了,自行解决,乖~(~( ̄▽ ̄)~)

先来连接数据库。

con=mdb.connect(host="localhost",user="root",passwd="ha",db="Pydb")

就先讲讲这一条语句吧,调用MySQLdb模块下的connect方法,获取一个数据库连接类对象(con)。再看看里面的参数host,user,passwd,db,这4个容易理解,就是①数据库地址,②用户名,③密码,④数据库名字。注意:不了解MySQL的童鞋,这里的数据库名字db不是指你安装的数据库的名字,比如直接写MySQL。而是你在进入了数据库,新创建database的那个名字,忘记了可以用 show databases 指令来查看。

这4个参数是最基本的参数,有些人还会增加端口号比如port = “3306”,还有charset = “utf8”,首先,port是端口参数,由于MySQL默认端口是3306,所以不用写了,你要加上也行别写错。charset参数是中文编码方式,我建议大家加上,不然存中文数据的时候可能会出错。我这里没加的原因是,我在自己的MySQL配置文件上把编码方式全部设置成了utf8,所以不用啦!(=Ω=)

如果你认为这就是connect的全部参数那就错了,那些不常用的参数在下面文档里有写。

http://structure.usc.edu/mysqldb/MySQLdb-3.html

接下来用connect对象获取一个cursor对象,再用cursor提供的方法来进行数据库操作,cursor下的方法主要分为两方面,执行命令和接收参数,在这个项目中,我用了cursor.execute( )来执行单条数据库命令,用了cursor.fetchall( )来接收所有的返回值。更多的cursor方法这里就不列了。

例子:(具体用法请看注释)


数据库操作方面最重要的知识点就这些了,等等,还有些问题要想清楚,歌单信息table是要预先创建吧?table的结构具体包括什么呢?

我想了一下,列出了下面这个表格:

idnamesingerpath

int(11)varchar(20)varchar(20)varchar(60)

所以,我先在终端进入MySQL里,直接用MySQL语言创建了一个名为Pydb的database,然后创建了一个名为Song的table,结构如下。


当然,以上的database和table创建,用Python也是可以实现的,因为这些东西只执行一次,所以我就没有写进这个项目里面。但是要注意,对数据库所有数据删除或者写入操作,最后都要加上commit()指令,不然Python程序运行结束,对数据的操作是没有保存的。如下:


接下来写了一个数据库接口的模块,mdb.py


实现播放MP3文件

看来,数据库方面的接口已经写好了,我好像忘记了一个最核心的问题:怎么来播放MP3文件?

说实话,解决这个问题的过程中很有趣也很蛋疼。

第①种方案

一开始,我想的是看看mac终端有没有什么shell命令或者接口可以直接播放MP3文件的,在网上搜寻了许久,终于找到一个”open path*.MP3″命令来播放MP3文件,怀着激动的心情,在终端试了试…结果终端打开了默认播放器iTunes来播放,这不是我想要的啊,我要的是在终端直接播放文件而不依靠任何其他软件。

第②种方案

接着又在网上搜寻者,突然发现一个亮瞎我双眼的python模块 —— mp3play(~~~///(^v^)\\\~~~)

上面给出的代码说这样就可以播放mp3文件:


我赶紧下了这个模块,在程序中 import mp3play 的时候,却提示:mp3play 模块不适用当前系统,而适用于Windows系统….好吧,原来这个模块只适用于Windows系统.(╮(╯3╰)╭)

第③种方案

没事,有问题就解决,我接着寻找。既然mac没有提供这些接口给终端,那么Xcode中用Objective-C肯定能调用底层接口吧?不然mac系统怎么编写音乐播放客户端?于是求救一个IOS开发的程序员,结果他说接口是有,但是写出来之后无法用Python来控制啊,因为OC程序的接口是不对外的,像是一个封装的箱子,用户只能操作按钮,不能往里面塞东西,那也就还是不行…#!- _ –

卧槽,没辙了,先用第①种方案,调用iTunes来播放吧!#!→_→

问题又出来了,怎么实现暂停和继续播放功能?

还好,Mac终端有”kill -STOP process_pid” 和 “kill -CONT process_pid” 两个指令来控制一个进程的暂停和继续。所以,也就是我只要找出iTunes进程的pid,就可以实现控制它的暂停和继续了。

这时候要用到psutil模块,psutil可以实现查看cpu的信息、查看内存信息、查看系统启动时间、查看网卡信息等等,具体的功能可以看官方文档:psutil documentation,也可以去github看:giampaolo/psutil。

下面是getpid.py文件:


其实框架已经写好了,用简单的图表示一下:


然后第一版代码出来了,实现了基本功能,但是对输入的异常处理不够,还望各位有兴趣自己去填充吧。

main.py


mdb.py


getpid.py


在终端测试一下:

在终端进入这个项目的文件,输入Python main.py即可启动。


基本的功能实现了,不过这个项目理论上来说并没有实现MP3播放功能,而只是写了一个控制iTunes的Python脚本,有点伤心啊,如果哪位知道怎么调用底层接口(Mac),实现终端直接播放MP3文件的话,可以告诉我呀(*O_O*)!

后续

后来心有不服,还是去网上各种搜寻,终于搜出一个名叫sox的程序,安装在Mac OX系统中,用play path*.mp3命令即可以播放,播放效果太酷了(*>_<*),如下:



连这首歌的播放时间等信息都有,可还是失望一场!!因为sox是音频处理程序,只能播放,不能停止和继续,只能用Control + z强行退出,那也就是退出Python程序了,然并卵,宝宝心里好桑心!#!Q_Q

总结

这个项目主要是为了熟练MySQLdb模块而做的,当然还可以锻炼自己对module和函数的调用,如果有编程风格方面的缺陷,希望大家可以评论给我指出来,还是学生一枚,轻喷(⊙.⊙)

你可能感兴趣的:(AJ Kipper:用Python写一个简易的MP3播放器)