LoginSignup
29
34

More than 5 years have passed since last update.

Raspberry Pi を AirPlay サーバとして利用する

Posted at

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_audioindex=0 にして書いて保存。

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 サーバに変身しました:v:

Raspberry Pi を無線でつなげている為なのか、再生してから実際音が出るまで 1, 2 秒くらい間が空きます。なので、あくまで BGM 用でしょうか。ゲームとか動画には向かなそう。同期がとれるかは試していません。

再生は途切れず安定していて、USB 経由での再生なのでノイズも入らず、R-K731 の Supreme EX (高音質化モード?) も使えていい感じです。Raspberry Pi 便利ですね。

29
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
34