« Headless_RaspberryPiでAudio出力のデフォルトを変更する | トップページ | Headless_RaspberryPiをVolumioをインストールする »

2020年11月 5日 (木)

Headless_RaspberryPiをAirPlay_Receiverにする

2020/11/7+
USBスピーカ(JBL Pebbles)を接続した際の 考慮すべきことを纏めて追加した。

2020/11/6
初版

Headless RaspberryPi AirPlay Receiver

Headless RaspberryPi AirPlay Receiver

概要

Headless_RaspberryPiをAirPlay_Receiverにする。
RaspberryPiをAirPlay_Receiver(server)にして、iPhoneなどからオーディオデータをWiFi経由で受信してRaspberryPiのオーディオ出力で再生する。
そのためにshairport-syncをインストールする。
(shairport-syncは、shairportの後継にあたる。なお、オリジナルのshairportは保守を停止している)

インストール方法

以下を実行する:

# 関連ライブラリやツールのインストール sudo apt update sudo apt install libshairport2 autoconf libtool libdaemon-dev sudo apt install git libpopt-dev libconfig-dev libasound2-dev libpulse-dev libavahi-client-dev libssl-dev libsoxr-dev # shairport-syncのビルド cd ~/Downloads git clone https://github.com/mikebrady/shairport-sync.git cd shairport-sync autoreconf -i -f ./configure --sysconfdir=/etc --with-alsa --with-pa --with-avahi --with-ssl=openssl --with-metadata --with-soxr --with-systemd make # ビルドしたバージョンの確認(表示) ./shairport-sync --version 3.3.7rc3-OpenSSL-Avahi-ALSA-pa-soxr-metadata-sysconfdir:/etc # 属性などの変更 sudo groupadd -r shairport-sync sudo useradd -r -M -g shairport-sync -s /usr/bin/nologin -G audio shairport-sync # インストール sudo make install # systemdへの登録状況を確認し、有効化する systemctl status shairport-sync sudo systemctl enable shairport-sync systemctl status shairport-sync # デフォルトのオーディオ出力の設定(.confの変更) cd /etc sudo cp shairport-sync.conf shairport-sync.conf.original sudo nano shairport-sync.conf #以下の内容を置き換える:

/etc/shairport-sync.conf

general = { name = "%h"; interpolation = "soxr"; } alsa = { output_device = "plughw:0"; mixer_device = "plughw:0"; }

上の内容は以下を意味する:
・AirPlayのデバイス名は、RaspberryPiのhostnameになる。
・"plughw:0"の部分は、実際にオーディオ出力するカード番号にする。

実際のカード番号を知るには以下を実行する:

$ aplay -l **** ハードウェアデバイス PLAYBACK のリスト **** カード 0: Device [USB Audio Device], デバイス 0: USB Audio [USB Audio] サブデバイス: 0/1 サブデバイス #0: subdevice #0 カード 1: 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 カード 2: Headphones [bcm2835 Headphones], デバイス 0: bcm2835 Headphones [bcm2835 Headphones] サブデバイス: 4/4 サブデバイス #0: subdevice #0 サブデバイス #1: subdevice #1 サブデバイス #2: subdevice #2 サブデバイス #3: subdevice #3

この例では、[USB Audio Device]にオーディを出力したいので、カード番号は0になり .confの設定値としては、"plughw:0"になる。

起動

起動する場合、以下を実行する:

sudo systemctl start shairport-sync # 設定(.conf)を変更した場合は以下を実行する: sudo systemctl restart shairport-sync

接続

iPhone、iPad、iPod touch から AirPlay でオーディオをストリーミングする」 を参考にして、iPhoneからRaspberryPiに接続する。上手くいけば、RaspberryPiの設定したオーディオ出力から音が出る。

トラブルシュート

