Xperia の空間オーディオを調査

最終更新日

はじめに ~ Android の空間オーディオとは

この記事は、Xperia 1 VI、Xperia 1 V、Xperia 5 V に実装されている空間オーディオについて、個人的に調査した内容をまとめたものである。

各機種の対応状況はこちら:

なお、この記事における「空間オーディオ」とは、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 が 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 に続く Android の空間オーディオ解説記事第2弾として、Xperia の空間オーディオを調査した内容についてまとめる。どの記事も単体で読めるようにしているため、いくつかの説明は重複している。

なお、この記事の内容は、Android 14 の Xperia 1 VI (XQ-EC44) と、Android 13 及び Android 14 の Xperia 1 V (XQ-DQ44) で調査している。スクリーンショットに関しては、特に記載がない限り Android 14 の Xperia 1 V のものを掲載している。

また、Xperia 1 VI、Xperia 1 V、Xperia 5 V を特に区別する必要がない時は、「空間オーディオ対応の Xperia」と記載する。

dumpsys audio

実機を所持している場合、空間オーディオの仕様や現在の状態を確認するには dumpsys コマンドを使用するのが手っ取り早い。

dumpsys では様々な情報を取得することができるが、下記のように audio サービスを指定することで、オーディオ周りの情報のみを取得することができる。

adb shell dumpsys audio

空間オーディオ以外の情報も多く出力されるが、この記事では空間オーディオの部分のみを対象に掲載・解説する。

まず、このコマンドで取得可能な空間オーディオの情報について、把握している範囲で列挙する。

  • mHasSpatializerEffect: 空間オーディオに対応しているかどうか
  • isSpatializerEnabled: 空間オーディオが有効かどうか
  • mIsHeadTrackingSupported: ヘッドトラッキングに対応しているかどうか
  • supported head tracking modes: 対応しているヘッドトラッキングのモード
  • mDesiredHeadTrackingMode: ヘッドトラッキングの設定値
  • mActualHeadTrackingMode: ヘッドトラッキングの状態
  • headtracker available: ヘッドトラッカーが利用可能かどうか
  • supports binaural: バイノーラルモード (ヘッドホンでの空間オーディオ) に対応しているかどうか
  • supports transaural: トランスオーラルモード (内蔵スピーカーでの空間オーディオ) に対応しているかどうか

このコマンドの出力は、設定や音声の出力先によって一部の値が変動するため、いくつかのパターンで確認していく。

出力先: 任意、空間オーディオ: 無効

Spatial audio:
mHasSpatializerEffect:true (effect present)
isSpatializerEnabled:false (routing dependent)
SpatializerHelper:
        mState:6
        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:true
        mSpatOutput:0

ここから分かる情報は以下の通り。

  • 空間オーディオ: 対応しているが設定は無効
  • ヘッドトラッキング: 対応しているが現在は利用不可
  • バイノーラルモード: 対応
  • トランスオーラルモード: 対応

Android の空間オーディオは端末メーカーとしても説明しづらい割には説明するメリットも少ないためか、Sony に限らず Android の空間オーディオに対応していることに触れる端末メーカーはほぼ見かけない。

Xperia の場合、空間オーディオ自体は設定画面や取扱説明書にさらっと記載されている程度だが、ヘッドトラッキングについては紹介ページでアピールされている。

ヘッドトラッキングによるライブ会場のような臨場感

まるで実際のライブを観ているような臨場感のあるサウンド体験が可能です。
頭の向きに応じて音の方向が変わる新しい音楽体験をご提供します。

360 Reality Audio ヘッドトラッキング :
ヘッドトラッキング対応のヘッドホン、Android13以降のヘッドトラッキング対応で360 Reality Audio認定スマートフォンをご使用の上、360 Reality Audioコンテンツをご視聴頂いた際にご体感いただけます。※Amazon Musicはサービス対象外です

Android ヘッドトラッキング :
ヘッドトラッキング対応のヘッドホン、Android13以降のヘッドトラッキング対応スマートフォンをご使用の上、マルチチャンネルコンテンツをご視聴頂いた際にご体感いただけます。
お使いのスマートフォンによって、マルチチャンネルコンテンツ再生とヘッドトラッキングを使用できるアプリは異なります。 Xperia 1 VI、Xperia 1 Vでマルチチャンネルコンテンツが再生できるのはYouTubeのみになります。

