Bluetooth スタックを倉曎しお、AAC、aptX、LDAC コヌデックを䜿甚しないヘッドフォンのサりンドを改善したす。

この蚘事を読む前に、前の蚘事を読むこずをお勧めしたす。 Bluetooth 経由のオヌディオ: プロファむル、コヌデック、デバむスに関する可胜な限りの詳现

䞀郚のワむダレス ヘッドフォン ナヌザヌは、すべおのオヌディオ デバむスでサポヌトされおいる暙準の SBC Bluetooth コヌデックを䜿甚するず、音質が悪く、高呚波が足りないず報告しおいたす。 サりンドを改善するための䞀般的な掚奚事項は、aptX および LDAC コヌデックをサポヌトするデバむスずヘッドフォンを賌入するこずです。 これらのコヌデックにはラむセンス料が必芁なため、それらをサポヌトするデバむスは高䟡になりたす。

SBC の䜎品質は、Bluetooth スタックずヘッドフォン蚭定の人為的な制限が原因であるこずが刀明したした。この制限は、スマヌトフォンやコンピュヌタの゜フトりェアを倉曎するこずで既存のデバむスで回避できるこずがわかりたした。

コヌデック SBC

SBC コヌデックには、接続セットアップ フェヌズ䞭にネゎシ゚ヌトされるさたざたなパラメヌタが倚数ありたす。 その䞭で

  • チャンネルの数ず皮類: ゞョむント ステレオ、ステレオ、デュアル チャンネル、モノラル。
  • 呚波数垯域の数: 4 たたは 8;
  • パッケヌゞ内のブロック数: 4、8、12、16。
  • 量子化䞭にビットを分配するためのアルゎリズム: ラりドネス、SNR。
  • 量子化䞭に䜿甚されるビット プヌル (ビットプヌル) の最倧倀ず最小倀: 通垞は 2  53。

デコヌド デバむスは、これらのパラメヌタの任意の組み合わせをサポヌトする必芁がありたす。 ゚ンコヌダはすべおを実装しおいない可胜性がありたす。
既存の Bluetooth スタックは通垞、ゞョむント ステレオ、8 バンド、16 ブロック、ラりドネス、ビットプヌル 2..53 のプロファむルに同意したす。 このプロファむルは、44.1 kHz オヌディオを 328 kbps のビットレヌトで゚ンコヌドしたす。
bitpool パラメヌタは XNUMX ぀のプロファむル内のビットレヌトに盎接圱響したす。倀が高いほどビットレヌトが高くなり、したがっお品質も高くなりたす。
ただし、bitpool パラメヌタは特定のプロファむルに関連付けられおいたせん。 ビットレヌトは、チャネルの皮類、呚波数垯域の数、ブロックの数などの他のパラメヌタにも倧きく圱響されたす。 ビットプヌルを倉曎せずに、非暙準プロファむルに同意するこずで、間接的にビットレヌトを増やすこずができたす。

Bluetooth スタックを倉曎しお、AAC、aptX、LDAC コヌデックを䜿甚しないヘッドフォンのサりンドを改善したす。

SBCビットレヌトの蚈算匏

たずえば、デュアル チャネル モヌドでは、各チャネルのビットプヌル党䜓を䜿甚しお、チャネルを個別に゚ンコヌドしたす。 デバむスがゞョむント ステレオではなくデュアル チャネルを䜿甚するように匷制するず、同じ最倧ビットプヌル倀でほが 617 倍のビットレヌト (XNUMX kbps) が埗られたす。
私の意芋では、ネゎシ゚ヌション段階でプロファむルに関連付けられおいないビットプヌル倀の䜿甚は、A2DP 暙準の欠陥であり、SBC 品質の人為的な制限に぀ながりたした。 ビットプヌルではなくビットレヌトをネゎシ゚ヌトする方が合理的です。

これらの固定ビットプヌル倀ずビットレヌト倀は、高品質オヌディオに䜿甚するための掚奚倀が蚘茉された衚に基づいおいたす。 しかし、掚奚はこれらの倀に制限する理由にはなりたせん。

Bluetooth スタックを倉曎しお、AAC、aptX、LDAC コヌデックを䜿甚しないヘッドフォンのサりンドを改善したす。

2 幎から 1.2 幎たで有効だった A2007DP v2015 仕様では、すべおのデコヌド デバむスが最倧 512 kbps のビットレヌトで正しく動䜜するこずが求められたす。

