2013年6月12日水曜日

Raspberry Pi:ラジオはSqueezeliteでバッチリです♪

Squeezeliteの導入も苦労しました。。。(^_^;)

SqueezeSlaveが60sで停止してしまうのは、既知のエラーとしてFAQもあったが、
頭が足らずどうしても対処できなかった。
==FAQ・トラブルなど==

色々調べると同じようなソフトでSqueezeliteがあることが分かった。
ダメ元で、試してみたが別な現象(途切れ途切れ)でまともに動かなかった。
更に、浮気をしてpiCorePlayerに乗り換えてみたが。。。
またしても、60sで停止してしまうトラブルにハマッてしまった(T_T)

そこで、Squeezeliteに戻って再チャレンジ!
色々回り道をしてきた結果が実り、バッチリ動作するようになりました(^O^)v
以下、その道程です。

1.SqueezeSlaveの停止
pi@raspberrypi ~/work/sqlite $ ps ax | grep squeeze
 2100 ?        Ssl    0:22 /usr/bin/squeezeslave -R -M/var/log/squeezeslave.log -o0 -m00:00:00:00:00:01 192.168.1.23
28404 pts/1    S+     0:00 grep --color=auto squeeze
pi@raspberrypi ~/work/sqlite $ sudo /etc/init.d/squeezeslave stop

2.自動起動から削除
自動起動スクリプトのコメントに削除手順があるので従う。
# Uninstall Instructions
#
#       update-rc.d squeezeslave remove

pi@raspberrypi ~/work/sqlite $ sudo update-rc.d squeezeslave remove
update-rc.d: using dependency based boot sequencing

ここまでで、SqueezeSlaveとお別れです。残念。

Squeezelite up and running on Raspian Wheezy Hard Float
を参照しながら、インストール開始!

3.まず、環境を綺麗に整理
pi@raspberrypi ~/work/sqlite $ sudo apt-get update
pi@raspberrypi ~/work/sqlite $ sudo apt-get upgrade
pi@raspberrypi ~/work/sqlite $ sudo reboot

4.作業領域を確保
pi@raspberrypi ~ $ cd work
pi@raspberrypi ~/work $ mkdir sqlite
pi@raspberrypi ~/work $ cd sqlite/
pi@raspberrypi ~ $ cd work/sqlite/

5.実行に必要な3つのソフトを導入
5.1.libflac-dev
pi@raspberrypi ~/work/sqlite $ sudo apt-get install libflac-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  libogg-dev
以下のパッケージが新たにインストールされます:
  libflac-dev libogg-dev
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 8 個。
308 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,054 kB のディスク容量が消費されます。
続行しますか [Y/n]?
取得:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main libogg-dev armhf 1.3.0-4 [92.2 kB]
取得:2 http://mirrordirector.raspbian.org/raspbian/ wheezy/main libflac-dev armhf 1.2.1-6 [216 kB]
308 kB を 1秒 で取得しました (197 kB/s)
以前に未選択のパッケージ libogg-dev:armhf を選択しています。
(データベースを読み込んでいます ... 現在 63012 個のファイルとディレクトリがイン ストールされています。)
(.../libogg-dev_1.3.0-4_armhf.deb から) libogg-dev:armhf を展開しています...
以前に未選択のパッケージ libflac-dev:armhf を選択しています。
(.../libflac-dev_1.2.1-6_armhf.deb から) libflac-dev:armhf を展開しています...
libogg-dev:armhf (1.3.0-4) を設定しています ...
libflac-dev:armhf (1.2.1-6) を設定しています ...

5.2.libfaad2
pi@raspberrypi ~/work/sqlite $ sudo apt-get install libfaad2
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
libfaad2 はすでに最新バージョンです。
libfaad2 は手動でインストールしたと設定されました。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 8 個。

5.3.libmad0
pi@raspberrypi ~/work/sqlite $ sudo apt-get install libmad0
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
libmad0 はすでに最新バージョンです。
libmad0 は手動でインストールしたと設定されました。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 8 個。

6.Squeezeliteをダウンロード
pi@raspberrypi ~/work/sqlite $ wget http://squeezelite.googlecode.com/files/squeezelite-armv6hf
--2013-06-01 09:05:29--  http://squeezelite.googlecode.com/files/squeezelite-armv6hf
squeezelite.googlecode.com (squeezelite.googlecode.com) をDNSに問いあわせていま す... 74.125.31.82
squeezelite.googlecode.com (squeezelite.googlecode.com)|74.125.31.82|:80 に接続 しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 97137 (95K) [application/octet-stream]
`squeezelite-armv6hf' に保存中

100%[======================================>] 97,137       231K/s 時間 0.4s

2013-06-01 09:05:30 (231 KB/s) - `squeezelite-armv6hf' へ保存完了 [97137/97137]

pi@raspberrypi ~/work/sqlite $ ls -l
合計 96
-rw-r--r-- 1 pi pi 97137  4月 13 06:42 squeezelite-armv6hf

