できること

第13回「ラズベリーラジオ前編 – インターネットラジオ受信と遠隔操作」

raspberrypi13_main
ようやく音が出るようになったRaspberry Piで、今回は念願のインターネットラジオ受信に挑戦!前回の終わりにご紹介した公式サイトのフォーラム記事を読んでおいたので、予習もばっちりです!

今回は、Raspberry Piの外からも操作してみたいと思います。

 

インターネットラジオを聴いてみよう!

インターネットラジオ – Wikipedia
インターネットラジオとは、インターネットプロトコルを通じて、主として音声で番組を配信するインターネットのコンテンツの一形態である。単にネットラジオ、またはウェブラジオ、ネトラジ、IRともいう。
ラジオと称してはいるが、電波ではなくインターネット上にて配信されるため、パソコン・スマートフォン等を利用し聴取する。

インターネットラジオ局の案内サイト – Wikipedia

日本国内だけでなく海外のラジオ放送も手軽に聴くことができるのが、インターネットラジオの魅力ですね!最近ではスマートフォンアプリが充実して、インターネットラジオがより身近なものになってきました。(個人的には音楽番組やローカルFM局の放送をよく聴いています!)

今回参考にした公式サイトのフォーラム記事ではいくつかのインターネットラジオの受信方法が紹介されていますが、その中でも「SHOUTcast」「サイマルラジオ」「ねとらじ」 の3つは、なんとパッケージ1つで聴くことができるらしいです!ということで、まずは「SHOUTcast」の受信に挑戦してみることにしました。
今回使用するのは「mplayer」というパッケージです。

Mplayer – Wikipedia
MPlayer(エムプレーヤー)は、オープンソースのメディアプレーヤーである。GNU General Public License下で配布されるフリーソフトウェアであり、Linux・Unix系OS・Mac OS X・Windowsなど多くのOSに対応している。

再生が可能なフォーマット多数!音声だけでなく動画にも対応している便利なパッケージです。たいていのメディアファイルは「mplayer」ひとつで再生できそうですね!

公式サイト
いろいろな言語のドキュメントが用意されていますが、残念ながら日本語がない……。

LX Terminalから、いつものコマンドでインストールしましょう。
「-h」オプションを付けて実行すると、コマンド用のオプション値とキーボード入力の一覧を表示することができるので、最初に目を通して操作方法を頭に入れておくとスムーズに進められます。

apt-get install mplayer
mplayer -h
raspberrypi13_img01

図1

ラジオ受信の前に、mp3ファイルでテスト実行!コマンドの指定方法も、先程のオプション一覧画面に表示されています。前回使用した「mpg321」と同じフォーマットなので分かりやすいですね。

mplayer /root/Holst-Planets-Jupiter.mp3
raspberrypi13_img02

図2

mp3ファイルを再生してみました!
うまく再生できると、このように、コンソールにずらっとファイルの情報が表示されます(タイトルとアーティスト名が日本語で設定されていたので文字化けしてしまっていますが……)
再生中にキーボード入力をした際も、操作内容が表示されるので、きちんと処理が行われているかどうかが視覚的に分かりやすいです。

さて、「SHOUTcast」のラジオ番組を再生するには、「-playlist」オプションの後に、URLを指定します。
URLはSHOUTcastのウェブサイト上のリンクから取得しましょう。

raspberrypi13_img03

図3

SHOUTcast

図のように、ダウンロードアイコンに合わせて、URLを確認しましょう。「 http://yp.shoutcast.com/sbin/tunein-station.pls?id= 」までは共通なので、末尾のid番号を調べればOKです。

mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=172098

コマンドはこのようになります。入力して実行すると、

raspberrypi13_img04

図4

受信成功!ラジオの情報がコンソールに表示されました!
音楽ファイルを再生したときとは違い、ネットラジオはずっと流れ続けてしまうので、終了するときにはキーボードの「Q」キーまたは「Escape」キーを押しましょう。

「サイマルラジオ」と「ねとらじ」も基本的に同じ手順で視聴できたので、こちらも手順を簡単にご紹介します!

raspberrypi13_img05

図5

サイマルラジオ

「音声を聞く」アイコンのリンク先のURLを指定して、SHOUTcastと同じコマンドで受信が可能でした。局によっては放送時間が決まっているので、確認してから試しましょう。

mplayer -playlist http://wm.sankakuyama.co.jp/asx/sankaku_24k.asx
raspberrypi13_img06

図6

ねとらじ

こちらも同じく「PLAY」ボタンのURLを使用するのですが、そのまま視聴ページに遷移して、ブラウザのURLバーから取得しても同じです。「PLAY」ボタンをクリックすると、図のようなプレイヤーの画面になります。

raspberrypi13_img07

図7

ねとらじの場合は、直接聴けるので「-playlist」オプションは不要でした。

mplayer http://std1.ladio.net:8010/koreiina

 

別端末から鳴らしてみよう!

毎回Raspberry Piから操作するよりも、手近にあるパソコンやスマートフォンから操作できたらもっと便利……ということで、外部からRaspberry Piにアクセスして音を鳴らしてみたいと思います!

まずは下準備。Webサーバとして利用するためにApacheと、コマンドを呼び出すためのプログラムにPHPを使用したいと思います。各パッケージをインストールして、一度再起動しておきましょう。

apt-get install apache2 php5
reboot

