FMあばしりタイムフリーの機器を作ってみよう

 FMあばしりをはじめとするコミュニティーFM局では、タイムフリー放送を行っていません。
いろいろな事情があるとは思いますが、楽曲の著作権料金などが重しになっているのではないかと邪推いたします(勝手な推測です)。
カフェとか喫茶店を営んでいる方から聴いたことはありませんか?jas○acからなんだかんだと言われるって話・・。

 おっと脱線しました。
技術的には、はっきり言ってタイムフリーの実装は簡単です。なので、コミュニティー各局でもやる気になればできちゃうとは思います。でも、現状できていないということは、山より高く、海より深い事情を察するしかないのではないかと・・。

 さて、管理人は2019/04にタイムフリーの機器を完成させました。
特に高価なシステムではありません。手のひらサイズのコンピュータ、RaspberryPi3(約5000円)、MicroSD16G(約1500円)、ハイレゾ音源ボード(約2000円/中国から輸入)、放送記録用USB(64G/メーカー品 約3000円)以上です。

 かといって、誰でも簡単に作れるわけではありません。
最低限のRaspberryPiの知識、Linuxの知識、若干のI2Cボードの制御方法や設定、このあたりを知っている方向けの記事となります。

 ここでは、手取り足取りではなく、スクリプトが自分で組める方に限らせて頂きます。
詳細についてのお問い合わせはご遠慮ください。
また、他のページのような若干わかりやすい表記ではありませんし、詳細な説明は割愛させて頂いています。



HLSストリームの再生について

 RaspberryPiでHLSストリームを再生するには、vlcとmplayerを使用する方法が思いつくと思います。
いろいろと試験してみましたが、こちらの環境では、mplayerを使用した方が安定して動作していました。

 作成した機器は、GPIOでボタン入力/LEDを制御しているため、サービスを新たに作成・登録し、再生ボタンが押されたときにインターラプトで再生スクリプトを読み込むようにしています。

再生スクリプト例

<<pythonスクリプト>>

os.system(“mplayer -really-quiet -cache 2048 -vo null -ao alsa -af volume=10 http://mtist.as.smartstream.ne.jp/30058/livestream/playlist.m3u8”)


では、録音させたい場合はどうするか。
本来ならば、HLSストリームを受信しバッファにため、それを利用して再生と録音をした方がスマートですが・・・
サクっと作るため、ここではそういうことを無視して再生ストリームと録音ストリームを別で引っ張り込んでしまおうという力業を紹介します。
(この場合、ネットワーク帯域をダブルで消費します。リスラジ側では、2台の端末で聴いているという扱いになり、リスラジのランキングでFMあばしりを押し上げる効果があります。ただし、使用されているネットワークの帯域も消費しますので、狭帯域のネットワークの場合は他の通信に影響するかもしれません)

録音スクリプト例

こちらは、shスクリプトを紹介いたします。

!/bin/bash

pid=$$
date=date '+%Y-%m-%d-%H_%M'
date2=date '+%Y-%m-%d'
outdir=”.”
aspx=”http://mtist.as.smartstream.ne.jp/30058/livestream/playlist.m3u8″
station=”FMabashiri”

if [ $# -ge 1 ]; then
DURATION=expr $1 \* 60 + 45
fi
if [ $# -ge 2 ]; then
outdir=$2
fi

ffmpeg -loglevel quiet -y -t ${DURATION} -i ${aspx} -acodec libmp3lame -ab 128k -metadata title=”FM abashiri ${date}” -metadata artist=”FM abashiri streaming player(HEPPOKO)” -metadata album=”${date2}” “${outdir}/${station}${date}.mp3”
python /usr/local/bin/eyeD3 –add-image=/home/pi/logo.jpg:FRONT_COVER “${ outdir}/${station}${date}.mp3”
/home/pi/bin/gdrive upload –parent “<<googleトライブの指定したフォルダの文字列>>” “${outdi r}/${station}_${date}.mp3”

こちらは、引数を与えることで保存するディレクトリとスクリプトが起動してから維持する分数を指定できるようにしています。

 第1引数は、録音する時間を与えます。スクリプト内で*60していますので、「分」で指定します。
 第2引数は、録音したデータを保存するフォルダを指定します。

見ておわかりの通り、録音はffmpegを使用しています。

最終行は、録音したmp3をgoogleドライブへ転送する部分です。

録音スクリプトを呼び出す方法は、crontabを使うのが手っ取り早いでしょう。

 これで、基本的な録音と再生の部分のスクリプトとなります。
何で、pytohnを使ったり、shを使ったりしているか・・・これは、その場しのぎで作っているからです w
そして、ご紹介しているスクリプト群は、旧バージョンのストリーミングプレイヤータイムフリーで使用している方式です。


 録音したデータの扱いは、googleドライブにアップロードする方法と、sambaをセットアップしてLAN内NAS化し、録音したデータのディレクトリをsmb共有することによって、LAN内から自由にアクセスすることができるようになります。
(この場合、保存するディレクトリの所有者権限、sambaの権限付けに注意が必要です)

 お約束ですが、記録した音声データは、個人として楽しむものに限って利用してください。音声データの権利は、FMあばしりにあります。また、再配信などの場合は、楽曲の使用料などが発生いたします。

 ご自分で作られる方の参考になれば幸いです。