Raspberry PiをSHOUTcastクライアントにする

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