相信许多同学都有听歌的爱好,可是有没有想过试试自己做一个音乐播放器呢?那么本节课我们就一起来做个迷你版的音乐播放器吧。
音乐播放器这个项目听起来是不是很难,当然如果说做一个像类似于QQ音乐或者网易云音乐这样的音乐软件那肯定是很吃力。一定是需要庞大的技术支持的。
但本节课我们做的这个播放器功能局限性很小。所以供大家自娱自乐一下就可以啦。
好了废话不多说,接下来我们就一起来看看软件做出来后的整体效果吧:
目前我们做的这个音乐播放器仅限于一个音乐播放的功能,主要呢也是想让大家认识一个新的第三方库:pygame。后期我们学完制作功能函数以后,教大家功能的扩展,比如说暂停音乐,或者播放音乐,上一首,下一首,包括调节音量等等。
pygame
pygame是python的一个第三方库,需要我们后期去自己下载。首先我们要知道pygame的作用,pygame其实相信大部分同学都能猜出来,我们每一个库,不论你是第三方库也好或者是标准库也好,每个库都有每个库相关的作用。比如说time库,他就是专门用作控制时间相关的功能的,time库里面也有很多跟时间相关的功能函数。那所以pygame这个库顾名思义的就是一个用作制作游戏相关的库的。
那今天我们就来学习一下我们今天课堂内容相关的pygame内的功能函数
首先我们要知道一个概念,就是功能函数内的方法,什么叫功能函数内的方法呢?我之前说过,库分为两种,标准库与第三方库,这两种库又包含了许许多多的库。比如说time库,easygui库等等,数不胜数,而每个库内呢又有许许多多的功能函数,比如说easygui.msgbox()当中的msgbox就是专门用来输出信息的,一般情况下我们用到的功能函数比较多。但是实际上有的功能函数下面还有自己的方法。比如说今天所学的pygame.mixer下的music方法。这个music方法就是专门用来做音乐相关的程序的。
那么我们接下来我们就来看看跟我们今天课程相关的music方法下有哪些功能函数吧:
- pygame.mixer.music.load()------这个函数的作用就是加载音乐文件路径的
- pygame.mixer.music.play()-------此函数的作用就是播放音乐流(说白了就是播放)
- pygame.mixer.music.stop()-------此函数的作用是停止播放
- pygame.mixer.init()-------初始化混音器模块
time库
time库是一个标准库,不需要我们自己下载,time库内同样有许多功能函数。但我们今天就用其中一个:
time.sleep()--------这个函数的作用是让程序暂时暂停执行,至于暂停多久,我们可以看到sleep()后面的小括号括号里面就是用来写时间的,时间单位是秒,比如说time.sleep(5),就是让程序暂停5秒钟。5秒钟后程序会执行后面的程序。
源码在此
import pygame
import time
file=['I Really Like You .mp3','四季予你.mp3']
pygame.mixer.init()
print('''
*************************
* 欢迎来到迷你音乐播放器 *
*************************
''')
s=int(input(''' 曲库内共两首歌,请选择:
0:I Really Like You
1:四季予你'''))pygame.mixer.music.load(file[s])
pygame.mixer.music.play()
time.sleep(1000)
pygame.mixer.music.stop()
那么接下来我们就一起来看看这段程序的代码吧:
首先一二行我们就不多赘述了,我们说不论你需要用到标准库抑或是第三方库,绝大部分库都是需要先进性导库这一操作的,否则无法使用库里面的功能函数。
第三行代码是我们将所有音乐文件的名字全部写进了一个列表当中用列表储存起来。但是这里有一点需要注意的是,我把音乐文件跟我们python文件放在了同一路径下,所以因此我不需要特地在音乐文件名前面特地加上它们的路径,当然这里加上也可以,但是需要知道的是,如果音乐文件没有跟python文件在同一路径下,那我们就必须规规矩矩的写上他的绝对路径。否则后面我们加载音乐的时候是加载不出来的。因为函数根本找不到你的音乐文件。
第四行代码,我们上面解释说是初始化混音器模块,说的很官方很术语化,实际上这个东西说好理解也挺好理解的,大家想象一下,就跟我们平常开电脑开手机一样,他都有一个初始化的过程。再举个例子,就像我们早晨起床不想上班不想上学一样,感觉每天早起很痛苦,但是还是得起床,于是起床以后大概有个五到十来分钟都处于头脑发懵的状态,然后这段时间过去了就感觉,美好的一天开始啦。而那段头脑发懵的时间就是你的大脑逐渐初始化的状态。初始化过去了就可以正常使用了。
五到九行代码不说了,做了个很简陋的页面,大家复制粘贴就可以啦,当然如果各位同学有更好的想法可以自己再去美化一下。
第六到八行代码其实需要跟第九行代码连起来说,此话怎讲呢?首先input里面的话我就不讲了,但是他给用户传达的信息就是,你如果输入0,那么我就播放i really like you 如果你输入1,那我就播放四季予你。所以不论用户输入0或者是1,都会被变量s所接收,那s接收后怎么用它呢?
我们可以看到第九行代码,我们上面说过这行代码是接收文件路径的,因此在后面的括号里,我们要写上文件的路径,可是音乐文件的路径我们已经存放在一个名为file的列表里面了,这应该怎么弄?没关系,我们直接写上列表名和它的文件顺序就行了,但这里有一点要知道,我们列表当中数数是从0开始数的,因此我们可以看到,在我们列表当中虽然只有两首歌,但是第一首歌的顺序是0,第二首歌的顺序是1.也就是说,假如我想听第一首歌,那么按照常理来说,应该在load后面的括号里这样写:file[0]。但是大家会发现一个问题就是我并没有在file后面的方括号里写数字,而是写了个字母s,而这个s就是我们刚才做的用来接收用户需求的变量,也就是说,我们把选择权交给了用户,用户想听哪首歌让用户自己去进行输入,我们只负责把用户输入的数据传送给s,再将s送进file后面的方括号内,这样的话电脑就会根据用户的需求去决定放哪首歌,而不是我们自己提前写一个数字放进去,这样的话电脑只会墨守成规的从第一首歌开始放起,一直到最后一首歌。用户的权力就变小了。
那么第十行代码到第十二行代码各位同学可能感觉明白,但是又有点懵,我们知道第十行代码就是播放音乐,第十一行代码是让程序休眠1000秒钟,第十二行代码是暂停播放,但是貌似第十一行代码有点尴尬,为什么呢?人家播放完了暂停就完了,中间放个休眠1000秒就尴尬,其实并不是我们想象当中的那样,如果没有第十一行代码,用户输入完数字以后,可能还没播放就运行完了,这是因为第十行代码没有延续性,他不会检测到你一首歌有多久,所以他可能稍微象征性的播放0.0几秒,可能连声音都没听到就完了,因此我们为了能让整首歌放完,选用了休眠这个功能函数,让第十行代码能延续性的执行完这首歌在暂停。
好啦,这期的内容就到这里啦,我们下次再见咯!
,