見出し画像

Androidの呪い(16bit/48khz変換,SRC)は最新OSでどうなったの?オーディオ界の神童Xperiaと比較!


0.導入

皆さんはスマホ、何を使っていますか?多分この記事にたどり着いている、閲覧しているということは8割型Androidユーザーの方でしょう(笑)
ここで質問です。音楽はよく聞きますか?どうせ聞くなら音質は良いに越したことは無いと思います。ですが、Androidは勝手に音を変換していたって知っていますか?今回はそれについて検証した記事です。

0-1.この記事でわかること

  • Xperiaは本当にビットパーフェクトなのか

  • 最新Androidは改善されているのか

  • Pixelの音質設計はどうなっているのか

0-2.用語解説

  • SRC=音の変換

  • DIRECT=そのまま出す

  • MIXER=まとめて処理

1.検証環境

 Xperiaは従来「SRCを回避できるAndroid」と言われていましたが、果たしてどうなのか?調べてみると意外な結果になりました。

  • 使用端末(例:Xperia 5 III / Pixel 8a / Motorola Edge 50 Pro)

  • Androidバージョン

  • 使用アプリ(Apple Music / 純正ミュージック(図1) / Files by Google)

  • 再生した音源(44.1kHz / 48kHz / 96kHz)

  • 接続方法(本体DAC / USB DAC)

本記事では、ログの結果を以下のように定義します。

DIRECT:Android標準のミキサー(AudioFlinger)によるリサンプリング処理をバイパス(Bypass)している可能性が極めて高い経路。OSによる強制的な変換を避けるための「最短ルート」であり、実用上のビットパーフェクトに近い挙動が期待できます。

MIXER: OSやメーカー独自のHAL(ハードウェア抽象化レイヤー)によって再処理されている状態。

※注:ここで言う『ビットパーフェクト(SRC回避)』とは、Android OSのミキサーによるリサンプリングやフォーマット変換をバイパスしている状態を指します。システム側の音量設定やDSPによる最終処理を除いた、
『ストリームの純粋性』にフォーカスした検証です。

再生中でないとデータが取れないので、ワイヤレスデバッグでスマホとパソコンを接続し、下記のadbコマンドを用いてログを書き出し検証しました。

adb shell dumpsys media.audio_flinger
図1
図1


2.Case1 Xperia5Ⅲ SO-53B

 ローカル音源で使ったのはMrs.GREEN APPLEのクスシキ(24bit/96khz)と、我逢人(16bit/44.1Khz)です。DSEEなし、有線と無線で計測しました。

クスシキ(24bit/96khz)、USB DACの場合

しっかりDIRECT(ビットパーフェクト)で出力できました。DSEE Ultimateの有無にかかわらず96000Hzでの再生とログに記されていました。ログ内の「Standby: no」は、現在そのオーディオパスがアクティブ(再生中)であることを示しています。

Output thread 0xb400007831557010, name AudioOut_18D, tid 29429, type 1 (DIRECT):
  I/O handle: 397
  Standby: no
  Sample rate: 96000 Hz
  HAL frame count: 7680
  HAL format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  HAL buffer size: 61440 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  Processing frame size: 8 bytes
  Pending config events: none
  Output devices: 0x4000000 (AUDIO_DEVICE_OUT_USB_HEADSET)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  AudioStreamOut: 0xb40000782157a590 flags 0x1 (AUDIO_OUTPUT_FLAG_DIRECT)
  Frames written: 1251840
  Suspended frames: 0

クスシキ、イヤホンジャックの場合

こちらも同様、しっかりDIRECT(ビットパーフェクト)出力で再生されていました。SONY品質ですね

Output thread 0xb400006ecdc7b030, name AudioOut_8325, tid 2011, type 1 (DIRECT):
  I/O handle: 33573
  Standby: no
  Sample rate: 96000 Hz
  HAL frame count: 7680
  HAL format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  HAL buffer size: 61440 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  Processing frame size: 8 bytes
  Pending config events: none
  Output devices: 0x4 (AUDIO_DEVICE_OUT_WIRED_HEADSET)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  AudioStreamOut: 0xb400006d4dc81400 flags 0x1 (AUDIO_OUTPUT_FLAG_DIRECT)
  Frames written: 1198080
  Suspended frames: 0