オーディオテクノロジー | Xperia × Audio / Visual | Xperia(エクスペリア) | ソニー

Android の空間オーディオに対応していても、ヘッドトラッキングは独自実装とすることもできるため、単に「ヘッドトラッキング対応」と書かれているだけでは、どのような実装がされているのかまでは不明。

しかし、空間オーディオ対応の Xperia では mIsHeadTrackingSupportedtrue となっているため、独自実装ではなく Android の空間オーディオに準拠した実装であることがわかる。

ヘッドトラッキングを Android の空間オーディオに準拠した実装とすることにより、「はじめに」で挙げた以下のメリットを実現することができる。

  • 低遅延なヘッドトラッキングのための、OS レベルでの最適化
  • メーカーしばりのないヘッドトラッキングのための、Android 標準プロトコル

上記の「Android 標準プロトコル」とは、具体的には「ヘッド トラッカー HID プロトコル」というもので、ヘッドトラッキング対応のヘッドホンと Android 端末間でセンサー情報をやりとりするための通信方式である。

今までヘッドトラッキングといえば、独自規格を使用し、端末とヘッドホンを両方同じメーカーで揃えないといけない場合もあった。しかし、Android の空間オーディオでは、Android 標準規格が用意されたことにより、メーカーしばりのないヘッドトラッキングができるようになった。

これにより、ヘッドホンを作っていない Android 端末メーカーでもヘッドトラッキングに対応しやすくなるし、Android 端末を作っていないオーディオ機器メーカーでも汎用的なヘッドトラッキング対応ヘッドホンを作ることも可能になる。

Sony からもこのプロトコルを使用したヘッドホンが登場しており、これらは空間オーディオ対応の Pixel シリーズでもヘッドトラッキングを利用できる。

出力先: 内蔵スピーカー、空間オーディオ: 有効

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_DISABLED
        headtracker available:false
        supports binaural:true / transaural:true
        mSpatOutput:3477

空間オーディオの設定が有効になった他、各種パラメーターの値にも動きがあった。内蔵スピーカーでは当然ヘッドトラッカーは利用不可。

出力先: 有線ヘッドホン (3.5mm)、空間オーディオ: 有効

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_DISABLED
        headtracker available:false
        supports binaural:true / transaural:true
        mSpatOutput:3525

mSpatOutput (出力先 ID?) の値以外は先程と変わらず。

出力先: 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:true
        mSpatOutput:3605

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_DISABLED
        headtracker available:true
        supports binaural:true / transaural:true
        mSpatOutput:3605

ヘッドトラッキングの設定値 が HEAD_TRACKING_MODE_RELATIVE_WORLD に変わったが、現在の状態は無効のままになっている。実際の挙動を試しても、ヘッドトラッキングが動作しているようには感じられなかった。

(参考) 空間オーディオ非対応のXperia 1 IV

今まで見てきた 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

mHasSpatializerEffectmIsHeadTrackingSupported などが false になっていることが確認できる。

ファームウェア

次に、ファームウェアで気になった箇所を紹介する。なお、ここで紹介するファームウェアの内容は 空間オーディオ対応の Xperia 共通の内容となっている。

build.prop

build.prop とは、ファームウェアに絡む様々な情報が記載されたファイルである。build.prop は同名のファイルが複数の場所に存在し、どのファイルに空間オーディオ絡みの情報が載っているかは端末メーカーにより異なる。基本的に /vendor/build.prop に記載されていることが多く、Xperia も同様。

ro.audio.spatializer_enabled

この項目は、空間オーディオに対応しているかどうかを示すものである。対応している場合はこの値が true に設定され、非対応の場合はこの項目がない。

1. 次のように、 device.mkファイルで空間オーディオ サポートを宣言します。

PRODUCT_PROPERTY_OVERRIDES += \
     ro.audio.spatializer_enabled=true

これにより、 AudioServiceはスペーシャライザ サポートを初期化します。

空間オーディオとヘッド トラッキング  |  Android オープンソース プロジェクト  |  Android Open Source Project

