Raspberry PiをMPDサーバにする方法は既に紹介しましたが、MPDを利用してSHOUTcastのクライアントにすることもできます。
我が家では、Windows上にWinampとshoutcast-dsp、そしてIcecastを組み合わせて、BGMサーバーを構築しています。お気に入りの曲を多数登録し、24時間ランダム再生しています。
SHOUTcastは、著作権フリーの楽曲をインターネットラジオ配信のために使うのが一般的な利用方法ですが、うちではインターネットには公開せずに、自宅内BGMサーバーとしています。そして、枕元にオリンパスのVJ-10を置き、それにRaspberry Piをつないで、おやすみタイマーをセットして、就寝用BGMを鳴らしています。
オーディオ用MPDサーバは音質重視のため、外付けUSB-DACを接続しましたが、就寝用BGMでは音質にはこだわらず、小音量で鳴らしますので、Raspberry Piの内蔵音源出力をそのままVJ-10の外部入力端子に接続しています。
MPDをインストールしたRaspberry PiでSHOUTcastの配信を再生する方法は、だいたい以下のような感じです。
amixer set PCM 100% mpc clear mpc add http://192.168.0.20:8000/stream mpc play
で、問題が発生しました。SHOUTcastサーバのWindowsはVMware ESXi上の仮想マシンとして動作しているのですが、そのせいか分かりませんが、配信処理が不安定になると思われ、たまに再生が止まってしまうことがあります。
そこで、再生が停止したのを検出して、自動的に再生を再開させるスクリプトを作ってみました。
#!/usr/bin/ruby while 1 if `mpc current`.chomp == '' `mpc play` end sleep 1 end
1秒ごとに状態を取得して、停止していたら再開させる、というものです。mpcplayという名前のRubyのスクリプトで、/home/pi/mpcplayに置いてあります。
以上の処理を、起動時に自動的に実行させます。Raspberry Piの起動時に1度だけ実行されればいいので、/etc/rc.localに記述するのが簡単です。
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi amixer set PCM 100% mpc clear mpc add http://192.168.0.20:8000/stream /home/pi/mpcplay & exit 0