クスシキ、LDAC音質モードの場合

きちんとビットパーフェクトでした。

Output thread 0xb400006ecdc8d070, name AudioOut_842D, tid 17544, type 1 (DIRECT):
  I/O handle: 33837
  Standby: no
  Sample rate: 96000 Hz
  HAL frame count: 7680
  HAL format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  HAL buffer size: 61440 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  Processing frame size: 8 bytes
  Pending config events: none
  Output devices: 0x80 (AUDIO_DEVICE_OUT_BLUETOOTH_A2DP)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  AudioStreamOut: 0xb400006d4dc7e250 flags 0x1 (AUDIO_OUTPUT_FLAG_DIRECT)
  Frames written: 3348480
  Suspended frames: 0

我逢人(16bit/44.1khz)、USB DACの場合

…言うことが本当にない。しかし、この『何も加工せずにそのまま出す』という当たり前のことを徹底しているのがXperiaの恐ろしいところです。

Output thread 0xb400006ecdc8d070, name AudioOut_8375, tid 5590, type 1 (DIRECT):
  I/O handle: 33653
  Standby: no
  Sample rate: 44100 Hz
  HAL frame count: 3552
  HAL format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  HAL buffer size: 14208 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  Processing frame size: 4 bytes
  Pending config events: none
  Output devices: 0x4000000 (AUDIO_DEVICE_OUT_USB_HEADSET)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  AudioStreamOut: 0xb400006d4dc84150 flags 0x1 (AUDIO_OUTPUT_FLAG_DIRECT)
  Frames written: 67488
  Suspended frames: 0

我逢人、イヤホンジャックの場合

こちらも見事なDIRECT出力です。有線だろうとDACだろうと、ブレずに最高音質を届けてくれる安心感がありますね

Output thread 0xb400006ecdc84050, name AudioOut_83B5, tid 6425, type 1 (DIRECT):
  I/O handle: 33717
  Standby: no
  Sample rate: 44100 Hz
  HAL frame count: 3552
  HAL format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  HAL buffer size: 14208 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  Processing frame size: 4 bytes
  Pending config events: none
  Output devices: 0x4 (AUDIO_DEVICE_OUT_WIRED_HEADSET)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  AudioStreamOut: 0xb400006d4dc7fab0 flags 0x1 (AUDIO_OUTPUT_FLAG_DIRECT)
  Frames written: 134976
  Suspended frames: 0

我逢人、LDAC音質の場合

これもビットパーフェクトです。

Output thread 0xb400006ecdc7f840, name AudioOut_8435, tid 18146, type 1 (DIRECT):
  I/O handle: 33845
  Standby: no
  Sample rate: 44100 Hz
  HAL frame count: 3552
  HAL format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  HAL buffer size: 14208 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  Processing frame size: 4 bytes
  Pending config events: none
  Output devices: 0x80 (AUDIO_DEVICE_OUT_BLUETOOTH_A2DP)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  AudioStreamOut: 0xb400006d4dc81450 flags 0x1 (AUDIO_OUTPUT_FLAG_DIRECT)
  Frames written: 433344
  Suspended frames: 0

AppleMusicの場合、USB DACの場合

結構派手な動きをしますね、なかなか見慣れません。ビットパーフェクトでないとはいえこんなに音質上げて出しますかね普通。

※補足:今回は詳細なログを割愛しますが、Apple MusicでもALAC(16bit/44.1kHz)のロスレス再生であれば、しっかりDIRECTパスが開くことを確認しています。しかしハイレゾ、ロスレス(24bit/48khz)音源になると、下記の通り384kHz/32bitのMIXERで疑似ビットパーフェクトでの動作となりました

Output thread 0xb400006f7e206100, name AudioOut_83DD, tid 11839, type 0 (MIXER):
  I/O handle: 33757
  Standby: no
  Sample rate: 384000 Hz
  HAL frame count: 504
  HAL format: 0x3 (AUDIO_FORMAT_PCM_32_BIT)
  HAL buffer size: 4032 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  Processing frame size: 8 bytes
  Pending config events: none
  Output devices: 0x4000000 (AUDIO_DEVICE_OUT_USB_HEADSET)
  Input device: 0 (AUDIO_DEVICE_NONE)
  AudioStreamOut: 0xb400006d4dc7d030 flags 0 (AUDIO_OUTPUT_FLAG_NONE)
  Frames written: 3852112
  Suspended frames: 0
  PipeSink frames written: 3852112

