Pixel Tablet、Android 14 QPR1 で空間オーディオに対応か

最終更新日

はじめに

Android 14 の正式リリースより一足先に Android 14 QPR1 Beta 1 がリリースされた。

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 14 QPR1 Beta 1 対象端末の Factory Image (ファームウェア) を確認していると、今まで Android の空間オーディオ (Spatial Audio) に対応していなかった Pixel Tablet が追加対応していることが判明した。

この記事では、ファームウェアから得られた情報について、上記のポストよりももう少し詳しく解説する。また、そもそも Android の空間オーディオについてよく知られていない中で、淡々とファームウェアの情報を述べても不親切だと思われるので、Android の空間オーディオとは一体何なのか、それに対応することで何が嬉しいのか、などについても解説する。

その結果、脱線が多く長くなってしまったので、Pixel Tablet の空間オーディオの仕様のみを知りたい方は、最後の「Pixel Tablet の空間オーディオまとめ」のところまで飛ばしていただきたい。

なお、Pixel Tablet は Android 14 (QPR0) の最新ベータ版 Beta 5.3 でも空間オーディオ非対応だったため、正式実装は2023年12月リリース予定の Android 14 QPR1 Stable 以降になると思われる。

→ 2023/12/07 追記: 予想通り Android 14 QPR1 Stable で正式対応。後述の解析通り、ヘッドトラッキングや内蔵スピーカーでの空間オーディオにも対応。

Surround yourself with sound

Put yourself in the center of the action when you watch your favorite movies and shows on Pixel Tablet, which now supports spatial audio. Try it through your speakers first, then pair your Pixel Buds Pro to experience spatial audio with head tracking for truly immersive sound.

Google Pixel December feature drop: New Gemini AI-powered updates

また、Pixel 5a (5G)、6a、7a は、Android 14 QPR1 Beta 1 でも空間オーディオは非対応のままだった。

最後に、解説に入る前に理解しておいていただきたいこととして、Pixel は Google が開発している Android 端末とはいえ、Android のリファレンス端末だった Nexus とは違い、いわゆる素の Android が搭載されているわけではない。Pixel には Pixel 独自のカスタマイズが入っている。

また、そもそも Android の空間オーディオは、OS 側がバーチャライザーやヘッドトラッカーのようなオーディオエフェクトを提供するわけではない。こうした部分に関しては引き続き Android 向け Dolby Atmos や 360 Reality Audio などに委ねられており、何を実装するかは端末メーカー次第となっている。

では Android 側は一体何をやっているのかというと、Dolby Atmos や 360 Reality Audio などを従来よりももっと高度に活用するための環境整備や、各メーカーが何をどのように実装したとしても同じ動きができるようにするための標準規格の策定などである。(このあたりは後ほど詳しく解説する)

Pixel の空間オーディオは、Android の空間オーディオの仕様に沿うよう実装された、Pixel 独自のシステムである。Google による実装ではあるものの、あくまで実装例の一つでしかなく、リファレンスというわけではない。

build.prop

build.prop とは、ファームウェアに絡む様々な情報が記載されたファイルである。OS バージョン、ビルド番号、機種名、型番といった基本的な情報から、空間オーディオ含め個別の機能に関する情報まで、ありとあらゆる情報が記載されている。

build.prop は同名のファイルが複数の場所に分散しており、どのファイルに空間オーディオ絡みの情報が載っているかは、端末メーカーにより異なる。

  • Pixel、Xperia、Xiaomi 端末: /vendor/build.prop
  • Galaxy: /system/build.prop
  • OPPO / OnePlus 端末: /my_product/build.prop

Android 14 QPR1 Beta 1 の Pixel Tablet では /vendor/build.prop に空間オーディオ関連の定義がいくつか追記されていた。以下、それぞれ紹介する。

ro.audio.spatializer_enabled

これは、端末が空間オーディオに対応しているかどうかを示すものである。対応している場合は、ここの値が true になっている。

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

PRODUCT_PROPERTY_OVERRIDES += \
     ro.audio.spatializer_enabled=true

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

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

Android 14 QPR1 Beta 1 の Pixel Tablet では、以下の定義が追加されていた。

ro.audio.spatializer_enabled=true

これにより、空間オーディオに対応したことがわかる。

ちなみに、検証した限りではここの値が false になっている端末はなく、空間オーディオに非対応の場合、そもそもこの定義自体が存在していない。


(しばし余談)