空間オーディオ対応の Xperia では true になっていることから、空間オーディオに対応していることが分かる。

ro.audio.spatializer_enabled=true

ちなみに先程の dumpsys の出力にあった mHasSpatializerEffect は、この項目を参照している。

mHasSpatializerEffect = SystemProperties.getBoolean("ro.audio.spatializer_enabled", false);
AudioService.java – Android Code Search

persist.vendor.bt.a2dp_offload_cap, persist.bluetooth.a2dp_offload.cap

これらの項目は、Bluetooth の A2DP プロファイル (音声伝送方式の一種) で利用可能なコーデックを示すものである。恐らく後者が基本の値で、前者はそれをオーバーライドする値だと思われる。

空間オーディオと直接関係する項目ではないが、ヘッドトラッキングの実装の調査においては重要な項目となっている。

というのも、Android の空間オーディオでは、ヘッドトラッキングにおける音声の伝送コーデックとして、低遅延な Opus を使用することが推奨されている (必須ではない)。

推奨事項

OEM は、実装時に次のガイドラインを使用することをお勧めします。

  • 可能な場合は LE オーディオを使用して、相互運用性を容易にし、遅延の目標を達成します。
  • 優れた UX を実現するには、センサーの動きの検出からヘッドフォンで受信される音声までの往復遅延が 150 ミリ秒未満である必要があります。
  • Advanced Audio Distribution Profile (A2DP) を使用した Bluetooth (BT) Classic の場合:
    • Opusなどの低遅延コーデックを使用します。
    • オーディオ HALでレイテンシ制御関数を実装します。これにより、ヘッド トラッキングがオフのときに電力とパフォーマンスの最適化が可能になり、最適でない状態ではヘッド トラッキングが無効になります。
空間オーディオとヘッド トラッキング  |  Android オープンソース プロジェクト  |  Android Open Source Project

更に Android の空間オーディオでは、ヘッドトラッキング利用時に、自動的に Opus に切り替える実装も可能となっている。

コーデックの切り替え

ダイナミック空間オーディオとヘッド トラッキングがオンになっている場合は、Opus などの低レイテンシ コーデックを使用します。非空間オーディオ コンテンツを再生する場合は、Advanced Audio Coding(AAC)などの低電力コーデックを使用します。

高品質の空間オーディオとヘッド トラッキングの実装  |  Android オープンソース プロジェクト  |  Android Open Source Project

空間オーディオ対応の Xperia で利用可能なコーデックについては、以下のように記述されている。

persist.vendor.bt.a2dp_offload_cap=sbc-aptx-aptxtws-aptxhd-aac-ldac
persist.bluetooth.a2dp_offload.cap=sbc-aac-aptx-aptxhd-ldac

前者にのみ aptxtws があるという違いはあるが、どちらも Opus はない。

Bluetooth Codec Changer で見てみても、対応コーデックの中に Opus はない。aptX TWS+ には対応しているようなので、build.prop の値は前者の方が正しいと思われる。

上記画像では Opus 対応の Pixel Buds Pro を接続しているが、音声は SBC か AAC でしか伝送できない。

開発者向けオプションでも Opus は選択不可。

どうやら 空間オーディオ対応の Xperia は、Opus による低遅延なヘッドトラッキングには対応していないようだ。

比較用に、Opus 対応の Pixel 8 Pro だと以下の通り。

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 にバージョンが記載されていることが多い。空間オーディオ対応の Xperia では、Android 13 でも 14 でもバージョンは以下のようになっている。

ro.vendor.dolby.dax.version=DAX3_3.7.0.8_r1

このことから、空間オーディオ対応の Xperia は Android 12 向けの Dolby Audio X3 を搭載し、Dolby Atmos に対応していることがわかる。

Xperia は滅多に Dolby Audio X3 をアップデートしない。機種ごと、Android バージョンごとの状況は以下の通り。

DAX3_1.1.1.24_r1 (Android 9 用)

  • Xperia 1, 5 (Android 9〜11)
  • Xperia 1 II, 5 II, PRO (Android 10〜12)
  • Xperia 1 III, 5 III, PRO-I (Android 11〜12)