7.実行環境に移動し、実行権限を付与する
pi@raspberrypi ~/work/sqlite $ sudo mv squeezelite-armv6hf /usr/bin
pi@raspberrypi ~/work/sqlite $ cd /usr/bin/
pi@raspberrypi /usr/bin $ sudo chmod u+x squeezelite-armv6hf
pi@raspberrypi /usr/bin $ ls -l squeeze*
-rwxr--r-- 1 pi   pi    97137  4月 13 06:42 squeezelite-armv6hf

8.出力デバイスを確認する
pi@raspberrypi /usr/bin $ squeezelite-armv6hf -l
Output devices:
  default                        - Playback/recording through the PulseAudio sound server
  sysdefault:CARD=ALSA           - bcm2835 ALSA, bcm2835 ALSA - Default Audio Device

9.コマンドを入力して稼動テスト
pi@raspberrypi /usr/bin $ squeezelite-armv6hf -o sysdefault:CARD=ALSA 192.168.1.23

→60sを超えてちゃんと動作している(^O^)v
(この時点では音を出してなく、ちゃんと出ていると思い込んでいた。。。)

10.自動起動スクリプトの入手
pi@raspberrypi ~ $ cd work/sqlite/
pi@raspberrypi ~/work/sqlite $ wget http://www.gerrelt.nl/RaspberryPi/squeezelitehf.sh
--2013-06-01 09:28:23--  http://www.gerrelt.nl/RaspberryPi/squeezelitehf.sh
www.gerrelt.nl (www.gerrelt.nl) をDNSに問いあわせています... 81.169.145.72
www.gerrelt.nl (www.gerrelt.nl)|81.169.145.72|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 4544 (4.4K) [application/x-sh]
`squeezelitehf.sh' に保存中

100%[======================================>] 4,544       14.7K/s 時間 0.3s

2013-06-01 09:28:24 (14.7 KB/s) - `squeezelitehf.sh' へ保存完了 [4544/4544]

pi@raspberrypi ~/work/sqlite $ ls -l
合計 8
-rw-r--r-- 1 pi pi 4544 11月 19  2012 squeezelitehf.sh

11.スクリプトのコメント欄を見て導入手順を確認する
pi@raspberrypi ~/work/sqlite $ cat squeezelitehf.sh
#! /bin/sh
### BEGIN INIT INFO
# Provides:          squeezelite
# Required-Start:
# Required-Stop:
# Should-Start:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Squeezeslitee
# Description:       Light weight streaming audio player for Logitech's Squeezebox audio server
### END INIT INFO
# Author: Me
#
# Install Instructions
#
#       Copy file to /etc/init.d/squeezeslite
#       chmod 755 /etc/init.d/squeezeslite
#       update-rc.d squeezeslitee defaults
#
#       Create /etc/default/squeezeslite to override any default
#               variables defined here.  No not edit this file.
#
# Uninstall Instructions
#
#       update-rc.d squeezeslite remove
#

12.手順通りに実行環境に移動し、実行権限を付与する
pi@raspberrypi ~/work/sqlite $ sudo mv squeezelitehf.sh /etc/init.d/squeezelite
pi@raspberrypi ~/work/sqlite $ cd /etc/init.d/
pi@raspberrypi /etc/init.d $ sudo chmod 755 squeezelite
pi@raspberrypi /etc/init.d $ ls -l squeeze*
-rwxr--r-- 1 pi   pi   4544 11月 19  2012 squeezelite
-rwxr-xr-x 1 root root 4657  5月 28 16:54 squeezeslave

13.デフォルト設定のカスタマイズ(マックアドレスと実行パラメタ)
pi@raspberrypi /etc/default $ sudo vi squeezelite
pi@raspberrypi /etc/default $ cat squeezelite

スクリプト内のデフォルト設定値
SLMAC="00:00:00:00:00:01"
SLOPTIONS="-o sysdefault:CARD=Set -n Framboos"

カスタマイズした設定値
LMAC="00:00:00:00:00:02"
LOPTIONS="-o sysdefault:CARD=ALSA -n Squeezelite"

14.自動起動に登録
pi@raspberrypi /etc/default $ cd /etc/init.d/
pi@raspberrypi /etc/init.d $ sudo update-rc.d squeezelite defaults
update-rc.d: using dependency based boot sequencing

15.起動テスト
pi@raspberrypi /etc/init.d $ sudo /etc/init.d/squeezelite start

pi@raspberrypi /etc/init.d $ ps ax | grep squeeze
15440 pts/1    S+     0:00 grep --color=auto squeeze
あちゃー失敗。。。(T_T)

16.スクリプトを確認するとスクリプトファイル名と同じでなければならない部分があった。
pi@raspberrypi /etc/init.d $ sudo mv squeezelite squeezelite-armv6hf
pi@raspberrypi /etc/init.d $ ls -l squeeze*
-rwxr-xr-x 1 pi   pi   4544 11月 19  2012 squeezelite-armv6hf

pi@raspberrypi /etc/init.d $ cd ../default/
pi@raspberrypi /etc/default $ sudo mv squeezelite squeezelite-armv6hf
pi@raspberrypi /etc/default $ ls -l squeeze*
-rw-r--r-- 1 root root 97  6月  1 09:52 squeezelite-armv6hf