ファームウェアが入手できないなどの理由により、実機で空間オーディオに対応しているかどうかを確認する場合、設定画面に空間オーディオの項目が存在していれば一目瞭然だが、そうでないものも存在する。

例えば Galaxy では、空間オーディオ個別の設定はなく、Dolby Atmos の設定と連動している。また、Xiaomi 端末では「イマーシブサウンド」という、一見何の設定なのか分かりづらい名称になっている。

これでは、空間オーディオに対応していないのか、対応しているが設定が分かりにくいだけなのかの判断がつきにくい。

かと言って、実機では build.prop は基本的に root 権限がないと開けないし、getprop コマンドでは ro.audio.spatializer_enabled の値を取得できないことが多い。そこで、以下のコマンドで確認することを推奨する。

adb shell "dumpsys audio | grep mHasSpatializerEffect"

対応の場合:

mHasSpatializerEffect:true (effect present)

非対応の場合:

mHasSpatializerEffect:false (effect present)

Android 12 以下の端末では何も返らない。

この mHasSpatializerEffect は内部的に ro.audio.spatializer_enabled の値を参照している。

AudioService.java – Android Code Search より:

mHasSpatializerEffect = SystemProperties.getBoolean("ro.audio.spatializer_enabled", false);

ちなみに、先程使用した dumpsys コマンドでは、空間オーディオの設定が有効かどうかも確認できる。これを使用することで、設定が分かりづらい端末でも、どれが空間オーディオの設定なのかを探ることもできる。

adb shell "dumpsys audio | grep isSpatializerEnabled"

有効の場合:

isSpatializerEnabled:true (routing dependent)

無効 or 非対応の場合:

isSpatializerEnabled:false (routing dependent)

こちらも、 Android 12 以下の端末では何も返らない。


(主に開発者向け、API の詳細は Android Developers 参照)

先程の isSpatializerEnabled はおそらく Spatializer クラスの isEnabled メソッドで取得した情報を出力しており、空間オーディオを提供するアプリでは、これによって同様の情報を取得することができる。また、isAvailable メソッドを使用すれば、現在の出力先に対し空間オーディオが利用可能かどうか (例えばモノラルスピーカーでは利用不可) も取得可能。

そして、これらの状態の変化は、OnSpatializerStateChangedListener で監視することも可能。これにより、「空間オーディオが利用可能な場合には空間オーディオ用の音声を取得し、そうでない場合はステレオ音声を取得する」といった切り替えを、リアルタイムで行うことが可能。空間オーディオのダウンミックスは通信容量がもったいないし、単純なダウンミックスは制作者の意図と乖離している場合もある。この制御は実際に YouTube で利用されている。

更に、Android の空間オーディオでは、アプリ側が空間オーディオの情報を取得するだけでなく、逆にアプリ側が空間オーディオに絡む情報を端末側に伝えたり、アプリ側で空間オーディオの動作を制御したり、といったこともできる。

例えば、音源が既にバーチャライズされているかどうかを指定する setIsContentSpatialized メソッドを使用すれば、以下のような問題を解決できる。


話がかなり脱線してしまったが、空間オーディオの実装がどのようなものであっても、実装ごとに独自の API を使い分ける必要はなく、Android 共通の API でアプリとシステムが連携できるのは、Android の空間オーディオの特徴の一つである。

persist.bluetooth.a2dp_offload.cap

この値は、Bluetooth の A2DP プロファイル (音声伝送方式の一種) で利用可能なコーデックを示すものである。

空間オーディオとは直接的な関係はないため、この定義自体は Android 14 Beta 5.3 でも存在している。

persist.bluetooth.a2dp_offload.cap=sbc-aac-aptx-aptxhd-ldac

Android 14 QPR1 Beta 1 の Pixel Tablet では、末尾に Opus が追加されている。

persist.bluetooth.a2dp_offload.cap=sbc-aac-aptx-aptxhd-ldac-opus

Opus は YouTube 等で使用されている音声コーデックだが、遅延が少ないようで (エンコード? 伝送? 両方?)、Pixel Buds Pro 等でヘッドトラッキングを行う際のコーデックとしても使用されている。

通常、Bluetooth で Opus が使用されるのはヘッドトラッキング有効時のみである。

コーデックの切り替え

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

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

コーデック自動切り替えなどを含め、システムレベルでヘッドトラッキングの低遅延化が図られている点も、Android の空間オーディオの特徴の一つである。

Android 13 は、オーディオ パイプラインで可能な限り低いレベルで空間オーディオ処理を提供することで、空間オーディオとヘッド トラッキングを最適化し、可能な限り低いレイテンシを実現します。

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

