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