AppleMusic、LDAC音質の場合

ダーリン(24bit/96khz)、エルダーフラワー(24bit/48khz)はこの通り、ダウンサンプリングされてしまっていたので音質を求める方には向かないでしょう。

備考:ray(16bit/44.1khz)だとDIRECT出力できていました。

Output thread 0xb400006f7dea6070, name AudioOut_25, tid 2498, type 0 (MIXER):
  I/O handle: 37
  Standby: no
  Sample rate: 48000 Hz
  HAL frame count: 1920
  HAL format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  HAL buffer size: 7680 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  Processing frame size: 4 bytes
  Pending config events: none
  Output devices: 0x80 (AUDIO_DEVICE_OUT_BLUETOOTH_A2DP)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  AudioStreamOut: 0xb400006d4dc792a0 flags 0x8 (AUDIO_OUTPUT_FLAG_DEEP_BUFFER)
  Frames written: 1247925120
  Suspended frames: 0

Xperiaはかなり健闘してくれていて、ローカルの場合は全てにおいてビットパーフェクト(めっちゃすごい!)AppleMusicは物によってはビットパーフェクト、という結果になりました。LDACはBluetoothコーデックなのでPCMとしてのビットパーフェクトとは意味が異なりますが、Android側で余計なSRCが入っていないことは確認できました。良い働きっぷりだったと思います。

ローカル音源の場合の動き方
AppleMusicでの動き方

3.Case2 Edge50Pro

AppleMusic、USB DACの場合

 この端末ではローカル、内蔵ジャックでの検証はしておりませんことをご了承ください。ほとんどAndroid14以降のハイレゾ再生と同じような挙動をしていました。
Mrs.GREEN APPLE 「ダーリン」(24bit/96khz)

Output thread 0xb400007831557010, name AudioOut_205, tid 11241, type 1 (DIRECT):
  I/O handle: 517
  Standby: no
  Sample rate: 96000 Hz
  HAL frame count: 7680
  HAL format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  HAL buffer size: 61440 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  Processing frame size: 8 bytes
  Pending config events: none
  Output devices: 0x4000000 (AUDIO_DEVICE_OUT_USB_HEADSET)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  AudioStreamOut: 0xb400007821577f90 flags 0x1 (AUDIO_OUTPUT_FLAG_DIRECT)
  Frames written: 2403840
  Suspended frames: 0

Official髭男dism「エルダーフラワー」(24bit/48khz)※劣化してる

Output thread 0xb40000792d6ec860, name AudioOut_15, tid 2665, type 0 (MIXER):
  I/O handle: 21
  Standby: no
  Sample rate: 48000 Hz
  HAL frame count: 1920
  HAL format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  HAL buffer size: 7680 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  Processing frame size: 4 bytes
  Pending config events: none
  Output devices: 0x4000000 (AUDIO_DEVICE_OUT_USB_HEADSET)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  AudioStreamOut: 0xb40000782155dc50 flags 0x8 (AUDIO_OUTPUT_FLAG_DEEP_BUFFER)
  Frames written: 2466351360
  Suspended frames: 0

BUMP OF CHICKEN「ray」(16bit/44.1khz)※劣化

Output thread 0xb40000792d6ec860, name AudioOut_15, tid 2665, type 0 (MIXER):
  I/O handle: 21
  Standby: no
  Sample rate: 48000 Hz
  HAL frame count: 1920
  HAL format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  HAL buffer size: 7680 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  Processing frame size: 4 bytes
  Pending config events: none
  Output devices: 0x4000000 (AUDIO_DEVICE_OUT_USB_HEADSET)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  AudioStreamOut: 0xb40000782155dc50 flags 0x8 (AUDIO_OUTPUT_FLAG_DEEP_BUFFER)
  Frames written: 2470778880
  Suspended frames: 0

マイケル・ジャクソンの「Beat It」でもやりましたが、96khz以上だとビットパーフェクトで出力できるようです。なので一般的なAndroid端末を使うときは妥協が必要になりそうですね。

AppleMusic、LDAC音質の場合