Android の空間オーディオにおいて、実はヘッドトラッキングへの対応は必須ではない。しかし、Pixel Tablet は Bluetooth で Opus に対応したことから、ヘッドトラッキングにも対応しようとしていることが伺える。

なお、ヘッドトラッキングで Opus を使用することは、推奨はされているが必須というわけではない。

推奨事項

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

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

そのため、Bluetooth で Opus に対応していない機種でも、ヘッドトラッキングに対応していないとは言い切れない。


(また余談)

ヘッドトラッキングに対応しているかどうかを実機で確認する場合、設定画面で確認するには基本的にヘッドトラッキング対応のヘッドホンを用意する必要がある。しかし、先程の dumpsys コマンドを使用すれば、対応ヘッドホンを用意せずとも確認することができる。

adb shell "dumpsys audio | grep mIsHeadTrackingSupported | sed 's/^\t//'"

対応の場合:

mIsHeadTrackingSupported:true

非対応の場合:

mIsHeadTrackingSupported:false

Android 12 以下の端末では何も返らない。

なお、Android 13 / One UI 5 の Dolby Atmos 対応 Galaxy は、Android の空間オーディオに対応し、ヘッドトラッキングにも対応しているが、上記の値は false になってしまう。

Galaxy は Android 11 / One UI 3.1 の頃から 360 Audio (360 Reality Audio ではない) と称して Dolby Head Tracking に対応してきたが、これがどうも Android の空間オーディオに対応しきれていないようだ (おそらく Dolby ではなく Samsung の実装の問題)。

これがどういう影響をもたらすかと言うと、OS 側のヘッドトラッキングの低遅延化の恩恵は恐らく受けられない上、Galaxy でヘッドトラッキングを利用するには、対応の Galaxy Buds シリーズが必須となる。

従来のヘッドトラッキングは同一メーカー / ブランド縛りは当たり前だったが、Android の空間オーディオではヘッドトラッキングのセンサー用プロトコル (通信の仕様) が定められており、これに対応することで異なるメーカー / ブランドの組み合わせであってもヘッドトラッキングが利用可能となっている。

ヘッド トラッカー ヒューマン インターフェース デバイス(HID)プロトコルは、Android 13 以降を搭載しているデバイスで利用でき、ヘッド トラッキング デバイスを USB または Bluetooth 経由で Android デバイスに接続することを可能にします。また、センサー フレームワークを通じて Android フレームワークとアプリに公開されます。このプロトコルは、オーディオ バーチャライザー効果(3D オーディオ)の制御に使用されます。

ヘッド トラッカー HID プロトコル  |  Android オープンソース プロジェクト  |  Android Open Source Project

実際に Pixel 6 と WF-1000XM5 の組み合わせで、ヘッドトラッキングが利用できることを確認している。

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

こういったところも、Android が空間オーディオの標準仕様を策定することのメリットである。

しかし、Galaxy の 360 Audio は独自実装であるため、Galaxy と他社製ヘッドホンではヘッドトラッキングが利用できないし、Galaxy 以外の Android 端末と Galaxy Buds シリーズの組み合わせでもヘッドトラッキングは利用できない。今後改善されることを願うばかりだ。


persist.vendor.audio.spatializer.speaker_enabled

Android の空間オーディオにおいて、ヘッドホンでの再生は「バイノーラルモード (binaural mode)」と呼び、内蔵スピーカーでの再生は「トランスオーラルモード (transaural mode)」と呼ぶ。

SpatializationMode.aidl – Android Code Search より

/** The spatializer supports binaural mode (over headphones type devices). */
SPATIALIZER_BINAURAL = 0,
/** The spatializer supports transaural mode (over speaker type devices). */
SPATIALIZER_TRANSAURAL = 1,

このうち、トランスオーラルモードへの対応は必須ではない。

スピーカーでのレンダリング

スピーカーでのオーディオの空間化(トランスオーラル モード)のサポートは必須ではありません。

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

トランスオーラルモードはそもそもモノラルスピーカーでは実現できないが、ステレオスピーカーであっても対応する必要はないようだ。現に、Pixel 6、6 Pro、7、7 Pro はステレオスピーカー搭載だが、トランスオーラルモードには対応していない。

persist.vendor.audio.spatializer.speaker_enabled は、トランスオーラルモードに対応しているかどうかを示す、恐らく Pixel 独自の項目。

