初老のボケ防止日記

おっさんのひとりごとだから気にしないようにな。

AirplayでApple Musicはロスレス再生されるのか

ちょっと気になるツイートを見かけたので調べた

事の発端は、Apple Musicのロスレス化に伴う記事にある以下の一文。

なお、AirPlay 2での音楽転送はAACを用いているためロッシーになる。

Apple Musicが大刷新。ドルビーATMOS、ハイレゾロスレス音楽はこうして聴け!(本田雅一) - Engadget 日本版

”AirPlayはたしかALACで転送するのではなかったっけ?”と自分もこの記事を当時読んだ時に疑問をもったのだが、速報系の誤記なのだろうとそのまま流していたのだが、最近になってこの件をTwitterで執筆者に指摘する人が現れ、それに対し執筆者御本人から以下のツイートがあった。

つまり、Appleに確認を取った上で書いたもので決して誤記ではないという話である。そこでちょっと気になったので、AirPlayについて簡単に調べてみた。

AirPlay

AirPlayは、iTunesやiPhone、iPod touch、iPadで再生している音楽や動画、画像を、家庭内のネットワークを経由して他の機器でストリーミング再生する機能である。元々は、iTunesの音源をAirMac Express経由でオーディオ機器に接続してストリーミング再生する旧AirTunesに由来する。AppleのiTunes10に初めて搭載された。

AirPlay - Wikipedia

最新版は2017年に発表されたAirPlay 2で、複数のスピーカーでの音楽の同期ストリーミング再生が新たにサポートされた。

ということで、AirPlayにはAirPlay1とAirPlay2と2つのバージョンが存在しているのだが、結論から言うとApple MusicをAirPlay経由で再生する場合、

AirPlay1ではALACが用いられ、AirPlay2では現状AACが用いられている

ようだ。

"ようだ"と付け加えているのは、Appleの公開情報以外で調べたからである。「AirPlay」はApple独自の技術なので、仕様詳細はAirPlayを製品に組み込む機器製造メーカー以外には開示されていない(これはGoogleの「Chromecast」やSpotifyの「Spotify Connect」、Amazonの「Alexa cast」も同様)。ところが、世の中にはリバースエンジニアリングやパケット解析等を駆使して自力で仕様を解析してしまう人間がいる。そしてそのような方法で作られたソフトを使って、Mac以外のPCや小型コンピュータである「Raspberry Pi」をAirPlay再生機にしてしまう人もいる。

あ、私ですが。

「Raspberry Pi」向けのAirPlay再生ソフトとして有名なのが「Shairport Sync」だ。このソフトはAirPlay1に対応しているのだが、Issueに開発者から興味深い投稿があった。

Shairport Sync uses the AirPlay 1 protocol. In my experience, the AirPlay 1 protocol uses a fixed format: 44,100 frames per second, 16 bit linear PCM, interleaved stereo, losslessly compressed in ALAC -- let's call it "CD quality ALAC" . It doesn't matter what it's being sent from or what it's being sent to, the format remains the same. If the source material is encoded in a different form, it is transcoded to this format before transmission. This accords with your experience. If the source material is actually CD quality, stored losslessly, then AFAIR it used to be the case that it was transmitted bit-perfectly over AirPlay 1 by iTunes. I don't know if that is still the case, but I presume it is.

(中略)

As far as AirPlay 2 is concerned, what we know is that it uses two transmission modes -- Realtime and Buffered -- and two encoding schemes: CD-Quality ALAC for Realtime streams and AAC for Buffered streams. So it fits that the new lossless formats might be transcoded to AAC for onward transmission to AirPlay 2 players

Apple Music Lossless & AirPlay · Issue #1205 · mikebrady/shairport-sync · GitHub

"AirPlay1は自分の知る限りでは44.1kHz16ビット固定のALACだが、AirPlay2は”Realtime”と”Buffered”の2つのモードがあり、どちらで送るかは送信側(MacやiPhone)次第なので、Apple MusicのロスレスがAACに転送されることも考えられる。”とかそんな感じ?

さっそくコメントの中で紹介されていたAirPlay2再生ソフトである「airplay2-receiver」を実際に動作させ、iPhoneからAirPlay接続してApple Musicのロスレス楽曲を再生してみたところ、再生開始時にairplay2-receiverを起動したコンソールに以下の出力があった。

SETUP rtsp://192.168.0.xx/xxxxxxxxxxxxxxxx
Content-Length: 271
Content-Type: application/x-apple-binary-plist
CSeq: 21
DACP-ID: XXXXXXXXXXXXXXX
Active-Remote: xxxxxxxxxxxxxxxx
User-Agent: AirPlay/545.22.21


{'streams': [{'audioFormat': 4194304,
'audioMode': 'default',
'clientID': 'com.apple.Music',
'ct': 4,
'shk': b'\x81Dt\x8f\t\x1d\x8c\x8c\xab\x15\xf4\xef$\xa4\x8cj'
b'\xba\xfd\xfd\xdf\x18J\x07\xef\xc6T\x0e\xd6\xfd\xf6~\xc2',
'spf': 1024,
'streamConnectionID': -4137271816090465945,
'supportsDynamicStreamID': True,
'type': 103}]}
Sending CONTROL/DATA:
Negotiated audio format: AudioFormat.AAC_LC_44100_2
[+] controlPort=51437 dataPort=57733
{'streams': [{'audioBufferSize': 8388608,
'controlPort': 51437,
'dataPort': 57733,
'type': 103}]}
Content-Length: 64

「AirPlay」、謎テクノロジーという訳ではなくmDNSやRTSPといった一般的な通信プロトコルを利用している。上記はクライアント(iPhone)とサーバ(airplay2-receiver)が送信方式をネゴシエーションしている時の内容なのだが、オーディオ形式が「AAC_LC_44100_2」=AAC形式で44.1kHzの2chとなっている。つまり、

AACで転送しまっせー。

という意味だ。Apple MusicではなくTIDALアプリからもAirPlayで再生してみたが、結果は同様だったのでiOS 14.6の振る舞いなのだと思われる。

以前Apple Musicのロスレス配信について調べた際、AirPlay対応しているはずの”HomePod”や”HomePod mini”が何故AACになるのだろうと疑問に思っていたのだが、AirPlay2の場合は必ずAACになってしまうのが今の挙動ということなのであれば納得は行く(再生側の制約でそうなっている可能性も勿論あるので本当のところはわからないが)。

Can I listen to lossless audio on my HomePod or HomePod mini?

HomePod and HomePod mini currently use AAC to ensure excellent audio quality. Support for lossless is coming in a future software update.

About lossless audio in Apple Music - Apple Support

上記の回答には"将来的なソフトウェア更新でロスレスに対応"とあるので、これが再生機器側の話なのか送信側(iOS)なのかはわからないけれども他のAirPlay2再生機も同様に将来的にロスレス再生が可能になる可能性はありそうだ。

ともかく、現状はAirPlayで良い音で聴きたければUSBケーブルでつなぐか、(44.1kHz 16bitが上限だが)ALACで確実に転送されるAirPlay1で動作するAirMac Expressを中古で仕入れてアンプやスピーカーにつなぐかRaspberry PiにShairport Sync入れてDACにつなぐ等するのが音質を追求するのにはいいのかもしれません。