それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

raspberry Pi をiPhoneのリモートスピーカーにする。

AirPlay音楽再生を行う。

AirPlayとは、iPod / AirMacExpress の頃からある、iOSのリモートスピーカー機能。

WiFi経由で音楽を再生できる。とても便利である。Radikoと相性がよく愛用している。

Bluetoothより通信が安定しているし、2.4GHz電子レンジ加熱でノイズになることもない。ネットワークなのでIP通信(ブロードキャスト)が届く範囲であれば、どこでも使える。便利である。

Bluetoothでいいと思うかもしれないが、ペアリング設定は不要だし、Raspberry Pi 同士で音楽を再生できるので、スマホから独立するのも嬉しい。

インストール

shairpot-sync を apt で入れるだけで使える。

apt install shairpot-sync

ただし、いくつかのDebianではバグがあり、init.d -> systemd のマッピングが誤作動する。

設定

general = {

  interpolation = "soxr";
  output_backend = "alsa";
  name = 'test' // <= ここがバグになる
}

alsa =
{
  output_device = "plughw:1,0";
}

name = がバグ

スピーカーの名前を選択肢にだすときに使う設定項目 name が、debian でバグになる。

これは、init.d -> upstart -> systemd に切り替わるときのバグであり、systemdが悪い。*1

対策 : name をコマンドオプションで入れる。

shairport-sync.conf でname を指定できない。shairport-sync.conf の項目は、なぜかSystemd/upstart がinit.dを上書きするときに読み込まれているらしく、おそらく読み込みに失敗し変数展開に失敗しエラーになるようです。

shairport-syncには、コマンドのオプションに --name があるんでそれを代わりに使います。

sudo systemctl edit --full shairport-sync.service

コマンドオプションで name を入れて、スピーカー名称を入れる。

ExecStart=/usr/bin/shairport-sync --name 'MyShair Speaker' --daemon $DAEMON_ARGS

再起動

sudo systemctl restart shairport-sync.service      

設定項目

interpolation を SOXRにすると音質が良くなるらしい。(実感がないが、、、)

/etc/shairport-sync.conf

general = {

  interpolation = "soxr";
  output_backend = "alsa";

イヤホンジャックからの出力

そのままでは、Raspi3のデフォルト設定から音声(サウンド)が出力されます。

オーディオ出力(イヤホン端子)からの出力を強制するために、ALSA設定を書きました。

/etc/shairport-sync.conf

ALSA 項目で output_device を指定する。

alsa =
{
  output_device = "plughw:1,0";

"plughw:1,0" はデバイス番号をALSAで見る。

aplay -l
aplay -L

Raspi3での例

takuya@raspi3:~$ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: b1 [bcm2835 HDMI 1], デバイス 0: bcm2835 HDMI 1 [bcm2835 HDMI 1]
  サブデバイス: 4/4
  サブデバイス #0: subdevice #0
  サブデバイス #1: subdevice #1
  サブデバイス #2: subdevice #2
  サブデバイス #3: subdevice #3
カード 1: Headphones [bcm2835 Headphones], デバイス 0: bcm2835 Headphones [bcm2835 Headphones]
  サブデバイス: 2/4
  サブデバイス #0: subdevice #0
  サブデバイス #1: subdevice #1
  サブデバイス #2: subdevice #2
  サブデバイス #3: subdevice #3

ALSAバイスを調べる方法は過去にやった。

https://takuya-1st.hatenablog.jp/entry/2016/04/18/011246

raspi つけっぱなし

まぁRaspiは電源入れっぱなしになるんですけどね。

どうせ、NASにしてたり、SSH踏み台にするRaspi3なのでこういう活用法もありだと思う

raspi 特有の問題

オーディオジャック(イヤホンジャック)の接続は、端子の接続状態(接点の汚れ)などでホワイト・ノイズが出やすい。

しっかりと接点をきれいにして、接続する必要がある。

発展形

Shaircast で、複数スピーカーを同時に鳴らせるらしい。

掃除洗濯など、家事をしながら2Fと1Fを行き来するとき、ラジオをかけっぱなしにできそう。

企業や自治会など、建物なら館内放送に使えそうじゃん。面白そう。

参考資料

*1: debian がsystemdに移行するとき、テスト漏れなんだろうが、そもそもsystem移行まつわるこの問題が起きてるので、systemdへの移行が間接的な原因だと思う。