pi@raspberrypi /etc/init.d $ sudo update-rc.d squeezelite-armv6hf defaults
update-rc.d: using dependency based boot sequencing

17.起動テスト2回目
pi@raspberrypi /etc/init.d $ sudo /etc/init.d/squeezelite-armv6hf start
pi@raspberrypi /etc/init.d $ ps ax | grep squeeze
26349 pts/1    S+     0:00 grep --color=auto squeeze
またしても失敗。。。

18.デフォルト設定のパラメタ名が間違っていることを発見!
   ついでに、マックアドレスも設定した。
pi@raspberrypi /etc/init.d $ sudo vi /etc/default/squeezelite-armv6hf
pi@raspberrypi /etc/init.d $ cat /etc/default/squeezelite-armv6hf
SLMAC="b8:27:eb:a0:c2:79"
SLOPTIONS="-o sysdefault:CARD=ALSA -n Squeezelite 192.168.1.23"

19.起動テスト3回目
pi@raspberrypi /etc/init.d $ sudo ./squeezelite-armv6hf start
pi@raspberrypi /etc/init.d $ ps ax | grep squeeze
 7701 ?        SLl    0:00 /usr/bin/squeezelite-armv6hf -o sysdefault:CARD=ALSA -n Squeezelite 192.168.1.23 -m b8:27:eb:a0:c2:79
 7782 pts/1    S+     0:00 grep --color=auto squeeze

やったね、無事起動しました!
音出しのために、ステレオのスイッチを入れ期待しながらボリュームを上げる。
最低!!音が途切れ途切れだ。。。(T_T)

ここから泥沼が始まり、piCorePlayerまでインストールしたりした。。ここは省略(^_^;)

20.piCorePlayerのデフォルト設定を参考にしてパラメタを切ってみた。
pi@raspberrypi /etc/init.d $ cat /etc/default/squeezelite-armv6hf
SLMAC="b8:27:eb:a0:c2:79"
SLOPTIONS="-o default:CARD=ALSA -n Squeezelite -a 100:4 192.168.1.23 -z"
pi@raspberrypi /etc/init.d $ sudo ./squeezelite-armv6hf start
pi@raspberrypi /etc/init.d $ ps ax | grep squeeze
11746 ?        SLl    0:00 /usr/bin/squeezelite-armv6hf -o default:CARD=ALSA -n Squeezelite -a 100 4 192.168.1.23 -z -m b8:27:eb:a0:c2:79
11888 pts/1    S+     0:00 grep --color=auto squeeze
おお!ちゃんと出た!!

増やしたのは
-a 100:4
-z
修正したのは
sysdefault:CARD=ALSA → default:CARD=ALSA

21.ということで、原因の特定を行なってみた。
21.1.パラメタ -zをカット
pi@raspberrypi /etc/init.d $ ps ax | grep squeeze
14353 ?        SLl    0:00 /usr/bin/squeezelite-armv6hf -o default:CARD=ALSA -n Squeezelite -a 100 4 192.168.1.23 -m b8:27:eb:a0:c2:79
14394 pts/1    S+     0:00 grep --color=auto squeeze
ちゃんと出てる。コレではない

21.2.パラメタ -a 100:4をカット
pi@raspberrypi /etc/init.d $ ps ax | grep squeeze
15194 ?        SLl    0:00 /usr/bin/squeezelite-armv6hf -o default:CARD=ALSA -n Squeezelite 192.168.1.23 -m b8:27:eb:a0:c2:79
15233 pts/1    S+     0:00 grep --color=auto squeeze
途切れ途切れだ!原因はコレだ

22.ということで、設定を決めた
pi@raspberrypi /etc/init.d $ cat /etc/default/squeezelite-armv6hf
SLMAC="b8:27:eb:a0:c2:79"
SLOPTIONS="-o default:CARD=ALSA -n Squeezelite -a 100:4 192.168.1.23"

23.再起動して確認
pi@raspberrypi /etc/init.d $ ps ax | grep squeeze
16191 ?        SLl    0:00 /usr/bin/squeezelite-armv6hf -o default:CARD=ALSA -n Squeezelite -a 100 4 192.168.1.23 -m b8:27:eb:a0:c2:79
16255 pts/1    S+     0:00 grep --color=auto squeeze
pi@raspberrypi /etc/init.d $
ちゃんと音が出て、60s超えても切れることは無い!
できた~(^O^)/

<補足>
「-a 100:4」とは、なんだろう??
マニュアルには
 -a <b>:<c>:<f>:<m>    Specify ALSA params to open output device, b = buffer time in ms, c = period count, f sample format (16|24|24_3|32), m = use mmap (0|1)
と記載してある。
ALSAモジュールに対して、0.1sのバッファサイズと4つの区間を指定している。
→どうやら、バッファが無いため処理している間、途切れてたようだ。

回り道をした甲斐があった(^^)

0 件のコメント:

コメントを投稿