Raspberry Piをインターネットラジオ(radiko等)の再生環境にしたらとても快適だった!CUI操作編radikoやサイマルラジオを聞いてみよう!
ども、まーくです。皆さんラジオ聞いてますか?
我が家には、Amazonのecho dotやAnkerのSound Core miniなど「とりあえずラジオを聞く環境」はあったのですが、操作の手間や音質がイマイチ、時間遅れがかなりあるなどやや不満に思っていました。ラジカセ(死語?)もありません!
ふと、インターネットラジオをラズパイで聞けば良いじゃ無いか!と思い立ち、やったことをまとめました。
本記事では、ターミナルからコマンドを打って、radikoやサイマルラジオの各番組を再生することを目指します。
なんでわざわざラズパイでインターネットラジオ?という点については後半に書いてます^^
準備した物
- Raspberry Pi 3B 一式、Rapbian Stretch(9.4)
- スピーカー(LOGICOOL ステレオスピーカー Z120BW)
全体像↓
再生環境の構築
まずは、お約束のアップデートから。
sudo apt-get update
sudo apt-get upgrade
音源は、以下サイトより。使い方は後で説明します。
万能プレイヤー Mplayerのインストール
サイマルラジオなら、これだけで再生環境が整います!
sudo apt-get install -y mplayer
放送局(音源)の探し方
- パソコンでサイマルラジオにアクセスして
- 聞きたい放送局を見つけたら、
- それぞれの放送局の「放送を聞く」ボタン(音声の方)を右クリックして、
- URLをコピーします。
※URLは、〜〜.asxとなっているものを選びます。
mplayerで再生する!
ラズパイにsshでログインするなどして、mplayerの後に以下のように打ち込みます。
$ mplayer -playlist ${URL}
${URL}には、先に調べた放送局のURLを入れます。
例えば、関東の「FMぱるるん」だと以下のようになります。
$ mplayer -playlist http://www.simulradio.info/asx/fmpalulun.asx
文字がずらずらっと表示された後バッファリングが始まり、数秒したら再生が始まります。
うまく再生されたでしょうか?
シェルスクリプトにまとめる
よく聞く放送局はシェルスクリプトとしてパスが通った所に置いておくと便利です!
mkdir ~/bin/
vim radio-fmpalulun.sh
中身はこんな感じ。
#!/bin/bash
mplayer -playlist http://www.simulradio.info/asx/fmpalulun.asx
実行権をつけましょう。
chomd +x radio-fmpalulun.sh
あとは、
radio-fmpalulun.sh
と打ち込んで実行すれば放送が始まります(^o^)
radiko再生用スクリプトを入手!
ネットを探すと色々な方がradikoの録音・再生用スクリプトを紹介してくださっています。
あれこれ試してみた結果、こちらのスクリプトを使う事にしました。
git cloneします。
cd ~/git/
git clone https://gist.github.com/836952a6b09e540eb6a3.git
cd 836952a6b09e540eb6a3/
スクリプトを修正する
記事執筆時点ではこのままでは再生されません。
radikoのプレーヤー変更に合わせてスクリプトを修正(※)する必要があります。
※修正方法はコチラの情報を参考にしました。
これに加えて、ワーキングディレクトリを/dev/shm にしたりと少々手を加えています。
変更内容はコチラ。(diffの結果なので、パッチファイルとして保存して使えます)
--- org/radiko.sh 2018-05-17 00:45:28.361873732 +0900
+++ radiko.sh 2018-05-12 18:29:19.133089875 +0900
@@ -2,8 +2,10 @@
# https://mtunn.wordpress.com/odroid-u2★セットアップ/radikoの録音・再生(archlinux)/
pid=$
-wkdir='/var/tmp'
-playerurl=http://radiko.jp/player/swf/player_3.0.0.01.swf
+#wkdir='/var/tmp'
+wkdir='/dev/shm'
+#playerurl=http://radiko.jp/player/swf/player_3.0.0.01.swf
+playerurl=http://radiko.jp/apps/js/flash/myplayer-release.swf
playerfile="${wkdir}/player.swf"
keyfile="${wkdir}/authkey.png"
auth1_fms="${wkdir}/auth1_fms_${pid}"
@@ -50,7 +52,7 @@ authorize() {
# get keydata (need swftool)
#
if [ ! -f ${keyfile} ]; then
- swfextract -b 14 ${playerfile} -o ${keyfile}
+ swfextract -b 12 ${playerfile} -o ${keyfile}
if [ ! -f ${keyfile} ]; then
echo "[stop] failed get keydata (${keyfile})" 1>&2 ; exit 1
@@ -62,8 +64,8 @@ authorize() {
#
wget -q \
--header="pragma: no-cache" \
- --header="X-Radiko-App: pc_1" \
- --header="X-Radiko-App-Version: 2.0.1" \
+ --header="X-Radiko-App: pc_ts" \
+ --header="X-Radiko-App-Version: 4.0.0" \
--header="X-Radiko-User: test-stream" \
--header="X-Radiko-Device: pc" \
--post-data='\r\n' \
@@ -95,8 +97,8 @@ authorize() {
#
wget -q \
--header="pragma: no-cache" \
- --header="X-Radiko-App: pc_1" \
- --header="X-Radiko-App-Version: 2.0.1" \
+ --header="X-Radiko-App: pc_ts" \
+ --header="X-Radiko-App-Version: 4.0.0" \
--header="X-Radiko-User: test-stream" \
--header="X-Radiko-Device: pc" \
--header="X-Radiko-Authtoken: ${authtoken}" \
パッチファイルとして使う場合、上のテキストを全てコピーして、radiko.sh.patchとして保存します。
git cloneした radiko.shがあるディレクトリにパッチファイルがあるとして、
$ patch radiko.sh < radiko.sh.patch
とすればOKです。
念のため正しく書き換えられているか確認してください。
ついでに実行権も付与しておきます。
chmod +x radiko.sh
追記(追加でインストールするもの)
新しく環境を構築していたらインストールが必要なものがあったので追記します。
スクリプト実行時にこんな感じで色々足りないと言われました。
./radiko.sh: 行 55: swfextract: コマンドが見つかりません
./radiko.sh: 行 132: xmllint: コマンドが見つかりません
./radiko.sh: 行 166: rtmpdump: コマンドが見つかりません
./radiko.sh: 行 151: ffmpeg: コマンドが見つかりません
ということで、まとめてインストールしておきましょう。
sudo apt-get install swftools rtmpdump libxml2-utils ffmpeg
radiko.shで再生する!
では、再生してみましょう!
pオプション(play mode)に、ラジオNIKKEI第2(RN2)を指定します。
./radiko.sh -p RN2
一定時間経過後に自動で停止するようにするためにはtオプションで分単位の数字を指定します。
./radiko.sh -p -t 1 RN2
開始から1分で切れると思います!
チャンネル(放送局コード)を調べる
指定できるチャンネルはたくさんあります。
ラジオNIKKEI第1 RN1
ラジオNIKKEI第2 RN2
…
放送局一覧をAPIで提供してくださっているサイトがありますので、コチラでご自身の地域で聞けるチャンネルを探してみてください!
なぜ、ラズパイでインターネットラジオを聞くのか?
パソコンのWebブラウザを使えば簡単に再生できるし、radikoのスマホアプリもあるのになぜ?
と思われるかもしれません。
それには理由があります!
マークがラズパイ環境をオススメする理由はコチラ。
- スマホを占有されたくない
- PCのシステム音に邪魔されない & 作業の邪魔にならない
- 流しっぱなしでも気にならない
- タイマー/アラーム再生ができる
- 安定のコマンド駆動
カラダの一部、生活の一部に組み込まれているPCとスマホ。
スマホをチェックしながらPCをいじるのは日常茶飯事。なので、作業中のパソコンから操作はできるけれど、極力邪魔にならない方法が必要でした。
朝の目覚めにラジオをかける
cronにコマンドを登録して、モーニングコールとして指定したラジオをかける方法です。
まず、ラジオ再生用のスクリプトを作っておきます。
mplayerを使用する場合は、時間が経てば自動的に切れるようtimeoutコマンドで300秒(5分)を指定しています。
スクリプトは、piのホームにあるbinディレクトリに設置します。
cd ~/bin/
スクリプトを編集します。
vim morning-radio.sh
#!/bin/bash
# サイマルラジオの場合(mplayerをtimeoutコマンドで終了させます)
timeout 300 mplayer -playlist http://www.simulradio.info/asx/fmpalulun.asx
# radiko.shの場合はコチラ(↑の行をコメントアウトして、↓の先頭#を消して下さい。
# /home/pi/bin/radiko.sh -p -t 5 RN2
実行権を付けます。
chmod +x morning-radio.sh
crontabで毎朝7時30分に実行するように指定します。
crontab -e を実行して、以下のように編集します。
# m h dom mon dow command # この行の下に記入して保存。
30 7 * * * /home/pi/bin/morning-radio.sh
これで毎朝7時半にラジオが流れるようになりました!
ラジオを録音してDropBoxにアップロードする
コメントでリクエストがありましたので追加しました。ラズパイで録音したラジオをDropBoxにアップロードすると、スマートフォンを使っていつでも録音したラジオを聞くことができるようになります。
まずは、アップロードできる環境をこちらの記事を参考にして構築しておいて下さい。
録音する
radiko.shには録音機能がありますのでこれを利用します。以下のような書式で指定します。
radiko.sh -d 出力先 -f ファイル名 -t 録音時間(分) -s 00:01:00 CH
例えば、ラジオNIKKEI第2を1分間録音する場合はこのようにします。
radiko.sh -d /dev/shm/ -f RN2 -t 1 -s 00:00:00 RN2
※「-s 00:00:00」の部分は無くてもOK。
ファイルの出力場所は一旦/dev/shm/にしていますが、録音時間が長いとファイルサイズがオーバーする可能性もあるので注意してください。
ちなみに、1分録音した際のファイルサイズは349KBでした。1時間で約20MBといったところ。
なお、詳しい説明は作者の投稿に記載されています。
これでいつでも好きな時間に録音できるようになりました。
DropBoxにアップロードする
先のコマンドを実行すると「/dev/shm/RN2.m4a」というファイルができあがります。これをDropBoxのアプリ下にあるフォルダ(radiko/)にアップロードしましょう。
これだけ!(「dropboxuploader.sh」があるディレクトリで実行して下さいね!)
./dropboxuploader.sh upload /dev/shm/RN2.m4a radiko/
cronで定期的に録音してDropBoxへ。
うまくアップロードできることがわかったら、cronで定期的に実行するようにしてみます。
録音&アップロードのスクリプトを作成します。
vim ~/scripts/radiko-uploader.sh
中身はこんな感じで。
#!/bin/bash
## 各スクリプトを絶対パスで指定
RADIKOAPP='/home/pi/scripts/radiko.sh'
DROPBOXAPP='/home/pi/scripts/dropbox_uploader.sh'
TEMPDIR='/dev/shm'
if [ $# != 2 ]; then
echo "Useage: $0 [Channel] [rec_time]"
exit
fi
CH=$1
MIN=$2
FNAME="$(date '+%Y%m%d-%H%M%S')_${CH}"
echo "Rec: Ch.=$1, Time=$2 min., File=${FNAME}"
## 録音
${RADIKOAPP} -d ${TEMPDIR}/ -f ${FNAME} -t ${MIN} -s 00:00:00 ${CH}
## アップロード
${DROPBOXAPP} upload ${TEMPDIR}/${FNAME}.m4a radiko/
## 一時ファイルの削除
### アップロードの成功・失敗判定はしていないので、不要な場合はコメントアウトしてください。
rm ${TEMPDIR}/${FNAME}.m4a
ここまでできたら、cronに登録します。例として、毎日朝10時から1時間、ラジオNIKKEI第2を録音する場合を示します。
0 10 * * * /home/pi/scripts/radiko-uploader.sh RN2 60
これで、毎朝10時から60分間録音してアップロードされるようになりました!
まとめ: ラズパイでインターネットラジオを聞くにはmplayerやradiko.shが使える。
Raspberry Piに安価なスピーカーを接続してインターネットラジオの再生環境を作りました。
apt-getで簡単にinstallできるmplayerや、有志の方が作って下さっているradiko.shを修正して手軽にインターネットラジオを聞ける環境が整いました!
今後はGUIを付けてタッチパネル付きディスプレイで操作したり、JuliusやAlexaを使って操作できるように拡張してみたいと思います(^o^)
それではみなさん、よいラズパイ生活を!
参考サイト
はじまりはここから!
radikoの録音・再生スクリプトでお世話になりました。
スクリプトの修正でお世話になりました!
timeoutコマンドを知りました!
ディスカッション
コメント一覧
これで定期的に録音してDropboxにアップロードしてくれる方法もお願いします。
Raspbianの場合で
方法を追加してみました。試してみて下さい。
有難うございます!
助かりました。!
こう言うサイトがあるとラズベリーパイ生活が捗ります!
うまく行ったようで何よりです(^_^)
また何かあればお気軽にコメントを!
ラジオNIKKEIを録音するのを一から、やってみたのですが、うまく行きません。
これは2019年3月も有効ですか?
自分の環境では現時点でも問題無く録音できました。
具体的に何がうまくいかないか書いてもらえますと何かしらアドバイスできるかもしれません。
ちなみに、ラジオNIKKEIは23時〜5時ぐらいまでradikoでの放送を休止しているので、その時間帯を録音しようとすると無音になります。
こんにちは
こんな簡単に聴けるのか! で やってみました。
ラズパイゼロWでは、$ mplayer -playlist ${URL} では、
エラーが出て再生できませんでした。
ラズパイゼロWにインストールした、軽めのOSの中にVLCが有るので
(プリインストール)これを試したところ、超簡単!「一発でOK」でした。
海外の高音質局は、高音質で
国内のコミュニティFM(JCBK)局は、それなりの音質で聴けます。
ラズパイゼロWはWifi接続です、ラズパイのUSBジャックに
OTGケーブルでUSBスピーカー(今回はサンワサプライの廉価品
MM-SPU4BK)を繋いでいます
再生は、開通時、片チャンエルが遅れて音が出て来ます。
これは、ラズパイの処理能力のせいかな?
選局先を替えても、この現象は同じです。
片chが混ざって音がおかしくなるのではなく、遅れて通電された見たいな
感じです(丁度、真空管アンプの冒頭見たいに?)
ステレオになっているともいます。
海外のHD320kbpsの高音質局も、とても心地良く再生しています。
ラズパイの電源はACアダプターからです。
USBスピーカーはラズパイから電気を貰ってます。
DACボードは、要りませんね。
BGMでラジオを聞いている状態です。
電波とは違うので、ノイズは無いですが、回線の影響か
CPUの能力か?たまに音声がブツブツ切れる事が有りますが、ご愛敬程度です。
ESP32とDACボードでもネットラジオを聞いていますが、
ラズパイゼロWだけで、ネットラジオ、これは一番お安い構成です。
ただ、選局が面倒、選局時はPCを起動してVNCから
VLCに選局先のURLを入力しなくてはなりません。でも、自由に選べます。
CLIではまだ、VLCにどう指示を出したら良いのか解りません。
ラズパイの動きが「超~~~遅くとも}VNC接続でGUIで動かした方が、簡単です。
ESP32とDACボード組では、局リストは予めリストファイルに書いて措かなくては
ならないので、今、ひとつ不便。
今回、こちらの記事のお陰で、
ネットラジオの聴取の一方を、またひとつ見つけられて良かったです
私は録音には関心はありませんので、聴けるだけでOKです。
ありがとうございます。