Raspberry Piのメディアレンダー化作戦 AirPlay編

今年で67になる母は、つい先日までイナカの実家で一人暮らしをしていました。

そんな67の母は私のすすめで2015年9月にDENONのネットワークオーディオRCD-N9を購入。

CDとラジオ、そして海外のネットラジオを楽しんでいました。

(購入当初はらくスマのdヒッツをBluetooth経由で聞いていましたが、Bluetoothが面倒なのか、dヒッツが高かったのか、聞くのをやめてしまいました。)

 

そこで、よかれと思いRaspberry Pi 2 Model Bを調達し、OpenMediaValueをインストールして、手持ちのCDを全てリッピングして保存、リッピングのやり方も解説して置いていきましたが、こちらも使われずにいたようです。

 

CDで聞けるなら、CDを入れ替えた方がいいようです。

 

そこで、弟夫婦との同居を機に、Raspberry Piを引き上げてきました。

そのRasoberry Piに第二の人生を送ってもらおうと、寝室のメディアレンダーとして活躍してもらうこととしました。

忘れないうちにインストール記録です。

 

OSはRaspbian Stretch Liteを、NOOBSを使わずに、イメージを直接SDに焼いて起動し、有線イーサを使ってdhcpcd.confで固定IPにすること、自分の持っている秘密鍵SSH接続できるようにすること、デフォルトのpiユーザーをsudo出来ないようにすること、sudoにパスワードが必要になるようにすること、自分がrootにsu(Switch User)できるように設定しました。

このあたりは難しくないので他に譲ります。

そして、sudoは面倒なので、rootで作業してしまいます。(よい子はまねしちゃだめ)

 

ケースから出しているので、こんな感じです。

f:id:naoyukinagano:20171030225137j:plain

 

Raspberry Piのデフォルトアナログ音声出力は音の悪さに定評がありますので(笑)、USB Audioに変えます。

 

たまたま以前まで使っていたBEHRINGER UCA202 U-CONTROLが手元にあったので、こちらを使います。

中身はTI PCM 2902のようです。たいへん素直なデバイスです。

せっかくデジタルOPT出力があるので、MARANTZのNA7004に入力して音出しを試みます。

f:id:naoyukinagano:20171030225612j:plain

NA7004って既にレンダラーじゃん!っていうツッコミはなしでお願いします。

完成したら別の部屋で使いますので・・・。

 

まずはAirPlayのレンダラーになっていただきます。

shairportの後継、shairport-syncを使います。(後継と言っても派生のようですが)

 

さて、githubからshairport-syncをgitしてautoconfしてmake・・・とおもったら、stretchはもうパッケージが準備されています。

さすが最新OS!

root@raspberrypi:# apt-get install shairport-sync

さて、設定しましょう。

たぶん、shairport-syncを動かすためのユーザーが必要でしょうから、作ります。

 root@raspberrypi:# groupadd -r shairport-sync

 root@raspberrypi:# useradd -r -M -g shairport-sync -s /usr/bin/nologin -G audio shairport-sync

デフォルトのアナログやHDMI出力から音を出すわけではないので、出力先を確認しておきましょう。

再生ソフトaplayの機能を借りて、再生デバイスの一覧を出してもらいます。

root@raspberrypi:~# aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: ALSA [bcm2835 ALSA], デバイス 0: bcm2835 ALSA [bcm2835 ALSA]
サブデバイス: 8/8
サブデバイス #0: subdevice #0
サブデバイス #1: subdevice #1
サブデバイス #2: subdevice #2
サブデバイス #3: subdevice #3
サブデバイス #4: subdevice #4
サブデバイス #5: subdevice #5
サブデバイス #6: subdevice #6
サブデバイス #7: subdevice #7
カード 0: ALSA [bcm2835 ALSA], デバイス 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
カード 1: CODEC [USB Audio CODEC], デバイス 0: USB Audio [USB Audio]
サブデバイス: 0/1
サブデバイス #0: subdevice #0

USBはカード1のサブデバイス0なので、hw:1,0かplughw:1,0のどちらかを指定することとなります。

 

shairport-syncのコンフィグはお行儀悪く、/etcの直下にshairport-sync.confがあります。

 root@raspberrypi:~# nano /etc/shairport-sync.conf

 

 general =

{

で始まる項目を設定していきます。

コメント多過ぎですね(笑)

 

まずは、AirPlayデバイス名を決めるので、name =の前のコメントアウト//を消して、ホスト名をデバイス名にします。

name = "%H"; // This means "Hostname" -- see below. This is the name the service will advertise to iTunes.

soxrを使うと音が良くなると聞いたので、// interpolation = "basic"を下記のように変えます。

interpolation = "soxr"; // aka "stuffing". Default is "basic", alternative is "soxr". Use "soxr" only if you have a reasonably fast processor.

ALSAドライバーを使うので、一応明示しておきます。

output_backend = "alsa";

なんか音が小さいな、と思ったら、ボリュームコントロールが有効でした。無効にします。

ignore_volume_control = "yes";

 

続いて

 alsa =

{

で始まる項目を設定していきます。

USB Audioにアウトプットするので、

output_device = "hw:1,0"; 

mixer_control_name = "PCM";

mixer_device = "default";

に変更します。("hw:1,0"は"plughw:1,0"でもOK。)

 

では、nanoを閉じましょう。ctrl + xでyですね。

 

次に、デーモンを自動起動する設定と、実際に起動するところです。

まずは、raspbian起動時に自動起動するように設定。

root@raspberrypi:~# systemctl enable shairport-sync

では、最後、祈るように起動しましょう。

root@raspberrypi:~# systemctl start shairport-sync

 

なにかいろいろ(最初にgithub版をmakeしたものをインストールしたので、アンインストールしてパッケージをapt-getしたため)やっているうちに、"Failed to attach mixer"と出てきました。

Raspbian自体を再起動するとしっかりと直りました。

このFailed to attach mixerは、ユーザーshairport-syncをグループaudioに入れていないことによって、ミキサーが操作できないために起こるエラーです。

 

さて、iPadから再生してみましょう。

f:id:naoyukinagano:20171031001331j:plain

 

ちゃんと選べて再生できるようになりました!!