・AirPlayとして接続してみて音が途切れるようなら
 .confの「interpolation = "soxr";」をコメントアウトすると改善する可能性がある。(行の先頭に「//」を付ける)
・AirPlayとして接続してみて最大音量が小さい場合、
以下の命令を実行して音量を調整する。

alsamixer

アプリの接続実績

動作したアプリ: YouTube,PrimeVideo,radiko,TVer,AmebaTV, YouTubeMusic (最初は「AirPlayのデバイス名が見えない(接続できず)」の状態だったが、そのうち接続できるようになった) 動作しないアプリ: ・Hulu 動画が止まって音だけ流れる

その他

shairport-syncを起動したらlogoutしても動いているので必要ならlogoutする。

logout

RaspberryPi起動時に自動でAirPlayサーバーを起動しておきたい場合は、
次のようにサービスに登録させておく。

sudo service shairport-sync start sudo systemctl enable shairport-sync.service

USBスピーカ(JBL Pebbles)を接続する

以下のUSBスピーカを接続した際の考慮点を纏めた:
JBL Pebbles

本スピーカは、音質は6000円くらいの価格のスピーカとしては 音質が良く評価できるが、音量調整については難がある。

以下、それについて述べる:

1.音量調整の挙動 (1)USBをPC(ubuntu20.04)に接続した場合、Pebblesの音量調整は動作する。 (Pebblesのツマミの動きに連動してPCの音量調整スライダーが動作する) ただし、調整幅が粗いので、微調整はアプリ側の音量調整を使うことになる。 [AUX IN]入力にスマフォのヘッドフォン出力などを接続すると 自動的にスマフォのヘッドフォン出力がPebbleのスピーカに流れる。 このときもPebblesの音量調整は有効で、調整可能である。 (2)USBをRaspberryPiに接続した場合、Pebblesの音量調整は動作しない。 [AUX IN]入力にスマフォのヘッドフォン出力などを接続した場合も 同様に音量調整は動作しない。 (3)USBをPC(windows10)に接続した場合、Pebblesの音量調整は動作する。 (Pebblesのツマミの動きに連動してPCの音量調整スライダーが動作する) 「(1)のPC(ubuntu20.04)」のときよりも、調整幅が細かく使いやすい、 [AUX IN]入力にスマフォのヘッドフォン出力などを接続すると 自動的にスマフォのヘッドフォン出力がPebbleのスピーカに流れる。 このときもPebblesの音量調整は有効で、調整可能である。 以上、windows10に接続して使用するときは特に問題はない。 (4)USB接続をPCでなくUSB電源アダプターにした場合、 ([AUX IN]入力を使用する場合) Pebblesの音量調整は可能で調整幅が細かくなる。 (「(3)のPC(windows10)」のときと同様の調整幅になる) 2.結論 (1)USBスピーカとして使用している場合、 (=[AUX IN]に何も接続しない場合) PC(ubuntu20.02)に接続したときは、Pebblesの音響調整は可能。 RaspberryPiに接続した場合、音量調整は不可能。 これは、UBS音量コントロールのドライバの違いのせいと考えられる。 このため、RaspberryPiでAirPlay-Receiverを動かす場合、 sshでログインしてalsamixerで音量調整する。 (2)アナログ入力のパワード・スピーカとして使用している場合、 (=[AUX IN]にアナログのオーディオ出力を接続している場合) USBには電源としてUSB電源アダプターを接続することにより Pebblesの音量調整が有効になる。

参考URL

shairport-sync README

Raspberry Piにshairport-syncをインストールする
ラズパイをAirPlayサーバーにしてオーディオ環境を快適にしてみた

ざっくりとALSAとPulseAudioの関係
UbuntuStudioTips/Setup/UbuntuSoundSystem

Pirate Audio: Headphone Amp for Raspberry Pi
USB Audio Adapter - Works with Raspberry Pi

以上

|

« Headless_RaspberryPiでAudio出力のデフォルトを変更する | トップページ | Headless_RaspberryPiをVolumioをインストールする »

RaspberryPi」カテゴリの記事

AirPlay」カテゴリの記事

コメント

この記事へのコメントは終了しました。