点阵字python_Python点阵字玩转动态歌词
前面我們講到了可以自定義輸入漢字,然后用點陣字來展現,接下來我們挖掘下更有趣的玩法。想法來自于聽歌時桌面動態歌詞,我們的點陣字既然可以自定義輸入識別,何不讀取歌詞文件隨著歌曲播放動態顯示呢?
下面介紹設計思路,截圖如下
歌詞lrc文件
玩過mp3的話對此應該不陌生,就是配在歌曲mp3文件邊上后綴為lrc的文件。lrc是英文lyric即歌詞的縮寫。lrc文件可以用文本編輯器直接打開,其內容分為標識標簽和時間標簽,如圖
標識標簽指 [ti:歌曲名]、[ar:歌手名]、[al:專輯名]、 [offset:時間補償值]這類介紹信息。
時間標簽指[mm:ss.ff]加對應歌詞,mm:ss.ff是分鐘和精確到百分位的秒數,當歌曲播放到特定的時間點,根據時間標簽讀取對應的歌詞文本,實現歌詞同步、動態顯示。
搞清lrc的格式,思路也就清晰了:讀取文件中的時間標簽,解析出我們需要的時間和對應的歌詞文本,定時按文本內容打印輸出點陣字。
讀取時間標簽
涉及到lrc文件的編碼格式,直接讀取會報錯,引入codecs來讀取文件。
讀取文本我采用了readlines(),讀取整個文件所有行,每行作為一個元素保存到一個列表list中。
學python的新手朋友可以回顧下讀取文件read()、readline()和這里的readlines()的區別,這里選用readlines() 是因為lrc本身不大,直接讀到列表中也方便后續操作。
接下來都是Python入門的應用,拿到讀取出的列表,遍歷列表,也就是檢查每一項,挑選出符合時間標簽格式的字符串,把字符串分離成時間數字和歌詞文本。
按時間打印歌詞
以“[00:02.88]無條件“為例,在第2.88秒時將“無條件”打印輸出,再到下一句的5.59秒,輸出下一個文本,這里我采用了比較簡單的方式:利用time模塊中的time.sleep(t) 來推遲執行命令。
這樣做忽略了執行代碼的運行時間,但是好在代碼簡單、新手友好,而且忽略的影響并不明顯。
代碼概覽
歌詞轉點陣字
通過導入定義點陣字打印方法的py文件名 import printPlay,在新的代碼文件中直接調用printPlay.printPlay()來實現。
在之前printPlay.py文件基礎上,我做了些改動,將運行printPlay.py時要執行的代碼放入main中并對__name__先做個判斷再執行。
__name__是標識模塊名字的一個系統變量:假如當前模塊是主模塊來直接執行,那么此模塊名字就是__main__,通過判斷直接執行主函數內容;假如此模塊是被import的,則此模塊名字為文件名字,跳過if語句中的內容,再被import中的文件中,通過 文件名.函數 來執行被調用的函數。
歌曲播放
歌詞問題解決,接下來是歌曲,我們選用pygame的mp3播放功能。這個需要安裝pygame, 可以通過pip install pygame來直接操作。
裝好后在py文件中import pygame ,接下來就是三行代碼來初始化、讀取、播放。
注意,要將mp3和lrc文件都放在和py文件同一個文件夾,如果改變路徑,則需要在代碼中lrc和mp3讀取處添加對應路徑。
總結
以上是生活随笔為你收集整理的点阵字python_Python点阵字玩转动态歌词的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【人工智能实验】运用贝叶斯决策理论实现手
- 下一篇: 苹果笔记本python怎么换行_pyth