Raspberry Pi の USB 端子で Kenwood のコンポ R-K731 の PC IN 端子と繋げて、Mac や iPhone の外部スピーカーとして BGM 再生に一役買っています。以下に設定などの手順を書きます。
以下に書くのは R-K731 での例ですが、USB 接続のサウンドカードであれば大体同じように設定できると思います。
環境
- モデル: Raspberry model B+
- OS: Raspbian Jessie
OS を MicroSD に書きこむ手順はこちらに書きました: Mac で Raspbian Jessie を MicroSD に書き込んだ
USB ケーブルでオーディオデバイスと接続してから Raspberry の電源をつけ、ssh やローカルでログインしてからスタートします。
音声出力デバイスを確認する
% sudo aplay -l
[sudo] password for ikai:
**** ハードウェアデバイス 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
カード 1 が USB Audio ということで、R-K731 は無事認識されているよう。
カード 1 になっていますが、あとから設定する shairport では上の方のカードを優先して使うらしいので、USB Audio がカード 0 に来るようにします。
/proc/asound/modules
を見て覚えておいて、
% cat /proc/asound/modules
0 snd_bcm2835
1 snd_usb_audio
以下の様に /etc/modprobe.d/alsa-base.conf
を新規で作って書きます。
% sudo vi /etc/modprobe.d/alsa-base.conf
options snd slots=
には上で覚えた snd_
で始めるモジュールを列挙して、options xxx index=x
で、snd_usb_audio
を index=0
にして書いて保存。
options snd slots=snd_usb_audio,snd_bcm2835
options snd_usb_audio index=0
options snd_bcm2835 index=1
保存してからもう一度 sudo aplay -l
を確認すると順番が変わっています。
% sudo aplay -l
[sudo] password for ikai:
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: CODEC [USB Audio CODEC], デバイス 0: USB Audio [USB Audio]
サブデバイス: 0/1
サブデバイス #0: subdevice #0
カード 1: 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
カード 1: ALSA [bcm2835 ALSA], デバイス 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
shairport をインストール
https://github.com/abrasive/shairport から clone してきて、必要なパッケージもインストール
git clone https://github.com/abrasive/shairport.git && apt-get install -y libssl-dev libavahi-client-dev libasound2-dev
clone してきたら普通にビルドします。少し時間がかかります
cd shairport && ./configure && make && sudo make install
終わったら、起動スクリプトなどをコピーしておきます。shairport/scripts
以下に osx, arch, systemd がありますが Raspberry は debian の分派なので、debian 以下を使います。
sudo cp scripts/debian/default/shairport /etc/default/
sudo cp scripts/debian/init.d/shairport /etc/init.d/
sudo cp scripts/debian/logrotate.d/shairport /etc/logrotate.d/
/etc/default/
は起動スクリプト実行時に読まれる設定ファイル、/etc/init.d
は起動スクリプト、 /etc/logrotate.d/
はログファイルを定期的に削除するための設定ファイルです。
インストールが終わったら、
shairport -a test
で起動してみます。-a
の後ろに AirPlay 時の名前を指定します。iPhone や Mac の AirPlay で test
を選択して、適当に音が鳴らせたら成功です。
毎度手動で起動させるのは面倒なので、OS 起動時に shairport も起動するようにしておきます。
sudo systemctl daemon-reload
sudo update-rc.d shairport defaults
これで Raspberry Pi も、電源をいれたら (ほとんど) すぐに使える AirPlay サーバに変身しました
Raspberry Pi を無線でつなげている為なのか、再生してから実際音が出るまで 1, 2 秒くらい間が空きます。なので、あくまで BGM 用でしょうか。ゲームとか動画には向かなそう。同期がとれるかは試していません。
再生は途切れず安定していて、USB 経由での再生なのでノイズも入らず、R-K731 の Supreme EX (高音質化モード?) も使えていい感じです。Raspberry Pi 便利ですね。