次に、外部の端末からアクセスするために、Raspberry Piに割り振られているIPアドレスを調べます。環境によっては「http://raspberrypi/ 」のようなネットワーク名でも接続できるようですが、IPアドレスの方が確実です。(iPhoneのsafariからではうまくアクセスできませんでした)

IPアドレスを調べるには「 ip 」コマンドを使用します。オプション値「a」を使用して実行しましょう。
「 ipconfig 」コマンドでも確認できますが、長年メンテナンスされていないため、現在は非推奨となっています。

ip a
raspberrypi13_img08

図8

このように結果が表示されます。Raspberry Piに割り当てられているIPアドレスは「192.168.0.14」ということが分かりました。

IPアドレスが分かったところで、別のパソコンのブラウザからアクセスしてみましょう!

raspberrypi13_img09

図9

同ネットワーク内にあるWindowsマシンから「 http://192.168.0.14/ 」にアクセスした結果です。

raspberrypi13_img10

図10

こちらはスマートフォン(iPhone5)から。問題なくアクセスできました!

デフォルトの初期表示画面は、Raspberry PiにインストールしたApacheのドキュメントルートである「 /var/www/index.html 」のファイルを表示しています。

このフォルダの中に、コマンドを実行するプログラムを設置します。「mplayer」を使って音楽ファイルを再生するコマンドを発行するだけの、シンプルなプログラムを用意しました。(index.htmlは削除して、index.phpがデフォルト表示されるようにしました)

/var/www/index.php

<?php
exec("mplayer /root/Holst-Planets-Jupiter.mp3");

外部の端末からRaspberry Piにアクセスしてみましょう!Raspberry Piのスピーカーから音楽が流れ始めます!
もしうまくいかない場合は、Apacheの権限で制限されている場合があります。エラーの内容は「 /var/log/apache2/error.log 」にあるエラーログファイルを確認しましょう。
わたしの環境では、最新版のapatch2パッケージを再インストールし、デフォルトのユーザー名である「www-data」を「audio」グループに追加すると成功しました。

usermod -G www-data,audio www-data 

次はラジオを再生!mp3ファイルのパスを、SHOUTcastのプレイリストのURLに書き換えました。「-playlist」オプションも忘れずに付けましょう。

/var/www/index.php

<?php
exec("mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=172098");

再生成功!
……と行きたいところですが、このままだと再生を止められない!(そしてローディングも止まらない!)
まずは再生を止める方法を探さなくては!

こちらのページによると、プロセスIDごとにプログラムを終了させる「kill」コマンドと、同じプロセス名のプログラムを全て終了させる「killall」コマンドの2種類があるそうです。
まずは「kill」コマンドを使った方法を試してみました。「ps」コマンドを使って、プロセスIDを調べます。

ps -A | grep 'mplayer'
raspberrypi13_img11

図11

kill 3029

コマンドを実行すると、無事に再生が止まりました……これで一安心!
「killall」コマンドを使う方法も試してみました。こちらはプロセス名である「mplayer」を引数に付けるだけでOKです。

killall mplayer

こちらも無事に停止!
同プロセス名のプログラムを全て止めるというのは、ちょっと怖い気もしますが……「mplayer」を複数起動させておく必要はないので、今回の場合は問題なさそうです。

以上を踏まえて、PHPを少し編集しました!

/var/www/index.php

<?php
if(isset($_GET['id'])){
$id = $_GET['id'];
if($id=="stop"){
exec("killall mplayer");
}else{
exec("killall mplayer");
exec("mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=" .$id. " > /dev/null &");
}
}
?>
<html>
<head>
<meta name="viewport" content="width=device-width">
</head>
<body>
<p><a href="index.php?id=stop">stop</a></p>
<ul>
<li><a href="index.php?id=172098">SmoothJazz.com Global Radio</a></li>
<li><a href="index.php?id=709809">ABC Lounge</a></li>
<li><a href="index.php?id=209680">ABC Jazz</a></li>
<li><a href="index.php?id=190282">Jazzradio</a></li>
<li><a href="index.php?id=98600" >TheJazzGroove.com</a></li>
</ul>
</body>
</html>
raspberrypi13_img12

図12

スマートフォンから見るとこんなかんじ!(CSSで少しお化粧しました)
番組名をクリックすると、ラジオの再生がスタートします。別の局に切り替える場合は一度終了させる必要があるので、再生する前に「killall」コマンドで「mplayer」をリセットしています。

raspberrypi13_photo01

写真1

大きいスピーカーをセットして、社内のBGM用ラジオとして活躍中!スマートフォンをリモコン代わりにして、毎日みんなで楽しくチャンネル争いをしています(笑)

 

まとめ

インターネットラジオ受信成功!
念願のラズベリーラジオが完成しました。プログラム側で制御できるようになったことで、カスタマイズの自由度がぐっと高まりました!番組を自分で登録できるようにしたり、かわいく装飾したり、使い込みながら自分でバージョンアップしていくのも楽しそうです!

でも……もっと使いやすくしたい!
そう思って調べてみると、スマホアプリで操作する方法があるらしい!?それはぜひやってみたい!
ということで、ラズベリーラジオ後編に続きます!

アバター画像

プロフィール:プログラミング暦通算4年、最近IT業界に舞い戻ってきたプログラマーです。女子です。

学生ロボコン2017 出場ロボット解剖計画