Skip to content
Takao Takahashi edited this page Jun 28, 2020 · 10 revisions

ラジオをつくりましょう

radio PirateAudio

ラジオの方が面白いんでラジオをつくるプロジェクト

とはいえ21世紀なので6石スーパーとかじゃなくRadikoなどを活用します。

現在対応しているのはRadiko、らじるらじる、SDRによるFM受信、ストリーム再生です。

PimoroniのPirate Audio対応版もあります

何も持ってないです

Raspberry Piくらいは買って。PC+オーディオインタフェースでも何とかなるけど。 基本的にPythonが動く環境でオーディオデバイスが扱えれば動作します。

Raspberry Piだけ持ってます

python piradio.py -nogui で起動するとGUIなしで起動します。APIがあるのでブラウザでコントロールするラジオにするならアリです。 この場合、音量制御ができないので(APIに音量がない)、音量の初期値に注意してください。 ブラウザからコントロールする場合、付属のwebuiの下にあるindex_sample.phpを見ればわかるのですが、このPHPの下にstations/というディレクトリがあり、そこにstation_listという局リストとアイコンファイルがあれば見た目のダサいページが表示されます。要するにpiradioのstations/ディレクトリからシンボリックリンクを張ってくれば簡単という話です。 APIにしろwebuiにしろ超絶雑なのでLAN環境でしか使わないでください。

Raspberry Piと液晶を持っています

この場合にはGUIが使えますが、操作のために押しボタンスイッチが5個要ります。スイッチは空いているGPIOとGNDの間に接続します。プルアップもやっておくと安心ですが、ピンによってはRaspberry Piのプルアップだけでも問題ないです。

あなたが持っている液晶が何なのかわからないので液晶のセットアップ方法はよくわかりませんが、基本的にPygameで使えるフレームバッファになっていれば使えるはずです。想定解像度は320x240ドットで、開発時にはAdafruitのPiTFT mini (2.8")を使っていました。 安売りしているSPIのTFT液晶でも使えます。ただし、fbtftでサポートされており、フレームバッファとして認識されるものが必要です。試した感じではamazonとかで安売りしているもの(2.4"が安い)でも使い方がわかっているものなら、それほど苦労せずに動きます。使い方わかってるんだから、そりゃ苦労しないだろうってまあ、そうですけど。

とにかく普通版のpiradio.pyが使うディスプレイはPygameが使うフレームバッファです。Xが動く必要はありませんが /dev/fbX として認識され動作することが必要です。

かっこよくしたいです

木工が得意な人ならキャビネットを作ると格好良いです。

3Dプリンタを持っている人向けにはキャビネットの3Dデータを公開しています。

https://www.thingiverse.com/thing:4417542

このキャビネットは下に5cmスピーカーが入るので、USB接続のスピーカーで5cmのユニットを使っているものを買ってきて、分解して押し込むと簡単です。スピーカーの固定がちょいと悩むかもしれませんがネジ止めするなり両面テープで貼るなりしてください。

Pi2/Pi3とかを使う場合には穴あきのケースを使ってください。横にUSBとLANが出るのでちょっとダサいですが有線タイプにすることもできます。USBスピーカーを使う場合には隙間からケーブルを出して挿しといてください。Piがボード上のUSBヘッダを持ってればいいのですが、残念ながら付いてないので。

なんか買いたいです

何も持ってないけど何か買いたい人へのお勧めはRaspberry Pi Zero WHとPimoroni Pirate Audioです。 https://github.com/takao-t/piradio/wiki/Pimoroni-Pirate-Audio%E3%82%92%E3%83%A9%E3%82%B8%E3%82%AA%E3%81%AB%E3%81%97%E3%82%88%E3%81%86

Pirate Audioは3種類あって、どれを買うか迷うところですが、違いはオーディオ出力の方法だけなので、自分が何に接続したいかで選びます。スピーカー搭載のPirate Audioを使えば一番小さいラジオになります。

こちらも3Dプリント可能なフレームを用意しています。

https://www.thingiverse.com/thing:4420857

応用

要するにRadikoとか再生するためのフロントエンドを書いているだけなので、応用すれば他のものにも使えます。

中を見ればわかりますが、再生方式でキックするプログラムとその方法を書いているわけなので、ソース触れば応用は簡単です。

start.phpとかを見ればAPIで蹴る方法もわかるのでcronで仕込んで目覚ましにもできます。

コミュニティFMなどでもストリーム(サイマル)対応している局ならば対応は簡単です。ストリームURLがわかれば再生可能なので、局リストに組み込めるので使えます。