DAX3_3.7.0.8_r1 (Android 12 用)

  • Xperia 1 III, 5 III, PRO-I (Android 13)
  • Xperia 1 IV, 5 IV (Android 12〜14)
  • Xperia 1 V, 5 V (Android 13〜14)
  • Xperia 1 VI (Android 14)

※ ポータブルデータトランスミッター PDT-FP1 は、Dolby Audio X3 や 360 Reality Audio、Android の空間オーディオなどは載っていない

古い Dolby Audio Experience を使い続けることは特に問題ないようで、Sony 以外でもたまに見かける。(特に Xiaomi、時々 Lenovo、稀に OPPO も)

しかし、Android の空間オーディオを搭載している端末メーカーの多く (Motorola、Samsung、SHARP、Xiaomi など) は、Android 13 以降用の Dolby Audio X3 を使用して空間オーディオを実装している。(Google 向けの DAX3_G_3.7.3.0_r1 は正直よく分からない)

Xiaomi に至っては、空間オーディオ対応機種のみ Android 13 用の Dolby Audio X3 を搭載し、非対応の機種では Android 13 以降でも Android 11 用の Dolby Audio X3 を使い続けているぐらいだ。

そんな中、Xperia は Android 12 用の古い Dolby Audio X3 を使い続けているが、Android の空間オーディオの実装において支障はないのだろうか。その答えは、次に解説する audio_effects.xml と、後ほど掲載する設定画面にある。

audio_effects.xml

これは、端末に搭載されているオーディオエフェクトが記載されているファイルである。

Android の空間オーディオに対応している場合、ここに Spatializer エフェクトが登録されている。

3. 次のように、 audio_effects.xmlで Spatializer エフェクト ライブラリを宣言します。

<audio_effects_conf>
      <libraries>
         <library name="spatializer_lib" path="libMySpatializer.so"/>
          …
         </libraries>
      <effects>
       <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>
空間オーディオとヘッド トラッキング  |  Android オープンソース プロジェクト  |  Android Open Source Project

audio_effects.xml がどこにあるかは機種によって異なる。通常は

/vendor/etc/audio_effects.xml

だが、Qualcomm の QSSI (Qualcomm Single System Image) をベースにしている機種では、

/vendor/etc/audio/sku_(SoC のコードネーム)/audio_effects.xml

となっていることが多い。

Xperia 1 VI は Snapdragon 8 Gen 3 (pineapple) を搭載しているため、

/vendor/etc/audio/sku_pineapple/audio_effects.xml

Xperia 1 V や Xperia 5 V は Snapdragon 8 Gen 2 (kalama) を搭載しているため、

/vendor/etc/audio/sku_kalama/audio_effects.xml

となっている。

空間オーディオ対応の Xperia の audio_effects.xml では、Spatializer エフェクトは以下のように登録されている。

<libraries>
    <library name="spatializer" path="libtsrspatializer.so"/>
</libraries>

<effects>
    <effect name="spatializer" library="spatializer" uuid="93f04452-e4fe-41cc-91fa-e475b6d1d6a0"/>
</effects>

libtsrspatializer (lib-tsr-spatializer) の tsr は、おそらく tsr = Three Sixty RA = 360 Reality Audio の略だと思われる。こじつけではなく、実際に 360 Reality Audio 関連のシステムアプリのパッケージ名で threesixtyra (three-sixty-ra) という表記が用いられている。

アプリ名 パッケージ名
360 Reality Audio System jp.co.sony.threesixtyra.system
360 Reality Audio Settings jp.co.sony.threesixtyra.settings

空間オーディオ対応の Xperia は Dolby Audio X3 と 360 Reality Audio の両方が実装されているが、audio_effects.xml に登録されている Spatializer は 先ほど抜粋したものしかない。そのため、Xperia は Android の空間オーディオは 360 Reality Audio 側でのみ実装され、Dolby Audio X3 は無関係のように見える。

そして、それを裏付ける証拠が設定画面に記載されていた。

空間オーディオの設定

空間オーディオの設定画面と場所

Xperia 1 VI には空間オーディオの設定はない。DP Alt 等、一部の出力先を除いて、内部的には常にオンになっている。

Xperia 1 V では、内蔵スピーカーと有線ヘッドホン向けの設定は、「設定」 → 「音設定」 → 「空間オーディオ」に存在する。