SNK のデコヌダは、最倧ビット レヌトを超えないすべおの可胜なビットプヌル倀をサポヌトする必芁がありたす。 このプロファむルでは、利甚可胜な最倧ビット レヌトがモノラル モヌドの堎合は 320kb/s、512 チャネル モヌドの堎合は XNUMXkb/s に制限されたす。

新しいバヌゞョンの仕様では、ビットレヌトに制限はありたせん。 2015 幎以降にリリヌスされた EDR をサポヌトする最新のヘッドフォンは、最倧 730 kbps たでのビット レヌトをサポヌトできるず掚定されおいたす。

䜕らかの理由で、私がテストした Linux (PulseAudio)、Android、Blackberry、および macOS Bluetooth スタックには、ビットプヌル パラメヌタヌの最倧倀に人為的な制限があり、最倧ビットレヌトに盎接圱響したす。 しかし、これが最倧の問題ではなく、ほずんどすべおのヘッドフォンでも最倧ビットプヌル倀が 53 に制限されおいたす。
すでに芋おきたように、ほずんどのデバむスは、ビットレヌト 551 kbps の修正された Bluetooth スタック䞊で、䞭断やパチパチ音を立おるこずなく完党に動䜜したす。 しかし、そのようなビットレヌトは、通垞の Bluetooth スタック䞊の通垞の条件䞋では決しお䞀貫したせん。

Bluetooth スタックの倉曎

A2DP 暙準ず互換性のある Bluetooth スタックはデュアル チャネル モヌドをサポヌトしおいたすが、むンタヌフェむスからアクティブにするこずはできたせん。

むンタヌフェむスにトグルを远加したしょう。 Android 8.1 および Android 9 甚のパッチを䜜成したした。これはスタックに完党なデュアル チャネル サポヌトを远加し、開発ツヌルのモヌド切り替えメニュヌにモヌドを远加し、デュアル チャネル察応 SBC を aptX のような远加のコヌデックであるかのように扱いたす。 Bluetooth デバむスの蚭定にチェックマヌクを远加しお、AAC、たたは LDAC (Android ではこれを HD オヌディオず呌びたす) を遞択したす。 これは次のようになりたす。

Bluetooth スタックを倉曎しお、AAC、aptX、LDAC コヌデックを䜿甚しないヘッドフォンのサりンドを改善したす。

Android 9甚パッチ
Android 8.1甚パッチ

チェックボックスをオンにするず、Bluetooth オヌディオが特定のビットレヌトで送信され始めたす。 551kbps、ヘッドフォンが 3 Mbit/s の接続速床をサポヌトしおいる堎合、たたは 452kbps、ヘッドフォンが 2 Mbit/s のみをサポヌトしおいる堎合。

このパッチは、次の代替ファヌムりェアに含たれおいたす。

  • LineageOS
  • 埩掻リミックス
  • crドロむド

551 kbit/s ず 452 kbit/s はどこから来たのでしょうか?

Bluetooth ゚ア共有テクノロゞヌは、倧きな固定サむズのパケットを効率的に送信するように蚭蚈されおいたす。 デヌタ転送はスロットで行われ、5 回の転送で送信されるスロットの最倧数は 1 です。3 たたは 2 ではなく、4 たたは 5 スロットを䜿甚する転送モヌドもありたす。679 スロットでは、2 ぀の接続速床で最倧 1021 バむトを転送できたす。 3 Mbit/s の速床で 3 Mbit/s、最倧 367 バむト、それぞれ 552  XNUMX バむトず XNUMX バむト。

Bluetooth スタックを倉曎しお、AAC、aptX、LDAC コヌデックを䜿甚しないヘッドフォンのサりンドを改善したす。

679 バむトたたは 1021 バむト未満で、367 バむトたたは 552 バむトを超えるデヌタを転送したい堎合でも、転送には 5 スロットが必芁ずなり、デヌタは同時に転送されるため、転送効率が䜎䞋したす。

Bluetooth スタックを倉曎しお、AAC、aptX、LDAC コヌデックを䜿甚しないヘッドフォンのサりンドを改善したす。

デュアル チャネル モヌドの SBC、ビットプヌル 44100 パラメヌタヌ、フレヌムあたり 38 ブロック、16 ぀の呚波数範囲を備えた 8 Hz オヌディオで、オヌディオをビットレヌト 164 kbps の 452 バむト フレヌムに゚ンコヌドしたす。
オヌディオは L2CAP および AVDTP 転送プロトコルでカプセル化する必芁があり、オヌディオ ペむロヌドから 16 バむトを取埗したす。

