文章目錄
簡介
前段時間有人發貼說用樹莓派可以發射FM收音機訊號, 於是便整來玩玩,發現效果還不錯,於是想擴充一下功能。
網上實現的FM發射功能是有局限性的:
- 只能播放wav格式檔案,並且wav檔案必須是
16 bit 22.5kHz Mono格式的。
- 只支援播放本地音頻檔案,或者使用
-從終端讀取音頻
我設想的或已經實現的功能是這樣的:
- 支援mp3格式
- 支援流媒體,或者說支援直接播放網路上的音樂
- 可以添加音樂,方便管理
- 可以大量新增歌曲
- 可以播放區域網路內電腦上的音樂
- 自動根據歌名線上搜尋歌曲並播放
- 有一個web頁面,允許任何人添加自己喜歡的歌曲
- web頁面顯示當前現正播放的歌曲和將要播放的歌曲列表
- 當播放清單裡面沒有歌曲的時候自動全部隨機播放一首歌曲,保證連續播放
- 可以跳過現正播放的歌曲播放下一曲
安裝我做的系統之後你就可以用樹莓派做伺服器, 發送廣播,播放流行歌曲或者英語聽力(或者法律允許播放的東西) 告訴親朋好友一個網址,然後他們就能在上面點歌。 四六級沒過的朋友可以添加四六級聽力,類比真實考試環境。 或者放到敬老院裡面,給老年人播放戲曲。 除此之外,只要程式運行著,你就能用收音機聽到音樂, 不用天天費神去網上找歌了。 這樣也為你的手機節省好多儲存歌曲的空間,因為有了樹莓派和我的點歌系統, 你用手機上的收音機就能聽到想聽的歌曲。 我的系統不會給樹莓派增加任何垃圾,所有網路歌曲不緩衝, 不用擔心歌曲過多而將儲存卡填滿。
關鍵技術與原理
因為樹莓派只支援wav格式音樂,所以要將mp3格式轉換成wav格式。
但是一般軟體轉換效率比較低,樹莓派CPU比較差,轉換時間更長。
後來我找到一個比較好的解決方案,用mpg123這個軟體進行解碼, 解碼之後輸出到終端上,這時就已經轉換成wav格式了。 然後樹莓派的pifm程式設定成從終端讀取音頻, 這樣再通過一個管道將兩個程式連起來,就能實現一邊解碼一邊播放
另外,mpg123的功能比較強,支援直接播放網路音樂, 也就是說,只要給mpg123傳遞一個歌曲url,就能實現邊下載邊播放
上面的文字用一條命令總結就是:
mpg123 -m -C -q -s 歌曲地址或url | sudo pifm - 頻率 歌曲採樣率例如mpg123 -m -C -q -s /home/pi/aaa.mp3 | sudo pifm - 98.5 44100mpg123 -m -C -q -s http://abc.com/123.mp3 | sudo pifm - 98.5 44100
上面的命令看起來很簡單,費了半天勁才鼓搗好,因為命令的參數很多, 組合起來讓他們協調工作就需要不斷嘗試!
解決了這個技術難題,下面的任務就簡單了,對於pythoner來說, 下面提到的東西都不叫事!^_^
簡單列一下:
- 歌曲是從搜狗mp3抓的,只要輸入歌曲的名字,自動搜尋,返回歌曲url
- web管理介面用web.py實現,即時顯示現正播放的歌曲和歌曲列表
- 資料庫用sqlite3,用來儲存使用者輸入的歌曲資訊,方便日後資料分析
- 如果列表為空白則從本地播放清單(文字檔)隨機選一個播放
安裝部署方法
為了簡化安裝部署,我專門寫了一個安裝指令碼,就是setup.sh, 直接執行就能安裝。(注意,本系統樹莓派專用,請不要在電腦上執行此指令碼)
wget https://github.com/ma6174/fmpi/archive/master.zipunzip master.zipcd fmpi-mastersudo bash setup.sh
這樣就自動安裝依賴的軟體
使用方法
啟動並執行話可以直接執行程式裡面的start.sh:
sudo bash start.sh
然後在樹莓派的GPIO4這個引腳上插上一根杜邦線當天線
用ifconfig命令察看你的ip地址,然後在瀏覽器上開啟:http://樹莓派IP:8000/, 可以看到現正播放的歌曲,然後你可以添加你想要收聽的歌曲。
開啟收音機,調到FM 98.5頻道,你就能聽到現正播放的歌曲了!
如果感覺這首歌不好聽,可以直接按樹莓派的鍵盤的q鍵,自動播放下一曲
想終止程式的話按Ctrl + c
可以修改config.py修改預設的98.5這個播放頻率。
其他
對本系統感興趣的話可以去github上查看源碼,擴充系統功能: https://github.com/ma6174/fmpi
任何問題和建議可以留言或email聯絡我:ma6174#163.com
gtalk:ma617495#gmail.com