「スマートフォンのスピーカー」という設定があることからも、トランスオーラルモードに対応していることが分かる。

また、Bluetooth ヘッドホンについては、「設定」 → 「機器接続」の、各ヘッドホンの個別ページ内に存在する。なお、Xperia 1 VI はここにも空間オーディオの設定はなく、内部的には常にオンになっている。

360 Reality Audio も Android の空間オーディオも、どちらもヘッドホンはステレオでさえあれば何でも良いため、他社製の Galaxy Buds2 や、なんなら AirPods Pro でも、空間オーディオを使用することができる。

Pixel Buds Pro を接続すると、ヘッドトラッキングの設定も出現する。このことからも、空間オーディオ対応の Xperia は「ヘッド トラッカー HID プロトコル」を使用したヘッドトラッキングが実装されていることが分かる。

ヘッドトラッキングの設定については、Xperia 1 VI にも存在する。

なお、Galaxy Buds2 もヘッドトラッキング対応だが、ヘッドトラッキングの設定が出ていなかったのは、Galaxy のヘッドトラッキング (360 Audio) は独自実装であるため。

Xperia 1 V では、Dolby Audio X3 や 360 Reality Audio などの設定は「設定」 → 「音設定」 → 「オーディオ設定」にまとめられている。空間オーディオの設定はここにはないが、空間オーディオの実装を知る上でのヒントがここにある。

画面の下部には以下のような記載がある。

空間オーディオについて
360 Reality Audioの機能を有効にする場合は、空間オーディオの設定をONにしてください。
Dolby Soundは空間オーディオに対応していません。

Xperia 1 V の「オーディオ設定」画面より

先ほど audio_effects.xml で確認したように、やはり Xperia の空間オーディオは 360 Reality Audio 側で実装されており、Dolby Audio X3 側は無関係のようだ。

なお、上記のような記載があるにも関わらず、空間オーディオの設定は「オーディオ設定」の中には無く、ショートカットも用意されていないのは、個人的に微妙だと感じられた。

しかも、「音設定」 の中で「オーディオ設定」と「空間オーディオ」はかなり離れた位置にある。

ちなみに、「オーディオ設定」と同様の設定は、Xperia 1 VI では「再生音質」になっているが、Xperia 1 VI には空間オーディオの設定がないため、「空間オーディオの設定をONにしてください」の注釈もない。

「空間オーディオの設定」とは何なのか

Android の空間オーディオの設定は、説明文だけでは正直何をしているのかが分かりづらい。

Android 標準の説明文:

対応するメディアを臨場感あふれる音声でお楽しみいただけます

Xperia 1 V の「空間オーディオ」画面より

Sony による説明文:

360 Reality Audioの機能を有効にする場合は、空間オーディオの設定をONにしてください。

Xperia 1 V の「オーディオ設定」画面より

基本的に、Android の空間オーディオの設定は、ユーザー視点では以下の2つの意味を持つ。

  • バーチャライザーの有効化 / 無効化
  • 再生する音声 (ステレオ / 空間オーディオ) の切り替え (対応アプリのみ)

端末メーカーによってはこれらに加え、別の意味 (ステレオ音声のアップミックス等) も持たせている場合もあるが、Xperia ではこの辺りは特にカスタマイズはなく、上記2つの動きとなる。

「オーディオ設定」画面の「360 Reality Audioの機能を有効にする」とは、具体的には1つ目の「バーチャライザーの有効化」のことを指していると思われる。なお、空間オーディオを無効にした状態でも、360 Reality Audio Upmix (360 Upmix) は使用することができた。

また、「オーディオ設定」画面に「Dolby Soundは空間オーディオに対応していません」とある通り、空間オーディオの設定を変更しても Dolby Audio X3 のバーチャライザーには影響しない。

2つ目の「対応アプリ」とは、Android の空間オーディオの API を利用し、それによって音声の切り替え処理を行っているアプリ (YouTube や Netflix など) を指している。

空間オーディオの 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 チャンネル

優れたユーザー エクスペリエンスを実現するために、次の形式 / チャンネル構成をサポートすることを強くおすすめします。

  • ドルビー デジタル プラス
  • 5.1.2、7.1、7.1.2、7.1.4 チャンネル