Bluetooth スタックを倉曎しお、AAC、aptX、LDAC コヌデックを䜿甚しないヘッドフォンのサりンドを改善したす。

したがっお、5 ぀のスロットを持぀ 4 ぀の Bluetooth 送信は、XNUMX ぀のオヌディオ フレヌムに察応できたす。

679 (EDR 2 mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 (загПлПвПк SBC) - (164*4) = 6

送信されるパケットには 11.7 ミリ秒の音声デヌタが組み蟌たれ、3.75 ミリ秒で送信されたす。パケットには 6 ぀の未䜿甚バむトが残っおいたす。
ビットプヌルを少し䞊げるず、4 ぀のオヌディオ フレヌムを 3 ぀のパッケヌゞに詰めるこずができなくなりたす。 䞀床に XNUMX フレヌムを送信する必芁があるため、䌝送効率が䜎䞋し、フレヌムごずに送信される音声の量が枛少し、電波状況が悪い堎合には音声の途切れが早く発生したす。

同様に、EDR 551 Mbit/s には 3 kbit/s のビットレヌトが遞択されたした。Bitpool 47 では、フレヌムあたり 16 ブロック、8 ぀の呚波数範囲、フレヌム サむズは 200 バむト、ビットレヌトは 551 kbit/s です。 5 ぀のパッケヌゞには 14.6 フレヌムたたは XNUMX ミリ秒の音楜が含たれおいたす。

すべおの SBC パラメヌタを蚈算するアルゎリズムは非垞に耇雑で、手動で数えるず簡単に混乱する可胜性があるため、興味のある人を助けるために察話型の蚈算機を䜜成したした。 btcodecs.valdikss.org.ru/sbc-bitrate-calculator

なぜこれだけが必芁なのでしょうか?

aptX コヌデックの音質に関する䞀般的な認識に反しお、䞀郚のファむルでは、暙準ビットレヌト 328 kbps の SBC よりも悪い結果が生じる可胜性がありたす。

SBC は、量子化ビットを䜎䜍から高䜍の順に呚波数垯域に動的に割り圓おたす。 すべおのビットレヌトが䜎域ず䞭域の呚波数に䜿甚された堎合、高域は「カットオフ」されたす (代わりに無音になりたす)。
aptX は呚波数垯域を垞に同じビット数で量子化するため、ビットレヌトが䞀定352 kHz の堎合は 44.1 kbps、384 kHz の堎合は 48 kbpsになり、最も必芁な呚波数に「ビットシフト」するこずはできたせん。 。 SBC ずは異なり、aptX は呚波数を「カット」したせんが、呚波数に量子化ノむズを远加しお、オヌディオのダむナミック レンゞを枛少させ、堎合によっおは特有のパチパチ音を発生させたす。 SBC は「詳现を考慮」し、最も静かな゚リアを砎棄したす。
平均するず、SBC 328k ず比范しお、aptX は呚波数範囲が広い音楜では歪みが少なくなりたすが、呚波数範囲が狭く、ダむナミック レンゞが広い音楜では、SBC 328k が勝぀堎合がありたす。

特殊な堎合を考えおみたしょう。 ピアノ挔奏録音のスペクトログラム:
Bluetooth スタックを倉曎しお、AAC、aptX、LDAC コヌデックを䜿甚しないヘッドフォンのサりンドを改善したす。

䞻な゚ネルギヌは 0  4 kHz の呚波数にあり、10 kHz たで続きたす。
aptX で圧瞮されたファむルのスペクトログラムは次のようになりたす。
Bluetooth スタックを倉曎しお、AAC、aptX、LDAC コヌデックを䜿甚しないヘッドフォンのサりンドを改善したす。

そしおこれがSBC 328kの倖芳です。
Bluetooth スタックを倉曎しお、AAC、aptX、LDAC コヌデックを䜿甚しないヘッドフォンのサりンドを改善したす。

SBC 328k は、16 kHz を超える範囲を定期的に完党にオフにし、この倀を䞋回る範囲では利甚可胜なビットレヌトをすべお費やしおいるこずがわかりたす。 ただし、aptX スペクトログラムから枛算された元のスペクトログラムでわかるように、aptX は人間の耳に聞こえる呚波数スペクトルにより倚くの歪みを導入したした (明るいほど歪みが倧きくなりたす)。
Bluetooth スタックを倉曎しお、AAC、aptX、LDAC コヌデックを䜿甚しないヘッドフォンのサりンドを改善したす。

SBC 328k は 0  10 kHz の範囲で信号の劣化を少なくし、残りを遮断したす。
Bluetooth スタックを倉曎しお、AAC、aptX、LDAC コヌデックを䜿甚しないヘッドフォンのサりンドを改善したす。

SBC の 485k ビットレヌトは、垯域を無効にするこずなく呚波数範囲党䜓を維持するのに十分でした。
Bluetooth スタックを倉曎しお、AAC、aptX、LDAC コヌデックを䜿甚しないヘッドフォンのサりンドを改善したす。

このトラックでは、SBC 485k が 0  15 kHz の範囲で aptX よりも倧幅に優れおおり、15  22 kHz ずいう小さいながらも顕著な差がありたす (暗いほど歪みが少なくなりたす)。
Bluetooth スタックを倉曎しお、AAC、aptX、LDAC コヌデックを䜿甚しないヘッドフォンのサりンドを改善したす。

オリゞナルオヌディオ、SBC、aptXのアヌカむブ.

高ビットレヌトの SBC に切り替えるず、どのヘッドフォンでも aptX を超えるオヌディオが埗られたす。 3 Mbps EDR 接続をサポヌトするヘッドフォンでは、551 kbps のビットレヌトで aptX HD に匹敵するサりンドが生成されたす。

もっずできるこずはありたすか

Android パッチには、2 Mbps EDR デバむスのビットレヌトをさらに高めるオプションも含たれおいたす。 ビットレヌトを 452 kbit/s から 595 kbit/s に増やすこずができたすが、その代わりに、困難な無線条件での䌝送の安定性が䜎䞋したす。
persist.bluetooth.sbc_hd_higher_bitrate 倉数を 1 に蚭定するだけで十分です。

# setprop persist.bluetooth.sbc_hd_higher_bitrate 1

゚クストリヌム ビットレヌト パッチは、これたでのずころ LineageOS 15.1 でのみ採甚されおおり、16.0 では採甚されおいたせん。

デバむスの互換性

SBC デュアル チャネルは、ほがすべおのヘッドフォン、スピヌカヌ、車のヘッド ナニットでサポヌトされおいたす。 これは䞍思議ではありたせん。この暙準では、あらゆるデコヌド デバむスでのサポヌトが必芁です。 このモヌドによっお問題が発生するデバむスは少数ありたすが、これらは分離されたむンスタンスです。
互換性のあるデバむスの詳现に぀いおは、次のサむトをご芧ください。 w4bsitXNUMX-dns.com たたは XDA-開発.

音の違いの比范

私はブラりザ内でリアルタむムにオヌディオを SBC (および aptX および aptX HD) に゚ンコヌドする Web サヌビスを䜜成したした。 これを䜿甚するず、実際に Bluetooth 経由でオヌディオを送信せずに、有線ヘッドフォン、スピヌカヌ、お気に入りの音楜で、さたざたな SBC プロファむルや他のコヌデックのサりンドを比范したり、オヌディオの再生䞭に゚ンコヌド パラメヌタを盎接倉曎したりするこずができたす。
btcodecs.valdikss.org.ru/sbc-encoder

Android 開発者に連絡する

私は Google の倚くの Bluetooth スタック開発者に、Android のメむン ブランチである AOSP にパッチを含めるこずを怜蚎するよう手玙を曞きたしたが、返答は XNUMX ぀もありたせんでした。 私のパッチが入っおいたす Android 甹 Gerrit パッチ システム 関係者からもコメントは埗られなかった。
Google の開発者ず連絡をずり、SBC HD を Android に導入するにあたっお、䜕らかの支揎ができれば幞いです。 gerrit のパッチはすでに期限切れになっおいたす (これは初期のリビゞョンの XNUMX ぀です)。開発者が私の倉曎に興味がある堎合は曎新したす (曎新するのは簡単ではありたせん。Android Q ず互換性のあるデバむスを持っおいないためです)。 。

たずめ

LineageOS、Resurrection Remix、crDroid ファヌムりェアを搭茉したスマヌトフォンのナヌザヌは、Bluetooth デバむス蚭定でオプションを有効にするだけで、改善された音質を今すぐ楜しむこずができたす。 Linux ナヌザヌは、むンストヌルするこずで SBC ビットレヌトを向䞊させるこずもできたす。 パリ・ロハヌルのパッチこれにより、特に、aptX、aptX HD、および FastStream コヌデックのサポヌトが远加されたす。

出所 habr.com

コメントを远加したす