これもさっきと似た結果ですね。特筆すべきこともありません

Mrs.GREEN APPLE 「ダーリン」※DIRECT

Output thread 0xb400007831557010, name AudioOut_265, tid 31944, type 1 (DIRECT):
  I/O handle: 613
  Standby: no
  Sample rate: 96000 Hz
  HAL frame count: 7680
  HAL format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  HAL buffer size: 61440 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  Processing frame size: 8 bytes
  Pending config events: none
  Output devices: 0x80 (AUDIO_DEVICE_OUT_BLUETOOTH_A2DP)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  AudioStreamOut: 0xb400007821571c90 flags 0x1 (AUDIO_OUTPUT_FLAG_DIRECT)
  Frames written: 483840
  Suspended frames: 0

Official髭男dism「エルダーフラワー」※劣化してます

Output thread 0xb40000792d6ec860, name AudioOut_15, tid 2665, type 0 (MIXER):
  I/O handle: 21
  Standby: no
  Sample rate: 48000 Hz
  HAL frame count: 1920
  HAL format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  HAL buffer size: 7680 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  Processing frame size: 4 bytes
  Pending config events: none
  Output devices: 0x80 (AUDIO_DEVICE_OUT_BLUETOOTH_A2DP)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  AudioStreamOut: 0xb40000782155dc50 flags 0x8 (AUDIO_OUTPUT_FLAG_DEEP_BUFFER)
  Frames written: 2478652800
  Suspended frames: 0

BUMP OF CHICKEN「ray」※劣化してます

Output thread 0xb40000792d6ec860, name AudioOut_15, tid 2665, type 0 (MIXER):
  I/O handle: 21
  Standby: no
  Sample rate: 48000 Hz
  HAL frame count: 1920
  HAL format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  HAL buffer size: 7680 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  Processing frame size: 4 bytes
  Pending config events: none
  Output devices: 0x80 (AUDIO_DEVICE_OUT_BLUETOOTH_A2DP)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  AudioStreamOut: 0xb40000782155dc50 flags 0x8 (AUDIO_OUTPUT_FLAG_DEEP_BUFFER)

この通り、基本的にBTだろうと96Khz+がビットパーフェクトの鍵となりそうです。

4.Case3 Pixel8a

AppleMusic USB DACの場合

なんというか謎な挙動です。今までに見たことのないような挙動をしていて、一見すると「結局ミキサーを通るのか」と落胆しそうになりますが、注目すべきは内部処理の精度です。 「OSの利便性を保ちつつ、演算精度を上げることで音質を守る」という、Google本家なりの合理的な進化を感じる結果となりました。

Mrs.GREEN APPLE「ダーリン」(24bit/96khz)

Output thread 0xb4000079a6a25790, name AudioOut_5E5, tid 26539, type 0 (MIXER):
  I/O handle: 1509
  Standby: no
  Sample rate: 192000 Hz
  HAL frame count: 960
  HAL format: 0x3 (AUDIO_FORMAT_PCM_32_BIT)
  HAL buffer size: 7680 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  Processing frame size: 8 bytes
  Pending config events: none
  Output devices: 0x4000000 (AUDIO_DEVICE_OUT_USB_HEADSET)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)

  Hal stream dump:
    === YAML START (hifi-playback) ===
    Name: hifi-playback
    Workers:
      Periodic worker:
        Name: pw-hifi-playback
        Force update: false
        Linked config IDs: [400705]
        Need to do A/V sync: false
        Latency ms: 1
        Supported latency modes: [FREE]
        Current latency modes: FREE
      Command worker:
        Name: cw-hifi-playback
        Current state:
          Type: ACTIVE
          Name: StreamOutActiveState

Official髭男dism「エルダーフラワー」(24bit/48khz)


Output thread 0xb4000079a7e6d790, name AudioOut_15, tid 2172, type 0 (MIXER):
  I/O handle: 21
  Standby: no
  Sample rate: 48000 Hz
  HAL frame count: 1920
  HAL format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  HAL buffer size: 15360 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  Processing frame size: 8 bytes
  Pending config events: none
  Output devices: 0x4000000 (AUDIO_DEVICE_OUT_USB_HEADSET)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  
  Hal stream dump:
    === YAML START (deep-buffer-playback) ===
    Name: deep-buffer-playback
    Workers:
      Periodic worker:
        Name: pw-deep-buffer-playback
        Force update: false
        Linked config IDs: [400705]
        Need to do A/V sync: true
        Latency ms: 70
        Supported latency modes: [FREE]
        Current latency modes: FREE
      Command worker:
        Name: cw-deep-buffer-playback
        Current state:
          Type: ACTIVE
          Name: StreamOutActiveState