高品質の空間オーディオとヘッド トラッキングの実装  |  Android オープンソース プロジェクト  |  Android Open Source Project

上記の他にも、デコーダーがマルチチャンネル再生に対応しているコーデックがあれば、同様にバーチャライズすることが可能。

空間オーディオ対応の Xperia では、以下の音声について、360 Reality Audio のバーチャライザーで処理できることを確認できた。

  • 360 Reality Audio Music Format (MPEG-H 3D Audio)
  • AAC 5.1ch
  • FLAC 5.1ch
  • Opus 5.1ch
  • WAV 5.1ch

※ 空間オーディオ対応の Xperia は Bluetooth のコーデックとしては Opus に対応していないだけで、Opus の再生自体は可能。そもそも Android 5.0 以降の機種は Opus の再生は対応必須

なお、空間オーディオとして再生できているかどうかは、Xperia 1 VI ではサイドセンスから呼び出せる「ダッシュボード」の「音質のステータスと設定」にて、Xperia 1 V や Xperia 5 V ではクイック設定の下部にある「音質と画質のステータス」にて確認可能。

空間オーディオが有効の状態で、360 Reality Audio の音声を再生すると、「360 Reality Audio」と表示される。

Xperia 1 VI
Xperia 1 V

空間オーディオが有効の状態で、AAC 5.1ch 音声などを再生すると、「空間オーディオ」と表示される。

Xperia 1 VI
Xperia 1 V

「音質と画質のステータス」機能や「360 Reality Audio」表示自体は Xperia 1 IV の頃から存在していたが、「空間オーディオ」表示は Xperia 1 V で追加されたステータスである。

Dolby のコーデック (Dolby Digital、Dolby Digital Plus、Dolby AC-4) であれば、フォーマットによらず (例え 2.0ch であっても) 常に「Dolby Atmos」と表示される。

Xperia 1 VI
Xperia 1 V

Xperia 1 IV では Dolby Audio X3 (設定画面上では Dolby Sound) をオンにしているときのみ Dolby Atmos 表記だったが、Xperia 1 V 以降は Dolby Audio X3 の設定によらず Dolby Atmos 表記となる。

最近の Dolby Audio X3 では、Dolby Audio X3 がオフの状態で Dolby Atmos や Dolby Audio を再生しても、自動的にバーチャライザーが有効になる。そのため、Xperia 1 V 以降の表記のほうがより適切と言える。

「オーディオ設定」に以下のような記載があるように、Dolby Atmos や Dolby Audio の音声が 360 Reality Audio のバーチャライザーで処理されてしまうようなことはなかった。

Dolby Atmosコンテンツと360 Reality Audioコンテンツは、設定によらずコンテンツ独自の音質で楽しめます。

Xperia 1 VI の「オーディオ設定」画面より

Dolby Atmosコンテンツや360 Reality Audioコンテンツの再生中は、本画面の設定よりもコンテンツ情報を優先します。

Xperia 1 V の「オーディオ設定」画面より

なお、「アース: リバイバル」「Epic Cricket」「Cricket Guru」など、Dolby Atmos を採用しているゲームでは「空間オーディオ」表示となるが、ログを見ると内部的には Dolby Audio X3 のバーチャライザーが動いているようだった。(具体的に言うと DlbGameDap2Process の動作ログが出ている)

ちなみに、最近の Xperia には Sony Pictures の映画のトレーラーがプリセットされている。どの映画のトレーラーかは機種により異なり、Xperia 1 V では「シング・フォー・ミー、ライル」となっている。

Xperia 1 IV まではトレーラーの音声は Dolby Atmos (Dolby Digital Plus JOC) だったのだが、Xperia 1 V では AAC LC の 5.1ch となっていた。恐らく 360 Reality Audio のバーチャライザーで処理させたかったのだと思われる。

MediaInfo で取得した音声情報の抜粋:

Audio
ID : 1
Format : AAC LC
Format/Info : Advanced Audio Codec Low Complexity
Format profile : AAC@L4
Codec ID : mp4a-40-2
Duration : 1 min 53 s
Bit rate mode : Variable
Bit rate : 253 kb/s
Maximum bit rate : 270 kb/s
Channel(s) : 6 channels
Channel layout : C L R Ls Rs LFE
Sampling rate : 48.0 kHz
Frame rate : 46.875 FPS (1024 SPF)
Stream size : 3.43 MiB (4%)

