愛好聽歌 用不到20行代碼做個迷你音樂播放器
相信許多同學都有聽歌的愛好,可是有沒有想過試試自己做一個音樂播放器呢?那么本節課我們就一起來做個迷你版的音樂播放器吧。
音樂播放器這個項目聽起來是不是很難,當然如果說做一個像類似于QQ音樂或者網易云音樂這樣的音樂軟件那肯定是很吃力。一定是需要龐大的技術支持的。
但本節課我們做的這個播放器功能局限性很小。所以供大家自娛自樂一下就可以啦。
好了廢話不多說,接下來我們就一起來看看軟件做出來后的整體效果吧:目前我們做的這個音樂播放器僅限于一個音樂播放的功能,主要呢也是想讓大家認識一個新的第三方庫:pygame。后期我們學完制作功能函數以后,教大家功能的擴展,比如說暫停音樂,或者播放音樂,上一首,下一首,包括調節音量等等。
pygamepygame是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 pygameimport timefile=['I Really Like You .mp3','四季予你。mp3']pygame.mixer.init()print('''************************* * 歡迎來到迷你音樂播放器 * ************************* ''')s=int(input(''' 曲庫內共兩首歌,請選擇: 0:I Really Like You1:四季予你'''))
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幾秒,可能連聲音都沒聽到就完了,因此我們為了能讓整首歌放完,選用了休眠這個功能函數,讓第十行代碼能延續性的執行完這首歌在暫停。
中音在線:在線音樂學習門戶