愛(ài)好聽歌 用不到20行代碼做個(gè)迷你音樂(lè)播放器
相信許多同學(xué)都有聽歌的愛(ài)好,可是有沒(méi)有想過(guò)試試自己做一個(gè)音樂(lè)播放器呢?那么本節(jié)課我們就一起來(lái)做個(gè)迷你版的音樂(lè)播放器吧。
音樂(lè)播放器這個(gè)項(xiàng)目聽起來(lái)是不是很難,當(dāng)然如果說(shuō)做一個(gè)像類似于QQ音樂(lè)或者網(wǎng)易云音樂(lè)這樣的音樂(lè)軟件那肯定是很吃力。一定是需要龐大的技術(shù)支持的。
但本節(jié)課我們做的這個(gè)播放器功能局限性很小。所以供大家自?shī)首詷?lè)一下就可以啦。
好了廢話不多說(shuō),接下來(lái)我們就一起來(lái)看看軟件做出來(lái)后的整體效果吧:目前我們做的這個(gè)音樂(lè)播放器僅限于一個(gè)音樂(lè)播放的功能,主要呢也是想讓大家認(rèn)識(shí)一個(gè)新的第三方庫(kù):pygame。后期我們學(xué)完制作功能函數(shù)以后,教大家功能的擴(kuò)展,比如說(shuō)暫停音樂(lè),或者播放音樂(lè),上一首,下一首,包括調(diào)節(jié)音量等等。
pygamepygame是python的一個(gè)第三方庫(kù),需要我們后期去自己下載。首先我們要知道pygame的作用,pygame其實(shí)相信大部分同學(xué)都能猜出來(lái),我們每一個(gè)庫(kù),不論你是第三方庫(kù)也好或者是標(biāo)準(zhǔn)庫(kù)也好,每個(gè)庫(kù)都有每個(gè)庫(kù)相關(guān)的作用。比如說(shuō)time庫(kù),他就是專門用作控制時(shí)間相關(guān)的功能的,time庫(kù)里面也有很多跟時(shí)間相關(guān)的功能函數(shù)。那所以pygame這個(gè)庫(kù)顧名思義的就是一個(gè)用作制作游戲相關(guān)的庫(kù)的。
那今天我們就來(lái)學(xué)習(xí)一下我們今天課堂內(nèi)容相關(guān)的pygame內(nèi)的功能函數(shù)首先我們要知道一個(gè)概念,就是功能函數(shù)內(nèi)的方法,什么叫功能函數(shù)內(nèi)的方法呢?我之前說(shuō)過(guò),庫(kù)分為兩種,標(biāo)準(zhǔn)庫(kù)與第三方庫(kù),這兩種庫(kù)又包含了許許多多的庫(kù)。比如說(shuō)time庫(kù),easygui庫(kù)等等,數(shù)不勝數(shù),而每個(gè)庫(kù)內(nèi)呢又有許許多多的功能函數(shù),比如說(shuō)easygui.msgbox()當(dāng)中的msgbox就是專門用來(lái)輸出信息的,一般情況下我們用到的功能函數(shù)比較多。但是實(shí)際上有的功能函數(shù)下面還有自己的方法。比如說(shuō)今天所學(xué)的pygame.mixer下的music方法。這個(gè)music方法就是專門用來(lái)做音樂(lè)相關(guān)的程序的。
那么我們接下來(lái)我們就來(lái)看看跟我們今天課程相關(guān)的music方法下有哪些功能函數(shù)吧:pygame.mixer.music.load()------這個(gè)函數(shù)的作用就是加載音樂(lè)文件路徑的pygame.mixer.music.play()-------此函數(shù)的作用就是播放音樂(lè)流(說(shuō)白了就是播放)
pygame.mixer.music.stop()-------此函數(shù)的作用是停止播放pygame.mixer.init()-------初始化混音器模塊time庫(kù)time庫(kù)是一個(gè)標(biāo)準(zhǔn)庫(kù),不需要我們自己下載,time庫(kù)內(nèi)同樣有許多功能函數(shù)。但我們今天就用其中一個(gè):time.sleep()--------這個(gè)函數(shù)的作用是讓程序暫時(shí)暫停執(zhí)行,至于暫停多久,我們可以看到sleep()后面的小括號(hào)括號(hào)里面就是用來(lái)寫時(shí)間的,時(shí)間單位是秒,比如說(shuō)time.sleep(5),就是讓程序暫停5秒鐘。5秒鐘后程序會(huì)執(zhí)行后面的程序。
源碼在此import pygameimport timefile=['I Really Like You .mp3','四季予你。mp3']pygame.mixer.init()print('''************************* * 歡迎來(lái)到迷你音樂(lè)播放器 * ************************* ''')s=int(input(''' 曲庫(kù)內(nèi)共兩首歌,請(qǐng)選擇: 0:I Really Like You1:四季予你'''))
pygame.mixer.music.load(file[s])
pygame.mixer.music.play()time.sleep(1000)pygame.mixer.music.stop()
那么接下來(lái)我們就一起來(lái)看看這段程序的代碼吧:首先一二行我們就不多贅述了,我們說(shuō)不論你需要用到標(biāo)準(zhǔn)庫(kù)抑或是第三方庫(kù),絕大部分庫(kù)都是需要先進(jìn)性導(dǎo)庫(kù)這一操作的,否則無(wú)法使用庫(kù)里面的功能函數(shù)。
第三行代碼是我們將所有音樂(lè)文件的名字全部寫進(jìn)了一個(gè)列表當(dāng)中用列表儲(chǔ)存起來(lái)。但是這里有一點(diǎn)需要注意的是,我把音樂(lè)文件跟我們python文件放在了同一路徑下,所以因此我不需要特地在音樂(lè)文件名前面特地加上它們的路徑,當(dāng)然這里加上也可以,但是需要知道的是,如果音樂(lè)文件沒(méi)有跟python文件在同一路徑下,那我們就必須規(guī)規(guī)矩矩的寫上他的絕對(duì)路徑。否則后面我們加載音樂(lè)的時(shí)候是加載不出來(lái)的。因?yàn)楹瘮?shù)根本找不到你的音樂(lè)文件。
第四行代碼,我們上面解釋說(shuō)是初始化混音器模塊,說(shuō)的很官方很術(shù)語(yǔ)化,實(shí)際上這個(gè)東西說(shuō)好理解也挺好理解的,大家想象一下,就跟我們平常開電腦開手機(jī)一樣,他都有一個(gè)初始化的過(guò)程。再舉個(gè)例子,就像我們?cè)绯科鸫膊幌肷习嗖幌肷蠈W(xué)一樣,感覺(jué)每天早起很痛苦,但是還是得起床,于是起床以后大概有個(gè)五到十來(lái)分鐘都處于頭腦發(fā)懵的狀態(tài),然后這段時(shí)間過(guò)去了就感覺(jué),美好的一天開始啦。而那段頭腦發(fā)懵的時(shí)間就是你的大腦逐漸初始化的狀態(tài)。初始化過(guò)去了就可以正常使用了。
五到九行代碼不說(shuō)了,做了個(gè)很簡(jiǎn)陋的頁(yè)面,大家復(fù)制粘貼就可以啦,當(dāng)然如果各位同學(xué)有更好的想法可以自己再去美化一下。
第六到八行代碼其實(shí)需要跟第九行代碼連起來(lái)說(shuō),此話怎講呢?首先input里面的話我就不講了,但是他給用戶傳達(dá)的信息就是,你如果輸入0,那么我就播放i really like you 如果你輸入1,那我就播放四季予你。所以不論用戶輸入0或者是1,都會(huì)被變量s所接收,那s接收后怎么用它呢?
我們可以看到第九行代碼,我們上面說(shuō)過(guò)這行代碼是接收文件路徑的,因此在后面的括號(hào)里,我們要寫上文件的路徑,可是音樂(lè)文件的路徑我們已經(jīng)存放在一個(gè)名為file的列表里面了,這應(yīng)該怎么弄?沒(méi)關(guān)系,我們直接寫上列表名和它的文件順序就行了,但這里有一點(diǎn)要知道,我們列表當(dāng)中數(shù)數(shù)是從0開始數(shù)的,因此我們可以看到,在我們列表當(dāng)中雖然只有兩首歌,但是第一首歌的順序是0,第二首歌的順序是1.也就是說(shuō),假如我想聽第一首歌,那么按照常理來(lái)說(shuō),應(yīng)該在load后面的括號(hào)里這樣寫:file[0]。但是大家會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題就是我并沒(méi)有在file后面的方括號(hào)里寫數(shù)字,而是寫了個(gè)字母s,而這個(gè)s就是我們剛才做的用來(lái)接收用戶需求的變量,也就是說(shuō),我們把選擇權(quán)交給了用戶,用戶想聽哪首歌讓用戶自己去進(jìn)行輸入,我們只負(fù)責(zé)把用戶輸入的數(shù)據(jù)傳送給s,再將s送進(jìn)file后面的方括號(hào)內(nèi),這樣的話電腦就會(huì)根據(jù)用戶的需求去決定放哪首歌,而不是我們自己提前寫一個(gè)數(shù)字放進(jìn)去,這樣的話電腦只會(huì)墨守成規(guī)的從第一首歌開始放起,一直到最后一首歌。用戶的權(quán)力就變小了。
那么第十行代碼到第十二行代碼各位同學(xué)可能感覺(jué)明白,但是又有點(diǎn)懵,我們知道第十行代碼就是播放音樂(lè),第十一行代碼是讓程序休眠1000秒鐘,第十二行代碼是暫停播放,但是貌似第十一行代碼有點(diǎn)尷尬,為什么呢?人家播放完了暫停就完了,中間放個(gè)休眠1000秒就尷尬,其實(shí)并不是我們想象當(dāng)中的那樣,如果沒(méi)有第十一行代碼,用戶輸入完數(shù)字以后,可能還沒(méi)播放就運(yùn)行完了,這是因?yàn)榈谑写a沒(méi)有延續(xù)性,他不會(huì)檢測(cè)到你一首歌有多久,所以他可能稍微象征性的播放0.0幾秒,可能連聲音都沒(méi)聽到就完了,因此我們?yōu)榱四茏屨赘璺磐,選用了休眠這個(gè)功能函數(shù),讓第十行代碼能延續(xù)性的執(zhí)行完這首歌在暫停。
中音在線:在線音樂(lè)學(xué)習(xí)門戶