2013/10/16

Raspberry PiをAirPlay化した

先日RPiをWoLリピーター的な存在にしましたが,今回はAirPlay化したいと思います.
手順は全部以下のサイトに書いてあったので割愛します.ただし,参考サイトでは何故か複数のコマンドが改行されずに書かれていて見づらいので,コマンドは翻訳前の記事を参考にされるといいと思います.

【参考サイト】 Raspberry Piを「AirPlay化」して音楽をストリーミングする方法

【補足:コマンドはこちらで確認】

今回は,上記参考サイトのステップ1と4だけを行いました (ステップ2と3で行っていることは,前回の記事の中で設定済み).
ここでは,少し補足したいと思います.
なお,本文中の「ステップ○」という表記は,参考サイトのステップを指しています

必要なものについて

上のサイトを読むと,
  1. HDMIケーブルまたはコンポジットビデオケーブル
  2. USBキーボードとマウス
  3. USBサウンドカード
が必要なものに含まれていますが,これらは無くてもAirPlay化できました.
1と2は,前回の記事に書いた通り,PCからSSHで繋げばOKなので不要でした.ただ,あったほうが便利です (DHCPサーバ立てるのとかめんどいし).
3は,参考サイトに書かれている通り,高音質で楽しむためのものなので,無くても内蔵のステレオミニジャックから出力できます.

ステップ4について

参考サイトの最初の方に載ってるコマンドにはsudoと書いてあるので問題ないですが,途中からsudo抜けてる気がします.
makeコマンドの後あたりからはsudoをつけるか,rootになってください.
なお,makeする前に以下の説明を読んでいただいたほうがいいかもしれないです.

遅延の解消

そのままmakeして手順を進めてしまうと,実際に実行してiDevice等から音を飛ばすときに遅延を感じると思います (多分).
なので,今回はバッファーサイズをデフォルトの282から250に変更したところ遅延が感じられなくなりました.250という値はトライアンドエラーで分かった値です.環境によっては別の値のほうがいいかもしれません.

ステップ4のmakeコマンドの直前で,~/shairport/hairtunes.cを開いて中身を編集します.
$ nano hairtunes.c
または
$ vi hairtunes.c
またはお好きなエディタでhairtunes.cを開く.

そして,56行目までカーソルを移動させて,以下のように編集します.

【編集前】
#define START_FILL    282
【編集後】
// #define START_FILL    282
#define START_FILL    250

編集が終わったら保存します.nanoの場合はCtrl + X → y → Enterで保存してください.

これでmakeを行えばOKです.

音量を大きくする

内蔵のサウンドチップを使う場合,デフォルトでは70%くらいの音量になっているようです.
ステップ4を行うと問題なくAirPlay化に成功すると思いますが,実際に音を飛ばしてみると音量が小さいと感じると思います.
なので,音量を上げる手順を書いておきます.

音量を調整するにはamixerを使います.
まず,内蔵サウンドチップで利用可能なコントロールを一覧してみます.
$ sudo amixer controls
numid=3,iface=MIXER,name='PCM Playback Route'
numid=2,iface=MIXER,name='PCM Playback Switch'
numid=1,iface=MIXER,name='PCM Playback Volume'

すると,上記3つの項目が現れると思います.このうち一番最後の項目に「Volume」と書いていたのでこれを弄ってみます.今回は一番最後の項目(numid=1)を弄りたいので以下のコマンドを実行しました.
$ sudo amixer cget numid=1
numid=1,iface=MIXER,name='PCM Playback Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=-10239,max=400,step=0
  : values=-????
  | dBscale-min=-102.39dB,step=0.01dB,mute=1

-????と書いた部分には,実際にはデフォルトの音量が書かれていました.メモし忘れてしまったのですが,たしか最初は-2750くらいだった気がします.ちなみに,単位はミリデシベルのようです.

この音量をいじるには,csetを使います.
今回は音量を90%にしました.
パーセントで指定できます.
$ sudo amixer cset numid=1 90%

この時点で音量は大きくなっているはずです.
あとは,再起動しても90%のままを保持するために,設定をストアします.
$ sudo alsactl store

これでOKです.

感想

オフトゥンINしたまま部屋のスピーカーから音楽を流したり止めたりできます.とても便利です.
(これはAirPi特有のメリットではないですが)

悪いとこは,AirPiをたまに認識してくれないことがあるとこです.
一度sudo service shairport restartすると直るかもしれないです.

もう一つ悪いとこは,たまに音声が途切れるとこです.
一度途切れると,そのまま放置しても復旧しないようです.
一度音の再生を停止してRPiのWi-FiドングルのLEDランプを確認し,データの転送が終わるまで待ちます.その後,再度再生すると復旧した気がします.でも,たまたまだったかもしれません.いろいろ試してみてください.

これらを考慮しても,RPiでAirPlayできてしまうメリットは大きいです.
RPiが余っている方は試してみてください.

追記 : iOS 6.1.3で起きる不具合

iPhone 4s (iOS 6.1.3) で確認した不具合をここに書いておきます.
iPhoneからAirPiに音楽を流している途中でスクリーンショットを撮る (ロックボタン + ホームボタン) ,もしくは写真を撮ると,音楽が止まってしまいます.また,それ以降,再起動しない限りボリュームの物理スイッチが効かなくなります.ご注意ください.
この現象がAirMac Expressなどの純正製品でも起こるのかは不明です (実機を持っていないので).なので,iOSのバグなのかどうかもわかりません.どなたか純正製品を持っている方の報告をお待ちしています (わかったところで・・・ですが笑).

0 件のコメント:

コメントを投稿