トランスオーラルモードに対応している Pixel Fold ではこの値が true になっており、非対応の Pixel ではこの定義は存在しない。

Android 14 QPR1 Beta 1 の Pixel Tablet では、以下の定義が追加されていた。

persist.vendor.audio.spatializer.speaker_enabled=true

このことから、Pixel Tablet はトランスオーラルモードに対応しているということがわかる。

なお、Pixel Fold には以下の定義が存在しているが、Pixel Tablet では見当たらなかった。

ro.audio.spatializer_transaural_enabled_default=false

おそらくトランスオーラルモードのオン / オフ設定のデフォルト値だと思われるが、なぜこれが Pixel Fold にはあって Pixel Tablet にないのかは不明。

関連するソースコード (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.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 は現状 Dolby Surround (DS1)、Dolby Audio X2 (DAX2)、Dolby Audio X3 (DAX3) の3世代が存在し、内包されている機能別に Dolby Atmos や Dolby Audio などのエディションが存在する。

ここで言う Dolby Surround (DS1) は、VHS や LaserDisc 等で使用されていたマトリックスエンコード / デコードの方式 (民生用 Dolby Stereo) のことではないし、Dolby Atmos 対応の AV アンプやサウンドバーに搭載されているアップミキサー (Dolby Surround Upmixer とも) のことでもない。

それぞれの違い (Android 版のみ) の詳細は下記の表を参照。なお、この表は公式なものではなく、個人的に調査・検証した結果であり、不正確な情報が含まれている可能性がある。後日、もう少し詳しい記事を執筆予定。

技術名称・略称 ブランド 登場時期
(把握分のみ)
デコーダー ポストプロセッシング Android 13〜の
空間オーディオ
Unified Decoder Converter (UDC)
(DDPlus Unified Decoder Simulation)
Dolby AC-4
decoder
Dolby
TrueHD
(MLP FBA)
Dolby Audio Processing (DAP)
Dolby
Digital
(AC-3)

~5.1ch
Dolby
Digital
Plus
(E-AC-3)

~7.1ch
Dolby Digital
Plus JOC
(E-AC-3 JOC)

Dolby Atmos
Dolby AC-4
Immersive
Stereo
(AC-4 IMS)

Dolby Atmos
基本機能 追加機能 新機能 (Android 11〜)
ステレオ
ワイドニング
&
リバーブを
除去
Dolby
Head
Tracking
Dolby Audio X3 (DAX3) Dolby Atmos 2018/03~現在 任意 任意
Dolby Audio 2022/09~現在 5.1ch ~ 7.1ch
ダウンミックス
任意 任意
Dolby Audio X2 (DAX2) Dolby Atmos 2014/09~2018/09
Dolby Surround (DS1) Dolby Audio 2014/02~2021/10 5.1ch ~ 7.1ch
ダウンミックス
Dolby Digital Plus 2012/09~2014/11 5.1ch ~ 7.1ch
ダウンミックス
Dolby Processing 2015/05~2015/12
Dolby Audio
(UDC 非搭載版)
2014/05~2014/11

Android 向け Dolby Surround のバージョンは DS1 (Android 8.x 以降) あるいは DAX1 (Android 7.x 以前) から始まり、Dolby Audio X2 のバージョンは DAX2 から始まり、Dolby Audio X3 のバージョンは DAX3 から始まる。

詳細:

Android 14 QPR1 Beta 1 の Pixel Tablet では、以下の定義が追加されている。

ro.vendor.dolby.dax.version=DAX3_G_3.7.3.0_r1

このことから、Dolby Audio X3 を搭載していることがわかる。Pixel Tablet に限らず、Pixel シリーズでは空間オーディオの音声の処理には Dolby Audio X3 を使用している。

Pixel が Dolby Audio X3 を搭載しだしたのは、Pixel シリーズ (当時は Pixel 6 / 6 Pro) に初めて空間オーディオが実装された Android 13 QPR1 Beta 1 のタイミングである。また、Dolby Audio X3 を搭載している Pixel は、空間オーディオ対応機種のみとなっている。

そして、Pixel において Dolby Audio X3 は空間オーディオの再生にのみ使用されており、先程述べたようなオーディオエフェクト (上記の表の Dolby Audio Processing の大半の機能) をステレオ音声に適用したりといったことはできない。

これらの理由から、Pixel Tablet が Dolby Audio X3 を搭載したのは、空間オーディオに対応するためであるということが分かる。

Pixel 5a (5G)、6a、7a が空間オーディオに対応していないのは、Dolby Audio X3 のライセンス費用的な理由だと思われる。なぜ Pixel Tablet が後から対応するようになったのかは不明。


通常、Dolby Audio X3 のバージョン表記は DAX3_1.0.0.0_r1 のような形式だが、Pixel シリーズでは DAX3_G_3.7.3.0_r1 のように、DAX3 とバージョンの間に “G” が挿入されている。似たような例で、Galaxy 向けでは DAX3_S_1.5.0.0_r1 のように、間に “S” が挿入されている (詳細は先程のバージョン一覧の記事を参照)。このことから、これらはメーカー名 (Google、Samsung) の頭文字なのではないかと思われる。

Pixel や Galaxy の Dolby Audio X3 は、それぞれ他メーカーでは見られない特徴を持っている。Pixel はデコーダー周りが特殊 (後述) だし、Galaxy は内部のコンポーネントが少しだけ新しかったりする。バージョン表記が通常とは異なっているあたり、これらは特別なカスタマイズ版なのではないかと思われる。


「はじめに」でも書いたように、Android の空間オーディオには Dolby Audio X3 が付属しているわけではないし、かと言って空間オーディオに対応するには必ずしも Dolby Audio X3 を搭載しないといけないわけでもない。

例えば Xperia 1 V や Xperia 5 V は Dolby Audio X3 を搭載してはいるが、空間オーディオの処理には 360 Reality Audio 側のオーディオエフェクトを使用している。(ただし、Dolby Atmos や Dolby Audio 音声に対しては、Dolby Audio X3 側が使用される)

また、Xiaomi 13 シリーズや Xiaomi MIX Fold 3 等では、設定の「サウンド効果」にて、Dolby Audio X3 による空間オーディオと Xiaomi 独自の空間オーディオ (オーディオ品質を最適化) を切り替えて使用することができる。このことから、Android の空間オーディオは、複数の方式を共存させることも可能であることが分かる。

詳細:

繰り返しになるが、音声の処理を行うのはどのベンダーの何のシステムなのかを気にすることなく、Android の標準 API で様々な連携が行えるというところが、Android の空間オーディオの特徴である。

audio.spatializer.effect.util_clamp_min

Android 14 QPR1 Beta 1 の Pixel Tablet では、以下の定義が追加されている。

audio.spatializer.effect.util_clamp_min=300

Pixel Tablet に限らず、空間オーディオ対応の Pixel にはこの定義があるが、正直何のパラメーターなのかは不明。(時間の設定であることは分かるが…)

この定義のコメントには optimize spatializer effect としか書かれていない。

device-felix.mk – Android Code Search より (felix は Pixel Fold のコードネームだが、他機種でも同様の記述あり)

# optimize spatializer effect
PRODUCT_PROPERTY_OVERRIDES += \
       audio.spatializer.effect.util_clamp_min=300

audio_policy_configuration.xml

これは、おそらく音声入出力関連のファイルだと思われる。Android の空間オーディオに対応している場合、このファイルに空間オーディオ用の出力が記載されている。

2. 次のように、 audio_policy_configuration.xmlで空間オーディオ ミックス専用の出力を宣言します。

<audioPolicyConfiguration>
  <modules>
   <module>
     <mixPorts>
     <mixPort name="spatializer" role="source"   flags="AUDIO_OUTPUT_FLAG_SPATIALIZER">
       <profile name="sa" format="AUDIO_FORMAT_PCM_FLOAT"
         samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
空間オーディオとヘッド トラッキング  |  Android オープンソース プロジェクト  |  Android Open Source Project

Android 14 QPR1 Beta 1 の Pixel Tablet では /vendor/etc/audio_policy_configuration.xml に以下の記述が追加されている。

<mixPort name="immersive_out" role="source" flags="AUDIO_OUTPUT_FLAG_SPATIALIZER">
    <profile name="" format="AUDIO_FORMAT_PCM_32_BIT"
                             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>

例とは表記が異なるものの、audio_policy_configuration.xml からも空間オーディオに対応しているということが分かる。


上記の他にも、何箇所か変更されている。

Bluetooth の A2DP プロファイルのコーデックは、従来は AAC (AUDIO_FORMAT_AAC) と SBC (AUDIO_FORMAT_SBC) だけだったが、新たにヘッドトラッキング用の Opus (AUDIO_FORMAT_OPUS) が追加されている。

<devicePort tagName="BT A2DP Out" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP" role="sink"
            encodedFormats="AUDIO_FORMAT_OPUS AUDIO_FORMAT_AAC AUDIO_FORMAT_SBC">
    <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
            samplingRates="44100 48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</devicePort>

/vendor/build.prop の persist.bluetooth.a2dp_offload.cap にあった aptX、aptX HD、LDAC はここでは確認できない。

上記では tagName="BT A2DP Out" のみ抜粋したが、tagName="BT A2DP Headphones"tagName="BT A2DP Speaker" にも同様の定義が存在している。


以下の出力先に、immersive_out が追加されている。

  • Speaker
  • BT A2DP Out
  • BT A2DP Headphones
  • BT A2DP Speaker
  • USB Device Out
  • USB Dock
  • USB Headset Out
<route type="mix" sink="Speaker"
       sources="primary output,deep buffer,raw,compressed_offload,mmap_no_irq_out,voip_rx,ultrasound output,immersive_out"/>
<route type="mix" sink="Speaker Safe"
       sources="primary output,deep buffer,raw,compressed_offload,mmap_no_irq_out,voip_rx,ultrasound output"/>
<route type="mix" sink="BT A2DP Out"
       sources="primary output,deep buffer,compressed_offload,voip_rx,raw,mmap_no_irq_out,immersive_out"/>
<route type="mix" sink="BT A2DP Headphones"
       sources="primary output,deep buffer,compressed_offload,voip_rx,raw,mmap_no_irq_out,immersive_out"/>
<route type="mix" sink="BT A2DP Speaker"
       sources="primary output,deep buffer,compressed_offload,voip_rx,raw,mmap_no_irq_out,immersive_out"/>
<route type="mix" sink="USB Device Out"
       sources="primary output,deep buffer,raw,compressed_offload,mmap_no_irq_out,voip_rx,hifi_playback,immersive_out"/>
<route type="mix" sink="USB Dock"
       sources="primary output,deep buffer,compressed_offload,mmap_no_irq_out,voip_rx"/>
<route type="mix" sink="USB Headset Out"
       sources="primary output,deep buffer,raw,compressed_offload,mmap_no_irq_out,voip_rx,hifi_playback,immersive_out"/>
<route type="mix" sink="BT SCO"
       sources="primary output,deep buffer,compressed_offload,voip_rx,raw,mmap_no_irq_out"/>
<route type="mix" sink="BT SCO Headset"
       sources="primary output,deep buffer,compressed_offload,voip_rx,raw,mmap_no_irq_out"/>
<route type="mix" sink="BT SCO Car Kit"
       sources="primary output,deep buffer,compressed_offload,voip_rx,raw,mmap_no_irq_out"/>

ここでもトランスオーラルモードに対応していることが分かる。

このうち、USB DockPixel Tablet にしか存在していない 出力先であるため、付属の充電スピーカー ホルダーのことを指している可能性がある (USB 接続ではなくポゴピンだが)。


/vendor/etc/audio_policy_configuration_a2dp_offload_disabled.xml にもこれらと同様の記述変更が見られた。

audio_platform_configuration.xml

先程のファイルと名前が似ているが、こちらは policy ではなく platform。こちらも音声入出力に関連するファイルのようだ。

Android 14 QPR1 Beta 1 の Pixel Tablet では /vendor/etc/audio_platform_configuration.xml にも空間オーディオ絡みでいくつか追記されている。

<usecase_attr>
    <!-- for output with flag AUDIO_OUTPUT_SPATIALIZER -->
    <usecase id="UC_IMMERSIVE_PLAYBACK" dev1="3" dyn_path="true" dsp_vol="false" mmap="false" period="10" period_num="3"/>
</usecase_attr>

<dsp_latency>
    <usecase id="UC_IMMERSIVE_PLAYBACK" type="playback">
        <be_cfg be_id="OUT_A2DP_BE_CFG" latency="100000"/>
    </usecase>
</dsp_latency>

<xlate_id>
    <item component="TUNING_COMPONENT_STEREO_SPATIALIZER" id="26"/>
</xlate_id>

<external_module>
    <module libname="audio_waves_aoc.so" argu="Sink=SPK:1,USB_DOCK:4,USB_HP:4 Extensions=StereoSpatializer"/>
</external_module>

正直空間オーディオに対応したということぐらいしかわからない。

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

Android 14 QPR1 Beta 1 の Pixel Tablet では /vendor/etc/audio_effects.xml に以下の記述が追加されている。

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

<effects>
    <effect name="spatializer" library="spatializer" uuid="cc4677de-ff72-11eb-9a03-0242ac130003"/>
</effects>

audio_effects.xml からも、空間オーディオに対応しているということが分かる。


なお、audio_effects.xml の記述は空間オーディオの実装により異なっている。

Dolby Audio X3 (Pixel 以外)

Pixel 以外 の Dolby Audio X3 の空間オーディオは、Pixel のものとはライブラリのファイル名やエフェクトの UUID が異なっている。

<libraries>
    <!--DOLBY START-->
    <!--DOLBY SPATIALIZER-->
    <library name="spatializer" path="libswspatializer.so"/>
    <!--DOLBY END-->
</libraries>

<effects>
    <!--DOLBY START-->
    <!--DOLBY SPATIALIZER-->
    <effect name="spatializer" library="spatializer" uuid="ccd4cf09-a79d-46c2-9aae-06a1698d6c8f"/>
    <!--DOLBY END-->
</effects>

メーカーによってはコメントの有無が異なるが、それ以外の部分に関しては UUID 含めメーカーによる差はない。

これが記述されているファイルの名前やディレクトリはメーカーにより異なる。

  • Galaxy: /vendor/etc/audio_effects_spatializer.xml
  • Xiaomi 端末 (kalama = Snapdragon 8 Gen 2): /vendor/etc/audio/sku_kalama/audio_effects.xml
  • OPPO / OnePlus 端末: /odm/etc/audio_effects.xml

360 Reality Audio

Snapdragon 8 Gen 2 (kalama) 搭載機の場合: /vendor/etc/audio/sku_kalama/audio_effects.xml

<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 は、Three Sixty Reality (Audio) の略だと思われる。

Xiaomi 独自

Snapdragon 8 Gen 2 (kalama) 搭載機の場合: /vendor/etc/audio/sku_kalama/audio_effects.xml

<libraries>
    <library name="mispatializer" path="libspatializer.so"/>
</libraries>


<effects>
    <effect name="mispatializer" library="mispatializer" uuid="bb8c97a8-cc6c-11ec-9d64-0242ac120002"/>
</effects>

「オーディオ品質を最適化」で使用されるバーチャライザーは、内部的には mispatializer と呼ばれているようだ。mi は Xiaomi (小米) の mi (米)。

media_codecs_dolby_c2.xml

media_codecs*.xml は、端末が対応しているコーデックが記載されているファイル。最近は一つのファイルに全てのコーデックが記載されることは少なく、複数のファイルに分けて記載されていることが多い。

media_codecs_dolby_c2.xml は、Codec 2.0 で実装された Dolby の音声デコーダーについて記載されているファイル。これによると、Android 14 QPR1 Beta 1 の Pixel Tablet の Dolby 関連の音声仕様は以下の通り。

  • Dolby Digital (AC-3): 5.1ch まで対応
  • Dolby Digital Plus (E-AC-3): 7.1ch まで対応、Dolby Atmos (E-AC-3 JOC) には非対応
  • Dolby AC-4: 非対応

これは他の空間オーディオ対応 Pixel と共通の仕様。

Pixel シリーズは「Dolby 〇〇 対応」と謳ってはいないが、あえて呼ぶとするならば「Dolby Audio 対応」と呼ぶのが適切。Dolby Audio は、Dolby Atmos には対応していないものの、何かしらの Dolby の音響技術を採用している製品や音声等に付与されるブランドである。

Dolby Audio が指すものは幅広い上、Android の Dolby Audio でも中身は Dolby Surround (DS1) の場合もあるため、個人的に Android の Dolby Audio のことは「Dolby Audio (DS1)」や「Dolby Audio (DAX3)」と呼んでいる。

むしろ、Dolby Audio 仕様の Dolby Audio X3 の搭載を確認しているのは Pixel シリーズのみであり、先程「Pixel の Dolby Audio X3 はデコーダー周りが特殊」と言ったのは、そのためである。

同様に、Dolby Atmos も色々な箇所でそのブランドが使用されているため、Android の Dolby Atmos は個人的に「Dolby Atmos (DAX2)」「Dolby Atmos (DAX3)」と呼ぶことが多い。


Android の空間オーディオを Dolby Audio X3 で実装している端末において、空間オーディオとして扱える音声フォーマットは Dolby Atmos や Dolby Audio だけなのかというと、実はそうではない。同様に、Xperia のように 360 Reality Audio で実装している場合でも、360 Reality Audio Music Format だけというわけではない。

確かに、従来の Dolby Audio X3 や 360 Reality Audio 等では、サラウンド / イマーシブサウンドとして扱えるのは自らのフォーマットのみで、AAC 等のマルチチャンネル音声は 2.0ch ダウンミックスされた後の音声をアップミックスしたりしているだけだった。(ごく一部の特殊な例外 を除く)

今まではデコーダーとバーチャライザーが紐づいていたためこのようなことになっていたが、Android の空間オーディオではそれらが分離されたことによって、バーチャライザーだけを様々なフォーマットに対して使用することが可能になった。

新しいモデルでは、スペーシャライザーはオーディオ フレームワークの一部であり、デコーダーから分離されています。 Spatializer は混合オーディオ コンテンツを取り込み、ステレオ ストリームをオーディオ HAL にレンダリングします。 Spatializer をデコーダーから切り離すことで、OEM はデコーダーと Spatializer に異なるベンダーを選択し、ヘッド トラッキングに必要なラウンドトリップ レイテンシーを実現できます。この新しいモデルには、ヘッド トラッキング用のセンサー フレームワークへのフックも含まれています。

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

Android の空間オーディオに対応した端末は、最低限 AAC とリニア PCM の 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

この他、FLAC や Opus 等に関しても、端末のデコーダーがマルチチャンネルに対応していればバーチャライズすることも可能。


このような仕様のため、Android の空間オーディオは、実装次第では Dolby Atmos や Dolby Audio 音声が、Dolby 以外のバーチャライザーでも処理できてしまう仕様になっている。実際、Xiaomi 独自のバーチャライザー (mispatializer) で、Dolby Audio の処理ができてしまっている。

音楽における空間オーディオはスマホとヘッドホンで聴かれることが多いため、バイノーラルでの聴こえ方も意識しながら制作されることが多い。

現状、スマホやタブレットの Dolby Atmos の音には、Dolby の音と Apple の音とが存在しており、音楽エンジニアを悩ませる問題となっているのだが、ここに更に頭痛の種が増える形となってしまっている。

だが、Dolby の音と言っても、ここ数年間だけでも Dolby Audio X2 (2014) から Dolby Audio X3 (2017) へ移り変わる際に音が変わっているし、Dolby Audio X3 も Android 12 (2021) のタイミングで音が変わっている。そのため、Apple の音もいつ変わっても不思議ではない。

また、Dolby Audio Experience は端末メーカー側で音をカスタマイズできるようになっている。調整範囲は狭いものの、実際聴き比べると結構違いが分かるぐらいの差はつけられる。

個人的にバイノーラルでの聴こえ方をケアすること自体は否定しないが、今のバーチャライザーに音を合わせすぎるのも危険なのでは、と思わなくもない。

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

  • OS 標準で特定の空間オーディオのフォーマットに対応するわけではない
  • どのフォーマットに対応し、どこのバーチャライザーやヘッドトラッカーを搭載するかはメーカー次第
  • リニア PCM や AAC 等のマルチチャンネル音声もバーチャライズ可能
  • 複数のバーチャライザーを共存することも可能
  • どのような実装であっても Android 標準 API が利用可能
  • システムレベルでのヘッドトラッキングの低遅延化
  • ヘッドトラッキングのメーカー / ブランド縛りからの開放

これらはすべて従来から存在していたものであるが、Android 14 QPR1 Beta 1 で改善された部分もある。Bluetooth で接続されているデバイスが、ヘッドホンであるときのみ空間オーディオを利用可能にし、ポータブルスピーカーやカーオーディオなどでは無効にする、といった変更がなされている。

ヘッドホン向けバーチャライズは HPL (Head Phone Listening) など一部の方式を除き、基本的にはスピーカー再生には向かないし、外部スピーカーがどのようなスピーカー配置をしているかがわからないとスピーカー向けバーチャライズも適用しようがない。

(なら audio_policy_configuration.xml にあった BT A2DP Speaker への空間オーディオの出力は一体…)

Pixel Tablet の空間オーディオまとめ

  • 正式実装は 2023 年 12 月以降になると思われる
  • 基本的な仕様については既存の空間オーディオ対応 Pixel と共通
  • Bluetooth のコーデックに、ヘッドトラッキング用の Opus が追加
  • 内蔵スピーカーでの空間オーディオ (トランスオーラルモード) に対応
  • 空間オーディオの実装には Dolby Audio X3 (DAX3) を採用
  • 5.1ch までの Dolby Digital、7.1ch までの Dolby Digital Plus に対応

井戸水

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

コメントを残す…