見出し画像

遅延が少ないコーデックと言われるaptX-LLとはなんだ

bluetoothオーディオといえば低音質で遅延大というイメージが未だにあるし、標準で搭載されているコーデックであるSBCはその風評を一身に背負っている。まんざら嘘というわけでもないんだろうけど一応弁解の余地はあって、SBCは接続したときにビットレートを決めるという仕組みがあり、いまよりデバイスの性能が悪かった頃は通信の安定性を重視してわざと低ビットレートにしてたんだとか。なのでSBC=低音質という図式は大分昔のものだということだ。ただし遅延に関しては言い訳はできない。なので今ではより遅延が少ないといわれるaptXなどのコーデックが好まれている…。

ところが巷ではaptXがSBCより低遅延というのは言いすぎなんじゃないかという噂がある。(何を隠そう自分もそう思っている一人なんだけど)しかし、さらなる低遅延を謳ったaptX-LLについては全くといっていいほど悪口を見ない。本当に低遅延なのか!

aptX-LLについては本当に情報が少なくてわからない。帯域を使うのでスマホだとWi-Fiと排他だとか、そもそもソフトでエンコーダが実装されてないだとかそんなような噂は聞くけど、よくわからない…よくわからないんだ…。ところがある日fluoride(google先生の中の人が主に管理しているbluetooth stack、というかAndroidで使われてるスタック)のソースを見ていると以下のような記述を見つけた。

//
// Set frame size and transmission interval needed to stream the required
// sample rate using 2-DH5 packets for aptX and 2-DH3 packets for aptX-LL.
// With SCMS-T enabled we need to reserve room for extra headers added later.
// Packets are always sent at equals time intervals but to achieve the
// required sample rate, the frame size needs to change on occasion.
//
// Also need to specify how many of the required PCM samples are read at a
// time:
//     aptx_bytes = pcm_reads * pcm_bytes_per_read / 4
// and
//     number of aptX samples produced = pcm_bytes_per_read / 16
//

これはaptXのフレームのサイズを定義しているところにあったコメントだ。実際fluorideではaptXとHDのエンコーダしか実装されてないんだけど(デコーダも実装されていない)なぜかaptX-LLに対する言及がある。それによるとどうやら使うパケットが違うらしい…。aptXは2-DH5パケットを使うのに対して、aptX-LLでは2-DH3パケットを使う。

2-DH5だとか2-DH3だとかがなんなのかについてはこの記事を参照してほしい。平たく言うとこれらのパケットは2Mbpsで通信して0.625msの長さのスロットが5か3個専有するということだ。2-DH3の方がレイテンシーも小さいということは言うに及ばす、パケットが小さいということは送れるサンプルの数も小さいということだ。もしパケットにサンプルをいっぱいに詰めるとしたら、2-DH3ではその大きさは1/2程度になり、当然サンプルする周期は2倍になり、サンプリングによる遅延は1/2になる。このように2-DH3を使うということは2重に遅延を小さくする効果がある。当然このことはaptX-LLの遅延を小さくするのに寄与しているのだろう。

しかし、なんでこんなことがaptXのエンコーダに書いてあったんだろう。まさかaptX-LLの正体が2-DH3向けに調整しただけのaptXなんてことはあるまいな?

この記事が気に入ったらサポートをしてみませんか?