なお、Xperia 1 VI では「グランツーリスモ」のトレーラーが入っていたが、音声は再び Dolby Atmos (Dolby Digital Plus JOC) に戻っていた。

MediaInfo で取得した音声情報の抜粋:

Audio
ID : 1
Format : E-AC-3 JOC
Format/Info : Enhanced AC-3 with Joint Object Coding
Commercial name : Dolby Digital Plus with Dolby Atmos
Format settings : Dolby Surround EX
Codec ID : ec-3
Duration : 2 min 33 s
Bit rate mode : Constant
Bit rate : 448 kb/s
Channel(s) : 6 channels
Channel layout : L R C LFE Ls Rs
Sampling rate : 48.0 kHz
Service kind : Complete Main
Complexity index : 16
Number of dynamic objects : 15
Bed channel count : 1 channel
Bed channel configuration : LFE

もし 5.1ch などの音声を再生していても「エフェクトなし」「ノーマル」「ハイレゾ」「Dolby Sound (プロファイル名)」「360 Upmix」「DSEE Ultimate」などと表示される場合は、2.0ch 音声として扱われてしまっている可能性が高い。

なお、Amazon Music の空間オーディオでは「360 Reality Audio」の表示にはならないが、これはアプリ側の仕様であるため問題ない。(Dolby Atmos は 2024/05 末あたりから、端末側で処理させるように変更)

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] をタップすると、統計情報が閉じる。

また、Xperia では「音質のステータスと設定」「音質と画質のステータス」でもコーデックをある程度は確認可能。「Dolby Atmos」表示であれば DD/DD+ の 5.1ch、「空間オーディオ」表示であれば AAC の 5.1ch、「ノーマル」「Dolby Sound (プロファイル名)」「360 Upmix」「DSEE Ultimate」の場合は Opus か AAC の 2.0ch。

検証結果

ここでは、Xperia 1 V での検証結果を掲載している。Xperia 1 VI については、一部 Xperia 1 V と異なる挙動を確認しているため、現在検証中。

検証に使用した動画のリンクを貼っているが、音声のエンコード状況は検証時点の情報であり、今後変更になる可能性がある。また、YouTube の空間オーディオは不安定であるため、音声の切り替えが上手くいかない場合もある。

5.1ch 音声が AAC のみの場合

梅田ブルク7「Dolby Cinema™(ドルビーシネマ)」2019.6.28 fri 関西初上陸!

  • 統計情報: 258 mp4a (AAC LC 5.1ch)
  • 音質と画質のステータス: 空間オーディオ
  • バーチャライザー: 360 Reality Audio

この場合は想定通り。

5.1ch 音声が DD/DD+ のみの場合

THX Cavalcade Trailer (2001) [5.1] [4K] [FTD-1394]

  • 統計情報: 328 ec-3 (DD+ 5.1ch)
  • 音質と画質のステータス: Dolby Atmos
  • バーチャライザー: Dolby Audio X3

Android の空間オーディオは Dolby Audio X3 側では実装されていないにも関わらず、このような動きができることには驚いた。

YouTube に限らず空間オーディオの再生には Android の空間オーディオを必須とし、音声は DD/DD+/AC-4 でしか提供しないサービスでは、空間オーディオ対応の Xperia ではてっきりステレオ音声しか聴けないのではないかと心配していたが、杞憂に終わった。

5.1ch 音声が AAC も DD/DD+ もある場合

ドルビーシネマのご紹介映像1

この場合、ヘッドトラッキングの有無によって挙動が異なる。

ヘッドトラッキングが有効の場合

  • 統計情報: 258 mp4a (AAC LC 5.1ch)
  • 音質と画質のステータス: 空間オーディオ
  • バーチャライザー: 360 Reality Audio

この場合は想定通り。Xperia だと DD/DD+ ではヘッドトラッキングできないため、必然的に AAC となる。

ヘッドトラッキングが無効、もしくは非対応の場合 (内蔵スピーカー含む)

  • 統計情報: 328 ec-3 (DD+ 5.1ch)
  • 音質と画質のステータス: Dolby Atmos
  • バーチャライザー: Dolby Audio X3