BUMP OF CHICKEN「ray」(16bit/44.1khz)

Output thread 0xb4000079a7e6d790, name AudioOut_15, tid 2172, type 0 (MIXER):
  I/O handle: 21
  Standby: no
  Sample rate: 48000 Hz
  HAL frame count: 1920
  HAL format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  HAL buffer size: 15360 bytes
  Channel count: 2
  Channel mask: 0x00000003 (front-left, front-right)
  Processing format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  Processing frame size: 8 bytes
  Pending config events: none
  Output devices: 0x4000000 (AUDIO_DEVICE_OUT_USB_HEADSET)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  Hal stream dump:
    === YAML START (deep-buffer-playback) ===
    Name: deep-buffer-playback
    Workers:
      Periodic worker:
        Name: pw-deep-buffer-playback
        Force update: false
        Linked config IDs: [400705]
        Need to do A/V sync: true
        Latency ms: 70
        Supported latency modes: [FREE]
        Current latency modes: FREE
      Command worker:
        Name: cw-deep-buffer-playback
        Current state:
          Type: ACTIVE
          Name: StreamOutActiveState

ローカル音源、USB DACの場合

Mrs.GREEN APPLE「クスシキ」(24bit/96khz)


Output thread 0xb4000079a6a25790, name AudioOut_5E5, tid 26539, type 0 (MIXER):
  I/O handle: 1509
  Standby: no
  Sample rate: 192000 Hz
  HAL frame count: 960
  HAL format: 0x3 (AUDIO_FORMAT_PCM_32_BIT)
  Processing format: 0x5 (AUDIO_FORMAT_PCM_FLOAT)
  Processing frame size: 8 bytes
  Pending config events: none
  Output devices: 0x4000000 (AUDIO_DEVICE_OUT_USB_HEADSET)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
   === YAML START (hifi-playback) ===
    Name: hifi-playback
    Workers:
      Periodic worker:
        Name: pw-hifi-playback
        Force update: false
        Linked config IDs: [400705]
        Need to do A/V sync: false
        Latency ms: 1
        Supported latency modes: [FREE]
        Current latency modes: FREE
      Command worker:
        Name: cw-hifi-playback
        Current state:
          Type: ACTIVE
          Name: StreamOutActiveState

こちらは特に言うこともなく、新しいHiFi対応のSRCに投げてありますね。ですが処理は入っているという事実に変わりはありません。

Mrs.GREEN APPLE「我逢人」(16bit/44.1khz)

Output thread 0xb4000077fb01e030, name AudioOut_605, tid 2678, type 4 (OFFLOAD):
  I/O handle: 1541
  Standby: no
  Sample rate: 44100 Hz
  HAL frame count: 262144
  HAL format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  Processing format: 0x1 (AUDIO_FORMAT_PCM_16_BIT)
  Processing frame size: 4 bytes
  Pending config events: none
  Output devices: 0x4000000 (AUDIO_DEVICE_OUT_USB_HEADSET)
  Input device: 0 (AUDIO_DEVICE_NONE)
  Audio source: 0 (AUDIO_SOURCE_DEFAULT)
  
  Hal stream dump:
    === YAML START (compress-offload-playback) ===
    Name: compress-offload-playback
    Workers:
      Async worker:
        Name: aw-compress-offload-playback
        Is playing: true
        Should hold wake lock: false
        Errored: false
        Pending command: []
        Pending command result: []
      Periodic worker:
        Name: pw-compress-offload-playback
        Force update: false
        Linked config IDs: [400705]
        Need to do A/V sync: false
        Latency ms: 40
        Supported latency modes: [FREE]
        Current latency modes: FREE
      Command worker:
        Name: cw-compress-offload-playback

