Google Pixel の空間オーディオを調査
はじめに ~ Android の空間オーディオとは
この記事は、一部の Pixel シリーズにおいて、Android 13 QPR1 以降に実装されている空間オーディオについて、個人的に調査した内容をまとめたものである。
Android の QPR とは
Quarterly Platform Releases の略で、Android のメジャーアップデート後、四半期ごとに行われる中規模アップデート。メジャーアップデート (8月~10月頃) → QPR1 (12月頃) → QPR2 (3月頃) → QPR3 (6月頃) → メジャーアップデート (8月~10月頃) → … という流れになっている。
「マイナーアップデート」と言わず、あえて「中規模アップデート」と言ったのは、QPR のアップデートでは基本的に Android バージョンは上がらないため。例外として、Android 12 QPR1 → QPR2 のタイミングでは、バージョンが Android 12.0.0 から Android 12.1.0 (Android 12L) に上がっていた。
なお、この記事における「空間オーディオ」とは、Android 13 で導入された「Android の空間オーディオ」のことを指す。
In Android 13 (API level 33), we introduced a new standardized platform architecture for spatial audio, a premium and more engaging sound experience.
Android Developers Blog: Delivering an immersive sound experience with Spatial Audio
Android 13 では、スマートフォン実装、接続されたヘッドセット、ユーザー設定の現在の組み合わせによって、マルチチャンネル オーディオ コンテンツを没入的に再生できるかどうかをアプリ デベロッパーが検出できるようにする API が提供されており、空間オーディオのサポートが導入されています。
高品質の空間オーディオとヘッド トラッキングの実装 | Android オープンソース プロジェクト | Android Open Source Project
Android 13 では、OEM が空間オーディオとヘッド トラッキングをサポートするための標準の方法が導入されています。
空間オーディオとヘッド トラッキング | Android オープンソース プロジェクト | Android Open Source Project
Android の空間オーディオは Android 13 QPR1 で実装されたものではない。あくまで Pixel が Android 13 QPR1 へのアップデートと同タイミングで空間オーディオを実装しただけである。
Android の空間オーディオと言っても、Android が Dolby Atmos や 360 Reality Audio などに標準対応するわけではない。そもそも空間オーディオを実装するかどうか自体端末メーカー次第であり、実装するとしても、最低限対応しないといけないのは以下の 3 点程度である。
- AAC 5.1ch
- LPCM 5.1ch
- 空間オーディオの API (後述) に対応したバーチャライザーの実装
(Android に限らず) 空間オーディオにおけるバーチャライザーとは、人間が音の方向を感知する仕組みなどを利用し、ヘッドホンや内蔵スピーカーなどでも前後左右 (+上下) からの音を再現する処理である。詳しくは「HRTF」「バイノーラル」「トランスオーラル」などで検索していただきたい。
Android の空間オーディオにおいて、以下の点については端末メーカー次第となっている。
- Dolby Atmos や 360 Reality Audio などに対応するか
- バーチャライザーは何を積むか (Dolby? Sony? 独自?)
- 内蔵スピーカーでも空間オーディオを再生可能にするか
- ヘッドトラッキングに対応するか
上記のように、ほとんどが端末メーカー任せとなっている。では Android は何を提供するのかというと、具体的には以下のようなものがある。…と言っても抽象的で分かりづらいと思われるので、詳細は後ほど解説する。そのため、現時点では流し見で構わない。
- コーデックを問わないバーチャライズやヘッドトラッキングのための、デコーダーとバーチャライザーを分離して実装できる枠組み
- バーチャライザーとアプリを連携させるための、Android 標準 API
- 低遅延なヘッドトラッキングのための、OS レベルでの最適化
- メーカーしばりのないヘッドトラッキングのための、Android 標準プロトコル
個人的には、Android の空間オーディオとは「Android 端末における Dolby Atmos や 360 Reality Audio などを、従来よりももっと高度に活用するための、システム面の整備」だと考えている。
Android 端末におけるサラウンド / イマーシブサウンド系の技術は、歴史こそ Apple より長いものの、Android 標準機能ではなく端末メーカーが後付で搭載しているものであるため、システムの最適化やアプリとの連携などの完成度を比べると、正直見劣りする部分もあった。Android の空間オーディオは、そこを改善するための仕組みなのではないかと思われる。
Android は端末メーカーの個性が特徴のプラットフォームであるため、Android の空間オーディオは Dolby Atmos など特定の技術に偏りすぎず、ある程度の自由度を持たせて設計されている。そのため、実装や仕様は端末メーカーによって大きく異なる。
Pixel は Google が開発している Android 端末とはいえ、Android のリファレンス端末だった Nexus とは違い、いわゆる素の Android が搭載されているわけではない。Pixel には Pixel 独自のカスタマイズが入っている。空間オーディオに関しても、Google による実装ではあるものの、あくまで実装例の一つでしかなく、リファレンスというわけではない。
この記事の内容は、Android 13 QPR1 Beta 1 ~ Android 15 QPR2 Beta 1 及び Android 16 Developer Preview 1 の内容で検証している。実機での検証は、Pixel 6、Pixel 8 Pro、Pixel 9 Pro XL を使用した。機種について特に記載がない限り、Pixel シリーズ共通の仕様となっている。スクリーンショットに関しては、特に記載がない限り Pixel 8 Pro (Android 14 QPR2 Stable) のものを掲載している。
他機種の情報は タグ: Android_空間オーディオ にて。現在は Pixel と Xperia しかないが、今後 Galaxy や AQUOS、Xiaomi 端末についても追加予定。どの記事も単体で読めるようにしているため、いくつかの説明は重複している。
目次
dumpsys audio
実機を所持している場合、空間オーディオの仕様や現在の状態を確認するには、Android の dumpsys
コマンドを使用するのが手っ取り早い。
dumpsys | Android Studio | Android Developers
dumpsys
は、Android デバイス上で動作し、システム サービスに関する情報を提供するツールです。Android Debug Bridge(ADB)を使用してコマンドラインからdumpsys
を呼び出すと、接続されたデバイスで実行されるすべてのシステム サービスの診断情報を出力できます。
dumpsys
では様々な情報を取得することができるが、下記のように audio
サービスを指定することで、オーディオ周りの情報のみを取得することができる。
adb shell dumpsys audio
空間オーディオ以外の情報も多く出力されるが、この記事では空間オーディオの部分のみを対象に掲載・解説する。
まず、このコマンドで取得可能な空間オーディオの情報について、把握している範囲で列挙する。
mHasSpatializerEffect
: 空間オーディオに対応しているかどうかisSpatializerEnabled
: 空間オーディオが有効かどうかmIsHeadTrackingSupported
: ヘッドトラッキングに対応しているかどうかsupported head tracking modes
: 対応しているヘッドトラッキングのモードmDesiredHeadTrackingMode
: ヘッドトラッキングの設定値mActualHeadTrackingMode
: ヘッドトラッキングの状態headtracker available
: ヘッドトラッカーが利用可能かどうかsupports binaural
: バイノーラルモード (ヘッドホンでの空間オーディオ) に対応しているかどうかsupports transaural
: トランスオーラルモード (内蔵スピーカーでの空間オーディオ) に対応しているかどうか
このコマンドの出力は、設定や音声の出力先によって一部の値が変動するため、いくつかのパターンで確認していく。
なお、以下は全て Pixel 8 Pro (Android 14 QPR2 Stable) の出力となる。
出力先: 任意、空間オーディオ: 無効
Spatial audio:
mHasSpatializerEffect:true (effect present)
isSpatializerEnabled:false (routing dependent)
SpatializerHelper:
mState:3
mSpatLevel:0
mCapableSpatLevel:1
mIsHeadTrackingSupported:true
supported head tracking modes:HEAD_TRACKING_MODE_RELATIVE_WORLD
mDesiredHeadTrackingMode:HEAD_TRACKING_MODE_RELATIVE_WORLD
mActualHeadTrackingMode:HEAD_TRACKING_MODE_DISABLED
headtracker available:false
supports binaural:true / transaural:false
mSpatOutput:0
ここから分かる情報は以下の通り。
- 空間オーディオ: 対応しているが設定は無効
- ヘッドトラッキング: 対応しているが現在は利用不可
- バイノーラルモード: 対応
- トランスオーラルモード: 非対応
Android の空間オーディオに対応していても、ヘッドトラッキングは独自実装とすることもできるため、単に「ヘッドトラッキング対応」と書かれているだけでは、どのような実装がされているのかまでは不明。
Google Pixel Buds Pro イヤホンでヘッド トラッキング付き空間オーディオをオンにする
重要: Google Pixel Buds Pro で Google Pixel 6、Google Pixel 6 Pro、Google Pixel 7、Google Pixel 7 Pro、Google Pixel 8、Google Pixel 8 Pro、Google Pixel Fold、Google Pixel Tablet の空間オーディオを利用するには、Google Pixel Buds Pro に最新のファームウェア バージョンがインストールされている必要があります。お使いの Google Pixel Buds Pro のファームウェア バージョンをご確認ください。
- デバイスの設定アプリを開きます。
- [接続済みのデバイス] > [Google Pixel Buds Pro] > 設定アイコン > [ヘッド トラッキング] をタップします。
- [ヘッド トラッキング] をオンにします。
ヒント:
Google Pixel で映画やテレビ番組の視聴時に空間オーディオを利用する – Google Pixel ヘルプ
- ドルビー オーディオまたは 5.1 と表示されているコンテンツを視聴してください。
- デバイスを動かさないように持つか、安定した平らな面やスタンドに置いてください。
しかし、Pixel シリーズでは mIsHeadTrackingSupported
が true
となっているため、独自実装ではなく Android の空間オーディオに準拠した実装であることがわかる。
ヘッドトラッキングを Android の空間オーディオに準拠した実装とすることにより、「はじめに」で挙げた以下のメリットを実現することができる。
- 低遅延なヘッドトラッキングのための、OS レベルでの最適化
- メーカーしばりのないヘッドトラッキングのための、Android 標準プロトコル
上記の「Android 標準プロトコル」とは、具体的には「ヘッド トラッカー HID プロトコル」 (Head tracker HID protocol) というもので、ヘッドトラッキング対応のヘッドホンと Android 端末間でセンサー情報をやりとりするための通信方式である。
ヘッド トラッカー ヒューマン インターフェース デバイス(HID)プロトコルは、Android 13 以降を搭載しているデバイスで利用でき、ヘッド トラッキング デバイスを USB または Bluetooth 経由で Android デバイスに接続することを可能にします。また、センサー フレームワークを通じて Android フレームワークとアプリに公開されます。このプロトコルは、オーディオ バーチャライザー効果(3D オーディオ)の制御に使用されます。
ヘッド トラッカー HID プロトコル | Android Open Source Project
今までヘッドトラッキングといえば、独自規格を使用し、端末とヘッドホンを両方同じメーカーで揃えないといけない場合もあった。しかし、Android の空間オーディオでは、Android 標準規格が用意されたことにより、メーカーしばりのないヘッドトラッキングができるようになった。
これにより、ヘッドホンを作っていない Android 端末メーカーでもヘッドトラッキングに対応しやすくなるし、Android 端末を作っていないオーディオ機器メーカーでも汎用的なヘッドトラッキング対応ヘッドホンを作ることも可能になる。
また、Pixel シリーズの中で、トランスオーラルモードに対応しているのは現状 Pixel Fold、Pixel 9 Pro Fold、Pixel Tablet のみであるため、Pixel 8 Pro はトランスオーラルモードに非対応と出る。
デバイスの内蔵スピーカーで空間オーディオをオンにする(Google Pixel Fold、Google Pixel Tablet のみ)
Google Pixel Fold、Google Pixel Tablet では、デバイスの内蔵スピーカーで空間オーディオを利用できます。この機能により、ヘッドフォンやイヤホンで臨場感あふれるサウンドを楽しむことができます。
Google Pixel で映画やテレビ番組の視聴時に空間オーディオを利用する – Google Pixel ヘルプ
Android の空間オーディオでは、トランスオーラルモードへの対応は必須ではない。トランスオーラルモードはそもそもモノラルスピーカーでは実現できないが、ステレオスピーカーであっても対応する必要はないようだ。
スピーカーでのレンダリング
スピーカーでのオーディオの空間化(トランスオーラル モード)のサポートは必須ではありません。
高品質の空間オーディオとヘッド トラッキングの実装 | Android オープンソース プロジェクト | Android Open Source Project
出力先: USB DAC、空間オーディオ: 有効
Spatial audio:
mHasSpatializerEffect:true (effect present)
isSpatializerEnabled:true (routing dependent)
SpatializerHelper:
mState:5
mSpatLevel:1
mCapableSpatLevel:1
mIsHeadTrackingSupported:true
supported head tracking modes:HEAD_TRACKING_MODE_RELATIVE_WORLD
mDesiredHeadTrackingMode:HEAD_TRACKING_MODE_DISABLED
mActualHeadTrackingMode:HEAD_TRACKING_MODE_DISABLED
headtracker available:false
supports binaural:true / transaural:false
mSpatOutput:733
空間オーディオの設定が有効になった他、各種パラメーターの値にも動きがあった。
出力先: Pixel Buds Pro、空間オーディオ: 有効、ヘッドトラッキング: 無効
Spatial audio:
mHasSpatializerEffect:true (effect present)
isSpatializerEnabled:true (routing dependent)
SpatializerHelper:
mState:5
mSpatLevel:1
mCapableSpatLevel:1
mIsHeadTrackingSupported:true
supported head tracking modes:HEAD_TRACKING_MODE_RELATIVE_WORLD
mDesiredHeadTrackingMode:HEAD_TRACKING_MODE_DISABLED
mActualHeadTrackingMode:HEAD_TRACKING_MODE_DISABLED
headtracker available:true
supports binaural:true / transaural:false
mSpatOutput:213
Pixel Buds Pro はヘッドトラッキングに対応しているため、ヘッドトラッカーが利用可能になった。ただし、ヘッドトラッキングは無効に設定しているため、設定値も現在の状態も無効となっている。
出力先: Pixel Buds Pro、空間オーディオ: 有効、ヘッドトラッキング: 有効
Spatial audio:
mHasSpatializerEffect:true (effect present)
isSpatializerEnabled:true (routing dependent)
SpatializerHelper:
mState:5
mSpatLevel:1
mCapableSpatLevel:1
mIsHeadTrackingSupported:true
supported head tracking modes:HEAD_TRACKING_MODE_RELATIVE_WORLD
mDesiredHeadTrackingMode:HEAD_TRACKING_MODE_RELATIVE_WORLD
mActualHeadTrackingMode:HEAD_TRACKING_MODE_RELATIVE_WORLD
headtracker available:true
supports binaural:true / transaural:false
mSpatOutput:213
ヘッドトラッキングの設定値および現在の状態が HEAD_TRACKING_MODE_RELATIVE_WORLD
に変わり、ヘッドトラッカーが利用可能になった。
なお、ヘッドトラッキング対応コンテンツを再生しないと、現在の状態は無効のままになっていることもある。
逆に、一度ヘッドトラッキングが HEAD_TRACKING_MODE_RELATIVE_WORLD
になった後、ヘッドトラッキングを無効にしても、設定値のみ無効で、現在の状態は HEAD_TRACKING_MODE_RELATIVE_WORLD
のままのこともあった。
(参考) 空間オーディオ非対応機種の場合
今まで見てきた dumpsys
の出力は、Android 13 以降であれば空間オーディオに対応しているかどうかに関わらず確認することができる。比較用に、空間オーディオ非対応の Xperia 1 IV (XQ-CT44) での出力を掲載する。
Spatial audio: mHasSpatializerEffect:false (effect present) isSpatializerEnabled:false (routing dependent) SpatializerHelper: mState:1 mSpatLevel:0 mCapableSpatLevel:0 mIsHeadTrackingSupported:false supported head tracking modes: mDesiredHeadTrackingMode:HEAD_TRACKING_MODE_RELATIVE_WORLD mActualHeadTrackingMode:HEAD_TRACKING_MODE_UNSUPPORTED headtracker available:false supports binaural:false / transaural:false mSpatOutput:0n
mHasSpatializerEffect
や mIsHeadTrackingSupported
などが false
になっていることが確認できる。
ファームウェア
次に、ファームウェアで気になった箇所を紹介する。
build.prop
build.prop とは、ファームウェアに絡む様々な情報が記載されたファイルである。build.prop は同名のファイルが複数の場所に存在し、どのファイルに空間オーディオ絡みの情報が載っているかは端末メーカーにより異なる。基本的に /vendor/build.prop に記載されていることが多く、Pixel も同様。
ro.audio.spatializer_enabled
この項目は、空間オーディオに対応しているかどうかを示すものである。対応している場合はこの値が true
に設定され、非対応の場合はこの項目がない。
1. 次のように、
device.mk
ファイルで空間オーディオ サポートを宣言します。PRODUCT_PROPERTY_OVERRIDES += \
ro.audio.spatializer_enabled=trueこれにより、
空間オーディオとヘッド トラッキング | Android オープンソース プロジェクト | Android Open Source ProjectAudioService
はスペーシャライザ サポートを初期化します。
空間オーディオ対応 Pixel は true
になっていることから、Android の空間オーディオに対応していることが分かる。
ro.audio.spatializer_enabled=true
ちなみに先程の dumpsys
の出力にあった mHasSpatializerEffect
は、この項目を参照している。
AudioService.java – Android Code SearchmHasSpatializerEffect = SystemProperties.getBoolean("ro.audio.spatializer_enabled", false);
persist.bluetooth.a2dp_offload.cap
この項目は、Bluetooth の A2DP プロファイル (音声伝送方式の一種) で利用可能なコーデックを示すものである。
空間オーディオと直接関係する項目ではないが、ヘッドトラッキングの実装の調査においては重要な項目となっている。
というのも、Android の空間オーディオでは、ヘッドトラッキングにおける音声の伝送コーデックとして、低遅延な Opus を使用することが推奨されている (必須ではない)。
推奨事項
OEM は、実装時に次のガイドラインを使用することをお勧めします。
空間オーディオとヘッド トラッキング | Android オープンソース プロジェクト | Android Open Source Project
- 可能な場合は LE オーディオを使用して、相互運用性を容易にし、遅延の目標を達成します。
- 優れた UX を実現するには、センサーの動きの検出からヘッドフォンで受信される音声までの往復遅延が 150 ミリ秒未満である必要があります。
- Advanced Audio Distribution Profile (A2DP) を使用した Bluetooth (BT) Classic の場合:
- Opusなどの低遅延コーデックを使用します。
- オーディオ HALでレイテンシ制御関数を実装します。これにより、ヘッド トラッキングがオフのときに電力とパフォーマンスの最適化が可能になり、最適でない状態ではヘッド トラッキングが無効になります。
更に Android の空間オーディオでは、ヘッドトラッキング利用時に、自動的に Opus に切り替える実装も可能となっている。
コーデックの切り替え
ダイナミック空間オーディオとヘッド トラッキングがオンになっている場合は、Opus などの低レイテンシ コーデックを使用します。非空間オーディオ コンテンツを再生する場合は、Advanced Audio Coding(AAC)などの低電力コーデックを使用します。
高品質の空間オーディオとヘッド トラッキングの実装 | Android オープンソース プロジェクト | Android Open Source Project
空間オーディオ対応 Pixel ので利用可能なコーデックについては、以下のように記述されている。
persist.bluetooth.a2dp_offload.cap=sbc-aac-aptx-aptxhd-ldac-opus
Bluetooth Codec Changer で見てみても、対応コーデックの中に Opus が確認できる。なお、なぜか Pixel 9 Pro Fold では Opus の記載はない。
以下の画像では、Opus 対応の Pixel Buds Pro を Pixel 8 Pro に接続しているが、Opus で伝送できていることが確認できる。
開発者向けオプションでも Opus が選択可能。
これにより、空間オーディオ対応 Pixel は、Opus による低遅延なヘッドトラッキングに対応していると言える。
persist.vendor.audio.spatializer.speaker_enabled
この項目は、内蔵スピーカーでの空間オーディオ (トランスオーラルモード) に対応しているかどうかを示す、恐らく Pixel 独自の項目。
Pixel Fold、Pixel 9 Pro Fold、Pixel Tablet では、以下のようになっている。
persist.vendor.audio.spatializer.speaker_enabled=true
トランスオーラルモード非対応の Pixel ではこの定義は存在しない。
なお、Pixel Fold と Pixel 9 Pro Fold には以下の項目も存在しているが、Pixel Tablet では見当たらなかった。
ro.audio.spatializer_transaural_enabled_default=false
おそらくトランスオーラルモードの有効設定のデフォルト値だと思われる。
関連するソースコード (AudioService.java) を読むと、上記フラグのバイノーラル版 (ro.audio.spatializer_binaural_enabled_default
) も用意されているようだが、これが定義されている端末は Pixel シリーズでもそれ以外でも見かけたことがない。
final boolean binauralEnabledDefault = SystemProperties.getBoolean(
"ro.audio.spatializer_binaural_enabled_default", true);
final boolean transauralEnabledDefault = SystemProperties.getBoolean(
"ro.audio.spatializer_transaural_enabled_default", true);
ro.audio.stereo_spatialization_enabled
この項目は、恐らく 2.0ch のステレオ音声を、5.1ch や 7.1ch 等に拡張 (アップミックス) に対応しているかどうかを示す項目だと思われる。stereo_spatialization は、Apple の Spatialize Stereo (ステレオを空間化) を彷彿とさせる。
Pixel 9 / 9 Pro / 9 Pro XL / 9 Pro Fold では、以下のようになっている。
ro.audio.stereo_spatialization_enabled=true
こちらは Pixel 9 シリーズで初めて記載を確認した項目で、今のところ以前の機種には記載されていない。
この項目は Android 14 QPR3 Stable ~ Android 15 QPR1 Beta 3 の頃に存在していたが、当時の Pixel 9 Pro XL の設定画面にはこの機能が見当たらなかった。そして、Android 15 QPR2 Beta 1 でこの項目が削除された。
ro.vendor.dolby.dax.version
DAX は Dolby Audio Experience の略で、Android 端末や Windows PC に “Dolby Atmos” や “Dolby Audio” などのブランドで搭載されている音響技術の総称。
かつて存在していた携帯電話向け音響技術パッケージの Dolby Mobile や、Windows PC 向け音響技術パッケージの Dolby PC Entertainment Experience (PCEE) の後継的な存在。そのため、Dolby Audio Experience には Dolby Atmos や Dolby Audio の再生機能以外にも、内蔵スピーカーの音質改善や音量調整などのエフェクトも含まれている。
Dolby Audio Experience (DAX) は世代別に Dolby Surround (DS1)、Dolby Audio X2 (DAX2)、Dolby Audio X3 (DAX3) の3つが存在し、更にその中でバージョンが細かく分かれている。そして、内包されている機能別に Dolby Atmos や Dolby Audio などのエディションが存在する。
エディション、世代、バージョンの詳細については以下の記事にて。後日もう少し具体的な解説記事を公開予定。
Android 10 以降の Dolby Audio Experience 搭載機種では、build.prop にバージョンが記載されていることが多い。空間オーディオ対応 Pixelでは、Android 13 QPR1 Beta 1 ~ 15 QPR2 Beta 1 及び Android 16 Developer Preview 1 のいずれもバージョンは以下のようになっている。
ro.vendor.dolby.dax.version=DAX3_G_3.7.3.0_r1
このことから、Dolby Audio X3 を搭載していることが分かる。
詳しくは先程の「バージョン一覧」の記事を見ていただきたいが、バージョンに “G” が付くのは Pixel シリーズのみであるため、この G はおそらく Google の G で、Pixel 専用バージョンだと思われる。
Pixel が Dolby Audio X3 を搭載しだしたのは、Pixel シリーズに初めて空間オーディオが実装された Android 13 QPR1 Beta 1 のタイミングである。また、Dolby Audio X3 を搭載している Pixel は、空間オーディオ対応機種のみとなっている。
なお、Android 14 QPR3 Stable および Android 15 Beta 2 ~ QPR1 Beta 2 の Pixel 8a は、ファームウェアを見る限り、空間オーディオ非対応にも関わらず、Dolby Audio X3 は搭載していることになっていた。ただし、Android 15 QPR1 Beta 3 及び Android 15 Stable の11月のアップデートでは撤回されたため、恐らくただのミスだったのではないか思われる。
Pixel において Dolby Audio X3 は空間オーディオの再生にのみ使用されており、内蔵スピーカーの音質改善や音量調整のような、Android 端末における Dolby Atmos や Dolby Audio で一般的に期待されているようなオーディオエフェクトは利用できない。
なお、上述の ro.audio.stereo_spatialization_enabled=true がアップミックスを指している場合、恐らくアップミキサーには Dolby Audio X3 の Surround Decoderを使用している可能性がある。
Pixel 5a (5G)、6a、7a、8a が空間オーディオに対応していないのは、Dolby Audio X3 のライセンス費用的な理由だと思われる。
audio_effects.xml
これは、端末に搭載されているオーディオエフェクトが記載されているファイルである。
Android の空間オーディオに対応している場合、ここに Spatializer エフェクトが登録されている。
3. 次のように、
audio_effects.xml
で Spatializer エフェクト ライブラリを宣言します。空間オーディオとヘッド トラッキング | Android オープンソース プロジェクト | Android Open Source Project<audio_effects_conf> <libraries> <library name="spatializer_lib" path="libMySpatializer.so"/> … </libraries> <effects> <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>
audio_effects.xml がどこにあるかは機種によって異なり、Pixel シリーズでは
/vendor/etc/audio_effects.xml
となっている。
なお、Pixel 9 / 9 Pro / 9 Pro XL では上記ディレクトリに audio_effects.xml は見当たらない。/system/etc にも audio_effects.xml はある (これは以前の機種にもある) が、こちらは恐らくテンプレートであり、空間オーディオ周りの記述はない。
空間オーディオ対応 Pixel の /vendor/etc/audio_effects.xml では、Spatializer エフェクトは以下のように登録されている。
<libraries>
<library name="spatializer" path="libspatialaudio.so"/>
</libraries>
<effects>
<effect name="spatializer" library="spatializer" uuid="cc4677de-ff72-11eb-9a03-0242ac130003"/>
</effects>
media_codecs_dolby_c2.xml
media_codecs*.xml は、端末が対応しているコーデックが記載されているファイル。Pixel の場合は、/vendor/etc に存在する。
最近は一つのファイルに全てのコーデックが記載されることは少なく、複数のファイルに分けて記載されていることが多い。
media_codecs_dolby_c2.xml は、Codec 2.0 で実装された Dolby の音声デコーダーについて記載されているファイル。Dolby Audio X3 関連のファイルであるため、Pixel では空間オーディオ対応機種にのみ存在する。
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2022 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<MediaCodecs>
<Decoders>
<MediaCodec name="c2.dolby.eac3.decoder">
<Attribute name="software-codec"/>
<Type name="audio/ac3">
<Alias name="OMX.dolby.ac3.decoder"/>
<Limit name="channel-count" max="6"/>
<Limit name="sample-rate" ranges="32000,44100,48000"/>
<Limit name="bitrate" range="32000-640000"/>
</Type>
<Type name="audio/eac3">
<Alias name="OMX.dolby.eac3.decoder"/>
<Limit name="channel-count" max="8"/>
<Limit name="sample-rate" ranges="32000,44100,48000"/>
<Limit name="bitrate" range="32000-6144000"/>
</Type>
</MediaCodec>
</Decoders>
</MediaCodecs>
5.1ch (6ch) までの Dolby Digital (audio/ac3
) と、7.1ch (8ch) までの Dolby Digital Plus (audio/eac3
) への対応が確認できる。他メーカーの機種では同等のファイルに Dolby Digital Plus JOC (audio/eac3-joc
) や Dolby AC-4 (audio/ac4
) についても記載があるが、Pixel では見当たらない。
Pixel シリーズは「Dolby 〇〇 対応」と謳ってはいないが、あえて呼ぶとするならば「Dolby Audio 対応」と呼ぶのが適切。Dolby Audio は、Dolby Atmos には対応していないものの、何かしらの Dolby の音響技術を採用している製品や音声等に付与されるブランドである。
なお、空間オーディオ対応の Pixel シリーズは Dolby Atmos のライセンスはないが、Dolby Digital Plus デコーダーを持っているため、Dolby Digital Plus JOC による Dolby Atmos は 5.1ch ~ 7.1ch ダウンミックスで再生できるはずである。
だが、Pixel 6 / 6 Pro に最初に空間オーディオが実装された Android 13 QPR1 Beta 1 から、現在最新の Android 15 QPR2 Beta 1 及び Android 16 Developer Preview 1 に至るまで、Dolby Digital Plus JOC を再生するとエラーになるという不具合がずっと続いている。Google に不具合報告して受理されているが、一向に治る気配がない。
mode_2_ch, mode_6_ch, mode_xaural
Pixel 9 / 9 Pro / 9 Pro XL では、/vendor/etc に spatializer というディレクトリが存在し、以下のファイルが入っている。
- base
- mode_2_ch
- mode_6_ch
- mode_xaural
ファイルの中を見ても正直詳細はわからなかったが、いかにもな名称のディレクトリに、いかにもな名称のファイルが入っているため、一応ピックアップした。
xaural については、おそらく x は trans の略で、transaural (トランスオーラル) を指しているのではないかと思われる。
空間オーディオの設定
空間オーディオの設定画面と場所
内蔵スピーカーと有線ヘッドホン向けの設定は、「設定」 → 「音とバイブレーション」 → 「空間オーディオ」に存在する。
なお、「音とバイブレーション」は Android 14 QPR2 以降の表記であり、バージョンによって異なる。例えば Android 13 QPR1 では「着信音とバイブレーション」、Android 13 QPR2 では「サウンドとバイブレーション」だった。
画像は Pixe 8 Pro のため有線ヘッドホン向けの設定しかないが、トランスオーラルモードに対応している機種だと、内蔵スピーカー向けの設定も出現する。参考に、Xperia 1 V のスクリーンショットを掲載する。
また、Bluetooth ヘッドホンについては、「設定」 → 「機器接続」の、各ヘッドホンの個別ページ内に存在する。
Dolby Audio X3 も Android の空間オーディオも、どちらもヘッドホンはステレオでさえあれば何でも良いため、他社製の Galaxy Buds2 や、なんなら AirPods Pro でも、空間オーディオを使用することができる。
Pixel Buds Pro を接続すると、ヘッドトラッキングの設定も出現する。
なお、Galaxy Buds2 もヘッドトラッキング対応だが、ヘッドトラッキングの設定が出ていなかったのは、Galaxy のヘッドトラッキング (360 Audio) は独自実装であるため。
Pixel Buds Pro を接続した場合、空間オーディオとヘッドトラッキングのトグルスイッチとは別で、上部に「空間オーディオ – デモとコントロール」という項目も出現する。こちらをタップすると、Pixel Buds アプリに飛び、デモ音声を聴きながら空間オーディオとヘッドトラッキングの設定をすることが可能。
ちなみに、このデモ音声は Opus 5.1ch となっている。
MediaInfo で取得した音声情報:
音声
ID : 2
形式 : Opus
コーデック ID : A_OPUS
長さ : 29秒 29ミリ秒
チャンネル : 6 チャンネル
チャンネルの配置 : L R C Lb Rb LFE
サンプルレート : 48.0 KHz
圧縮方法 : 非可逆
言語 : 英語
Default : はい
Forced : いいえ
「空間オーディオの設定」とは何なのか
Android の空間オーディオの設定は、説明文だけでは正直何をしているのかが分かりづらい。
Android 13 QPR1 Beta 1 ~ Android 14 QPR3 Beta 2.2、Android 15 Developer Preview 1 ~ 2 標準の説明文:
対応するメディアを臨場感あふれる音声でお楽しみいただけます
有線ヘッドホン / 内蔵スピーカー向けの空間オーディオ設定画面より
Android 14 QPR3 Stable、Android 15 Beta 1 ~ Android 15 QPR2 Beta 1、Android 16 Developer Preview 1 標準の説明文:
対応するメディアの臨場感を高めます
有線ヘッドホン / 内蔵スピーカー向けの空間オーディオ設定画面より
Pixel Buds Pro の設定ページの説明文:
臨場感あふれるサラウンド音声で豊かなサウンドをお楽しみいただけます
Pixel Buds Pro 向けの空間オーディオ設定画面より
基本的に、Android の空間オーディオの設定は、ユーザー視点では以下の2つの意味を持つ。
- バーチャライザーの有効化 / 無効化
- 再生する音声 (ステレオ / 空間オーディオ) の切り替え (対応アプリのみ)
端末メーカーによってはこれらに加え、別の意味 (ステレオ音声のアップミックス等) も持たせている場合もあるが、Pixel シリーズではこの辺りは特にカスタマイズはなく、上記2つの動きとなる。
2つ目の「対応アプリ」とは、Android の空間オーディオの API を利用し、それによって音声の切り替え処理を行っているアプリ (YouTube など) を指している。
空間オーディオの API を使用することにより、dumpsys
で取得したのと同じような情報をアプリ側でも取得することができ、それに応じて取得する音声を変更するなど、アプリ側の挙動を変更することが可能。
また、空間オーディオやヘッドトラッキングの状態が変更されたことを通知する API もあるため、それを使用すれば再生中でもリアルタイムに挙動の変更を行うことが可能。
Android 共通の API により、アプリ側は空間オーディオの実装がどのようなものであるか (DAX3? 360RA?) を気にすることなくシステムとの連携を行える点は、Android の空間オーディオの特徴の一つである。
なお、空間オーディオに対応していないアプリでも、API 以外の空間オーディオの恩恵 (コーデックを問わないバーチャライズ、メーカーしばりのないヘッドトラッキング、ヘッドトラッキングの低遅延化) は受けられる。
空間オーディオで処理できる音声
Android の空間オーディオでは、デコーダーとバーチャライザーの分離により、デコーダーに紐づかない音声もバーチャライズ可能となった。
※ 下記の引用にある「Spatializer」「スペーシャライザー」はバーチャライザーのことを指している。難しい文章なので、適当に読み飛ばしていただいて構わない。
新しいモデルでは、スペーシャライザーはオーディオ フレームワークの一部であり、デコーダーから分離されています。 Spatializer は混合オーディオ コンテンツを取り込み、ステレオ ストリームをオーディオ HAL にレンダリングします。 Spatializer をデコーダーから切り離すことで、OEM はデコーダーと Spatializer に異なるベンダーを選択し、ヘッド トラッキングに必要なラウンドトリップ レイテンシーを実現できます。この新しいモデルには、ヘッド トラッキング用のセンサー フレームワークへのフックも含まれています。
空間オーディオとヘッド トラッキング | Android オープンソース プロジェクト | Android Open Source Project
今まで、例えば Dolby Audio X3 を搭載した端末では、Dolby Atmos や Dolby Audio の音声はバーチャライズして再生することができていたが、AAC 5.1ch などは基本的に 2.0ch ダウンミックス再生となっていた。しかし、Android の空間オーディオでは、Dolby のバーチャライザーで AAC 5.1ch などもバーチャライズできるようになった。
Android の空間オーディオでは、最低限 AAC と LPCM の 5.1ch 音声はバーチャライズできるようにしないといけない。
オーディオ形式
空間オーディオが有効であり、レンダリング デバイスが有線または Bluetooth ヘッドセットである場合、次のオーディオ形式はスペイシャライザー エフェクトでレンダリングされなければなりません。
- AAC、5.1 チャンネル
- Raw PCM、5.1 チャンネル
優れたユーザー エクスペリエンスを実現するために、次の形式 / チャンネル構成をサポートすることを強くおすすめします。
高品質の空間オーディオとヘッド トラッキングの実装 | Android オープンソース プロジェクト | Android Open Source Project
- ドルビー デジタル プラス
- 5.1.2、7.1、7.1.2、7.1.4 チャンネル
上記の他にも、デコーダーがマルチチャンネル再生に対応しているコーデックがあれば、同様にバーチャライズすることが可能。
Pixel シリーズでは、少なくとも以下の音声を Dolby Audio X3 でバーチャライズできることを確認できた。
- Dolby Digital (5.1ch)
- Dolby Digital Plus (5.1ch / 7.1ch)
- AAC (5.1ch)
- FLAC (5.1ch)
- Opus (5.1ch)
- WAV (5.1ch)
空間オーディオが使えるサービス
Pixel のサポートページには、以下のように記載されている。
Google Pixel では、5.1 以上の音声トラックに対応しているストリーミング プラットフォーム(YouTube、Max、Netflix、Disney Plus など)の映画やテレビ番組を視聴する際に空間オーディオを利用できます。Netflix でオンデバイスの空間オーディオを利用するには、Google Pixel Buds Pro と接続し、ヘッド トラッキングをオンにする必要があります。
Google Pixel で映画やテレビ番組の視聴時に空間オーディオを利用する – Google Pixel ヘルプ
これらはあくまで「5.1 以上の音声トラックに対応しているストリーミング プラットフォーム」として紹介されているものなので、必ずしも Android の空間オーディオの API を使用しているわけではない。
Android の空間オーディオが実装されたことにより空間オーディオが聴けるようになったサービスもあれば、単に Pixel が Android の空間オーディオと同時に実装した Dolby Audio X3 による恩恵で空間オーディオが聴けるようになっただけのサービスもある。
このあたりの対応状況を整理すると、以下のようになる。(2024/5/16 時点)
Android の空間オーディオ及び Dolby Audio X3 搭載により、空間オーディオが聴けるようになったサービス
- YouTube
- Netflix (Dolby Digital Plus)
Netflix では、端末側での Dolby Digital Plus 5.1ch のデコード&バーチャライズと、既にバーチャライズされた AMBEO 2-Channel Spatial Audio の再生が使い分けられている。詳細は後ほど。
Dolby Audio X3 搭載により、空間オーディオが聴けるようになったサービス
これらのサービスは、Android の空間オーディオが無効でも非対応でも、空間オーディオを聴くことができる。
- Disney+
- Live Extreme
- NeSTREAM LIVE
- U-NEXT (端末側でのデコード&バーチャライズ)
なお、一部のサービスは Dolby Atmos 非対応の Dolby Digital Plus 対応機種にも Dolby Atmos (Dolby Digital Plus JOC) を提供している。そのような音声の場合、Pixel は先程の不具合によりデコード不可。
U-NEXT では Dolby Digital Plus が提供されており、端末側が Dolby Digital Plus に対応していれば端末側でデコード&バーチャライズ、非対応ならアプリ内でデコード&バーチャライズを行う。
そもそも Android の空間オーディオも Dolby Audio X3 も無関係で空間オーディオが聴けるサービス
- Amazon Music (アプリ内でのデコード&バーチャライズ)
- Netflix (AMBEO 2-Channel Spatial Audio)
- U-NEXT (アプリ内でのデコード&バーチャライズ)
これらは端末側でバーチャライズを行うわけではないので、端末側の仕様や設定に関係なく空間オーディオを聴くことができるが、ヘッドトラッキングは行えない。
Amazon Music の空間オーディオは、端末側が Dolby AC-4 IMS に対応していれば端末側でデコード&バーチャライズ、非対応ならアプリ内でデコード&バーチャライズを行う。Google Pixel は今のところ Dolby AC-4 IMS に非対応なため、アプリ内で処理が行われる。
Android の空間オーディオでは、上記のような問題を防ぐ策も用意されているが、今のところ Amazon Music では活用されていない。
空間オーディオを無効にする
Disabling spatial audio音声の二重処理防止のために、コンテンツがすでにバーチャライズされていることを示す場合は、
setIsContentSpatialized(true)
を呼び出します。
To indicate that your content has already been spatialized, callsetIsContentSpatialized(true)
so that the audio isn’t double-processed.あるいは、
Spatial Audio | Android media | Android Developers を自分なりに翻訳setSpatializationBehavior(AudioAttributes.SPATIALIZATION_BEHAVIOR_NEVER)
を呼び出してバーチャライザーの動作を調整し、バーチャライズを完全に無効にします。
Alternatively, adjust the spatialization behavior to disable spatialization altogether by callingsetSpatializationBehavior(AudioAttributes.SPATIALIZATION_BEHAVIOR_NEVER)
.
Dolby Audio 対応機種では空間オーディオが聴けないサービス
- Amazon Music (端末側でのデコード&バーチャライズ)
- Apple Music (Classical 含む)
Android 版 Apple Music は、Dolby Audio は提供していないし、Dolby Atmos 非対応の Dolby Digital Plus 対応機種には Dolby Atmos (Dolby Digital Plus JOC) も提供していない。なお、iOS / iPadOS 版はどちらも提供している。
Pixel の Dolby Audio X3 は Dolby Atmos 非対応の Dolby Audio 仕様であるため、Apple Music では空間オーディオが聴けない。
そもそも Android 端末に空間オーディオを提供していないサービス
- Amazon Prime Video
- Apple TV+ (そもそもアプリがない)
YouTube における空間オーディオの挙動
YouTube はいち早く Android の空間オーディオに対応したサービスである。
Android 端末で YouTube の 5.1ch 音声を聴くには、端末側が Android の空間オーディオに対応し、かつ有効になっていることが求められる。Dolby Atmos などに対応している端末でも、空間オーディオに対応していなければステレオ音声しか聴くことができないという、少々厳しい仕様となっている。
YouTube の 5.1ch 音声
YouTube が採用している 5.1ch 音声のフォーマットは以下の通り。
ID | FourCC | コーデック | コーデック 略称 |
ビット レート |
サンプリング 周波数 |
---|---|---|---|---|---|
256 | mp4a | MPEG-4 HE-AAC v1 | HE-AAC | 192kbps | 24.0kHz |
258 | mp4a | MPEG-4 AAC LC | AAC LC | 384kbps | 48.0kHz |
328 | ec-3 | Dolby Digital Plus (E-AC-3) | DD+ | 384kbps | 48.0kHz |
380 | ac-3 | Dolby Digital (AC-3) | DD | 384kbps | 48.0kHz |
以降、コーデックの名称は上記表の「コーデック略称」で呼ぶ。また、HE-AAC と AAC LC の区別が必要ないときは、単に AAC と呼ぶ。
YouTube の 5.1ch 音声は当初 AAC のみだったが、少なくとも 2022/05/17 (※筆者が気付いた日であり、それ以前から行われていた可能性大) 以降、順次 DD/DD+ へエンコードされていっている。ほとんどは DD/DD+ エンコードが完了しているが、一部 AAC のみのものも残っている。
そして、2023/10/14 以降 (※筆者調べ) に投稿された動画だと DD/DD+ エンコードのみで、AAC エンコードはされていない。(あくまで 5.1ch 音声の話であり、2.0ch の AAC や Opus へのエンコードは現在も行われている)
検証方法
現在どの音声が再生されているかは YouTube の「統計情報」で確認可能。統計情報の表示の仕方はアプリのバージョンによって若干異なるが、バージョン 19.18.34 の場合は以下の通り。
① YouTube アプリの設定 → 「全般」 → 「統計情報を有効にする」を有効にする。なお、一度有効にしても、無効に戻っている場合もある。
② YouTube の再生画面の設定 → 「その他の設定」 → 「統計情報」をタップすると、統計情報が表示される。なお、古いバージョンでは、「その他の設定」はない。
統計情報の Audio format のところに、現在再生されている音声の情報が記載されている。なお、ID が 250 か 251 の場合は Opus 2.0ch、139 か 140 の場合は AAC 2.0ch。右上の [x] をタップすると、統計情報が閉じる。
検証結果
検証に使用した動画のリンクを貼っているが、音声のエンコード状況は検証時点の情報であり、今後変更になる可能性がある。また、YouTube の空間オーディオは不安定であるため、音声の切り替えが上手くいかない場合もある。
5.1ch 音声が AAC のみの場合
梅田ブルク7「Dolby Cinema™(ドルビーシネマ)」2019.6.28 fri 関西初上陸!
統計情報: 258 mp4a (AAC LC 5.1ch)
5.1ch 音声が DD/DD+ のみの場合
THX Cavalcade Trailer (2001) [5.1] [4K] [FTD-1394]
統計情報: 328 ec-3 (DD+ 5.1ch)
5.1ch 音声が AAC も DD/DD+ もある場合
統計情報: 328 ec-3 (DD+ 5.1ch)
いずれも Android の空間オーディオの設定に応じて、音声の切り替えが行われることを確認できた。また、AAC 5.1ch のバーチャライズという、Android の空間オーディオの特徴が生かされていることも確認できた。
Netflix における空間オーディオの挙動
Netflix も Android の空間オーディオに対応している。
Netflixで空間オーディオとヘッドトラッキングを利用する
Netflixプレミアムプランへの加入、対応デバイス、対応したイヤホンまたはヘッドセットが必要になります。
対応デバイスのリストとヘッドトラッキングをオンにする手順については、以下の項目から確認してください:
Pixel Buds ProとGoogle Pixelスマートフォン
対応デバイスのリストとヘッドトラッキングをオンにする手順については、Googleのサポートサイトをご覧ください。
Netflixの空間オーディオ | Netflixヘルプセンター
Netflix でオンデバイスの空間オーディオを利用するには、Google Pixel Buds Pro と接続し、ヘッド トラッキングをオンにする必要があります。
Google Pixel で映画やテレビ番組の視聴時に空間オーディオを利用する – Google Pixel ヘルプ
「オンデバイスの空間オーディオ」とは、具体的には「(DD+ 音声を) 端末側でデコードし、バーチャライズすること」を指している。ヘッドトラッキングを利用するには端末側でのバーチャライズが必要だが、その分通信量や端末への負荷が増える。そのため、ヘッドトラッキングがオフの場合は、事前にバーチャライズされた音声 (AMBEO 2-Channel Spatial Audio) を使ってもらおう、という考えなのだろう。
検証方法
Netflix は YouTube のようにフォーマット情報を確認する手段が用意されていないので、ログから探し出す。
個人的にいろいろ試したところ、以下のコマンドで確認するのが良いと感じられた。
adb shell "logcat -s CCodec:* | grep -e 'audio' -e 'int32_t channel-count' | grep -v 'raw'"
DD+ 5.1ch の場合:
D CCodec : int32_t channel-count = 6
D CCodec : string mime = "audio/eac3-joc"
D CCodec : int32_t channel-count = 6
デコーダーの仕様により、Dolby Atmos のコンテンツでなくとも eac3-joc
と表示される。また、LFE の 0.1ch が切り上げられて 6ch 表記になっている。
AAC 2.0ch の場合:
D CCodec : int32_t channel-count = 2
D CCodec : string mime = "audio/mp4a-latm"
D CCodec : int32_t channel-count = 2
mp4a-latm
は AAC のこと。ステレオ音声なのか AMBEO 2-Channel Spatial Audio なのかまではログでは判別できない。
検証結果
選択される音声
実際に試したところ、空間オーディオの設定がオンだと DD+ 5.1ch が降ってきて、オフだと AAC 2.0ch が降ってきた。また、非対応の内蔵スピーカーでも AAC 2.0ch が降ってきた。確かに Android の空間オーディオの API が使用されていることが確認できた。
ただし、ヘッドトラッキングに関しては「ヘッド トラッキングをオンにする必要があります」とあるにも関わらず、オフの状態や、そもそも非対応のヘッドホンでも DD+ 5.1ch が降ってきた。また、なぜか Bluetooth のコーデックによっても挙動が異なっていた。
このあたりの挙動について検証してみた結果、以下のようになった。
DD+ 5.1ch
- Pixel 8 Pro とのヘッドトラッキングに対応
- Pixel Buds Pro (SBC/AAC/Opus)
- Pixel 8 Pro とのヘッドトラッキングに非対応
- Galaxy Buds2 (SBC/AAC)
- AirPods Pro (SBC/AAC)
- Walkman NW-ZX300 の Bluetooth レシーバー (SBC/AAC)
AAC 2.0ch
- 空間オーディオ対応
- Walkman NW-ZX300 の Bluetooth レシーバー (LDAC)
- Walkman NW-ZX300 の USB DAC
- Sound BlasterX G6
- Galaxy USB-C Headset Jack Adapter
- 空間オーディオ非対応
- Pixel 8 Pro の内蔵スピーカー
なお、aptX/aptX HD は対応機器を持っておらず、検証できていない。また、いずれの出力先においても、ダウンロード再生の場合は AAC 2.0ch だった。
Walkman NW-ZX300 の Bluetooth レシーバーにおいて、LDAC の時のみ AAC 2.0ch となるのはよく分からないが、アプリをタスクキルしたり端末を再起動したりしながら、何度試しても毎回上記の挙動となったため、おそらく仕様だと思われる。
どうやら、「Netflix でオンデバイスの空間オーディオを利用する」のに必要なのは、「Google Pixel Buds Pro と接続し、ヘッド トラッキングをオンにする」のではなく、「任意の Bluetooth ヘッドホンを SBC/AAC/Opus (aptX 系は不明) で接続し、空間オーディオをオンにし、ストリーミング再生する」ことのようだ。
音声が選択されるタイミング
Netflix では、DD+ 5.1ch を再生するか AAC 2.0ch を再生するかの判定は、再生開始時にのみ行われているように見受けられる。
一度 DD+ 5.1ch が選択された後、再生中や一時停止中に、空間オーディオをオフにしたり、Bluetooth 接続を解除して内蔵スピーカーや有線ヘッドホンに切り替えたりしても、DD+ 5.1ch のままだった。
Android の空間オーディオでは、空間オーディオの状態が変更されたことを検知する API (Spatializer.OnSpatializerStateChangedListener
) もあるのだが、これは使用していないようだ。
なお、再生を開始して DD+ 5.1ch が選択された後、再生を停止 (一時停止やタスクキルではなく、元の画面に戻る) し、空間オーディオをオフにしたり、有線ヘッドホンや内蔵スピーカーでの再生に切り替えた後に、もう一度再生しても、まれに DD+ 5.1ch が引き続き選択されることもあった。アプリ起動後初回の再生では正しく判定されるが、2回目以降は前回の判定がそのまま残ってしまうこともあるようだ。
他機種の状況と考察
Netflix のサイトで Pixel が名指しされているのが気になり、Android の空間オーディオに対応している Xperia 1 V、Galaxy S24 Ultra、AQUOS R8 pro、Xiaomi 13T でも試してみたが、Netflix の DD+ 音声を聴くことはできなかった。
Android の空間オーディオは標準化を一つの目的として設計されている (ように見える) にも関わらず、Netflix の空間オーディオはセーフリスト方式となっているようだ。
Netflix は HD 再生や Dolby Atmos についても、端末の対応コーデックや Widevine のレベルによらず、セーフリストで管理して提供しているので、この挙動はある意味 Netflix らしいと言えなくもない。
なお、Galaxy は別で名指しされているが、Galaxy Buds シリーズとの組み合わせで実現する独自のヘッドトラッキング (360 Audio) の手順が示されているように、Android の空間オーディオとはまた別の実装となっている。(DD+ は不使用)
Galaxy BudsとSamsung Galaxyスマートフォン
Netflix空間オーディオに対応するSamsungのスマートフォンとイヤホン:
- Samsung Galaxy S23
- Galaxy Buds Pro
- Galaxy Buds2
- Galaxy Buds2 Pro
ヘッドトラッキングをオンにするには:
Netflixの空間オーディオ | Netflixヘルプセンター
- お使いのスマートフォンにイヤホンを接続します。
- [Galaxy Wearable]アプリを開きます。
- イヤホン設定 (Earbud Settings) > 詳細設定 (Advanced) をタップします。Buds2 Proの場合は、[360オーディオ (360 audio)]をタップします。
- スイッチをタップして[360オーディオ (360 audio)]をオンにします。
- スイッチをタップして[ヘッドトラッキング (Head tracking)]をオンにします。
対応スマホとしては Galaxy S23 しか掲載されていないが、こちらの挙動は Galaxy S24 Ultra でも確認できた。今後、Galaxy の空間オーディオ解説記事を書く際には、このあたりの挙動についても解説する。
わざわざ Galaxy 向けを別の実装とするあたり、Netflix は Android の空間オーディオの API を使いたくて空間オーディオに対応したと言うよりも、単にヘッドトラッキングのために、各社の仕様に対応した実装をしているだけのように見受けられる。
まとめ
Android の空間オーディオまとめ:
- Android の空間オーディオとは「Android 端末における Dolby Atmos や 360 Reality Audio などを、従来よりももっと高度に活用するための、システム面の整備」
- 空間オーディオの実装に左右されずにシステムとアプリ間の連携が可能
- コーデックを問わないバーチャライズが可能
- メーカーしばりのないヘッドトラッキングが可能
- ヘッドトラッキングが OS レベルで低遅延化
Pixel の空間オーディオまとめ:
- Dolby Audio X3 を使用して空間オーディオが実装されている
- トランスオーラルモード (内蔵スピーカーでの空間オーディオ) は一部機種のみ対応
- Opus による低遅延なヘッドトラッキングに対応
- DD、AAC、FLAC、Opus、WAV の 5.1ch 音声のバーチャライズに対応
- DD+ の 7.1ch 音声のバーチャライズに対応
- Dolby Atmos (DD+ JOC) は不具合により再生不可