ヘッドトラッキングを利用しないのであれば、確かにコーデックは何でも良い。が、Sony が 360 Reality Audio よりも Dolby Audio X3 を優先したと言う点には驚いた。わざわざプリセットのトレーラーを DD+ JOC でなく AAC にしていたにも関わらず…。

Netflix における空間オーディオの挙動

Netflix も Android の空間オーディオに対応している。が、結論から言うと、空間オーディオ対応の Xperia では利用できなかった。

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 なのかまではログでは判別できない。

検証結果

選択される音声

実際に試したところ、空間オーディオ対応の Xperia では空間オーディオやヘッドトラッキングの設定によらず、下記のいずれの出力先においても AAC 2.0ch だった。

  • Bluetooth
    • Pixel Buds Pro
    • Galaxy Buds2
    • AirPods Pro
    • Walkman NW-ZX300 の Bluetooth レシーバー
  • USB DAC
    • Walkman NW-ZX300 の USB DAC
    • Sound BlasterX G6
    • Galaxy USB-C Headset Jack Adapter
  • イヤホンジャック
  • 内蔵スピーカー

考察

空間オーディオ対応の Xperia の他にも、Android の空間オーディオに対応している Galaxy S24 Ultra、AQUOS R8 pro、Xiaomi 13T でも Netflix の DD+ 音声を聴くことはできなかった。

一方、Netflix のサイトで Pixel が名指しされているように、Pixel 8 Pro では DD+ を聴くことができた。詳細は以下の記事にて。

なお、上記記事にあるように、Pixel 8 Pro では Bluetooth のコーデックが SBC/AAC/Opus だと DD+ 5.1ch、LDAC だと AAC 2.0ch になるという、よく分からない挙動をしていたが、空間オーディオ対応の Xperia では常に AAC 2.0ch だった。

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

ヘッドトラッキングをオンにするには:

  1. お使いのスマートフォンにイヤホンを接続します。
  2. [Galaxy Wearable]アプリを開きます。
  3. イヤホン設定 (Earbud Settings) > 詳細設定 (Advanced) をタップします。Buds2 Proの場合は、[360オーディオ (360 audio)]をタップします。
  4. スイッチをタップして[360オーディオ (360 audio)]をオンにします。
  5. スイッチをタップして[ヘッドトラッキング (Head tracking)]をオンにします。
Netflixの空間オーディオ | Netflixヘルプセンター

対応スマホとしては Galaxy S23 しか掲載されていないが、こちらの挙動は Galaxy S24 Ultra でも確認できた。今後、Galaxy の空間オーディオ解説記事を書く際には、このあたりの挙動についても解説する。

わざわざ Galaxy 向けを別の実装とするあたり、Netflix は Android の空間オーディオの API を使いたくて空間オーディオに対応したと言うよりも、単にヘッドトラッキングのために、各社の仕様に対応した実装をしているだけのように見受けられる。

まとめ

Android の空間オーディオまとめ:

  • Android の空間オーディオとは「Android 端末における Dolby Atmos や 360 Reality Audio などを、従来よりももっと高度に活用するための、システム面の整備」
  • 空間オーディオの実装に左右されずにシステムとアプリ間の連携が可能
  • コーデックを問わないバーチャライズが可能
  • メーカーしばりのないヘッドトラッキングが可能
  • ヘッドトラッキングが OS レベルで低遅延化

Xperia の空間オーディオまとめ:

  • 360 Reality Audio を使用して空間オーディオが実装されている
  • Dolby 側では空間オーディオは実装されていないが、YouTube 等で恩恵を受けることはできる
  • AAC、FLAC、Opus、WAV の 5.1ch 音声のバーチャライズに対応
  • トランスオーラルモード (内蔵スピーカーでの空間オーディオ) 対応
  • ヘッドトラッキングには対応するが、Opus による低遅延なヘッドトラッキングは不可
  • Android の空間オーディオを利用しているサービスでも、DD/DD+ 音声の再生が可能

井戸水

ガジェットやオーディオビジュアルが好きな人。モバイル機器における空間オーディオなどを調査しています。

コメントを残す…