コレが一番たまげた!!コレも新しいHiFiじゃない方のSRCを通ることになるのかな、と思っていましたがローカルのCD品質の音源だとびっくり!なんとビットパーフェクトで再生されているではありませんか!コレなら実用十分レベルですね。(OFFLOAD=DIRECT)

ローカル音源での動き方
AppleMusicでの動き方

5.まとめ、考察

1. 「SONYの純粋」:常に最高の音質を

Xperia 5 IIIは、基本的には16bit/44.1kHzという『音楽の標準フォーマット』を徹底してDIRECTで通す設計です。一方で、サードパーティアプリのハイレゾ音源などに対しては、384kHz/32bitという巨大な器(ミキサー)を用意して、劣化を感じさせないレベルでねじ伏せるという二段構えの対策を取っています。ですが、やはりミュージックアプリでの再生のほうが全てにおいて、殆どDIRECT出力なので優遇されていると言えるでしょう。

  • メリット: 通知音と混ざっても音質が破綻せず、どんな曲も「ソニーが理想とする滑らかさ」で再生される。

  • 思想: 「Androidに音を汚させない。たとえ強引でも、うちの最高のリサンプラーを通したほうが音は良くなる」という、オーディオメーカーとしての職人気質なプライド

2. 「Motorolaの鏡」:Googleのルールに忠実

Edge 50 Proは、Googleが定めたハイレゾ標準機能を文字通り実行しています。事実、ローカル音源でも96kHzの『クスシキ』はDIRECTで再生されましたが、44.1kHzの『我逢人』はミキサーに送られました。これは『ハイレゾなら特別な道を用意するし、そうでなければ普通に扱う』という合理主義的な設計です。

  • メリット: 96kHz以上のハイレゾ音源に対して DIRECT パス(バイパス道路)を開放。DACへデータを1bitも変えずに届ける「究極の鮮度」を実現している。

  • 思想: 「音源のままが一番。ハイレゾなら特別な道を用意するし、そうでなければ普通に扱う」という、最新OSの機能を最大活用する合理主義的な設計

3.「Googleのソフトウェア」:SRCの更新

Pixel8a(Android16)は、自社の定めた新しいロスレス機能を完璧に実行しているわけではありませんが、前者等の旧式のSRCとは異なり48khzだとしても浮動小数点数でアップサンプリングすることでなるべく計算の誤差を減らしたり、96khz以上のものは192 kHzに対応したミキサーで32bitで演算したりと、DIRECTパスやOFFLOADパスはあまり使えないものの高品質重視の一般人としてはかなり満足度の高い設計になっているのではないでしょうか?

  • メリット:Sonyと同じく、通知音と混ざっても音質が保たれ、Googleの狙った「シームレスさ」と「音質」の両立が可能

  • 思想:「ユーザーがSRCが嫌だって言う。でもシームレスさと引換えにするのは嫌だ。そうだ!SRCを作り直そう!」という、Androidの開発元のさすがのパワープレイで解決

4. 発見された「96kHzの壁」

今回の最大の収穫は、Android 14以降のハイレゾの標準挙動において、サンプリングレート 96kHz が「本気モード」への境界線になっている可能性を突き止めたことです。

  • 44.1kHz / 48kHz: 依然として「Androidの呪い(SRC)」に吸い込まれ、劣化の危機にあります。(ここがXperiaのBT使用時以外のDIRECT再生のスイートスポットで、Pixelはローカルだとここがスイートスポット)

  • 96kHz以上: OSが「これは本物のハイレゾだ」と認め、聖域である DIRECT パスを許可したり、Pixelでは内部でより上位のミキサに切り替える等の処理が見受けられました。

参考:一覧表

6.結論

今回の検証結果をまとめると

・Xperia
ローカル音源ではほぼ完全なビットパーフェクト、AppleMusicではSony audio halを通した疑似ビットパーフェクト再生が主となりました。
ビットパーフェクトよりの再生品質

・一般的なAndroid
48kHzミキサーを通ることが多いが、ハイレゾ音源だとビットパーフェクトになることもある。
従来型の典型的な低品質SRCを通したあとの再生品質

・Pixel
ミキサーは通るが高精度処理で一般人のこだわり派には十分
新型の高品質なSRCを通した再生品質

であるということがわかります。近年。Androidのオーディオスタックは大きく変化している可能性があると十分言えるでしょう。

いいなと思ったら応援しよう!