Bluetooth Wireless Audio-Technologie: Was ist besser?


Mit der Entwicklung der Technologie gehen die so bekannten analogen Röhrenkopfhörer in die Geschichte ein - sie werden zunehmend durch drahtlose Bluetooth-Gegenstücke ersetzt.

Moderne Smartphones haben aus Gründen des Feuchtigkeits- und Staubschutzes keinen üblichen Anschluss.

Entwickler veröffentlichen alle neuen Versionen des Bluetooth-Protokolls und alle neuen Versionen von Codecs und versprechen "schneller, höher, stärker" - weniger Verzögerungen bei der Wiedergabe und bessere Qualität.

Ist alles so gut Mal sehen.

Einführung


Ich werde mich nicht mit der technischen Implementierung der Protokolle sowie den langweiligen Spezifikationen befassen. Lieber ValdikSS , der in diesem Artikel weitgehend als Inspiration und sogar als wissenschaftlicher Berater fungierte, bereitet umfassendes Material zu Codecs vor - und alles wird dort viel detaillierter und technisch korrekter dargestellt.

Ich möchte mehr über persönliche Erfahrungen erzählen. Nun, ein wenig unterhaltsames (langweiliges?) Üben.

Vor anderthalb Jahren war ich von der Idee von aptX begeistert. Ja, ich habe viele solcher Bewertungen gelesen und an all diese technischen Wendungen geglaubt. Ein Kind wurde geboren - und ich wollte unbedingt nachts mit meiner Frau Shows mit Kopfhörern sehen, ohne Lärm zu machen und niemanden im Haus zu wecken.

Was hat es ergeben?

Qualität


Beginnen wir mit Zahlen und Fakten (Hallo, Wikipedia!)

SBC ist ein guter alter Codec, der dem A2DP-Standard entspricht. Der Codec ist das Ergebnis der Arbeit von Frans de Bont (F. de Bont, M. Groenewegen und W. Oomen, "Ein qualitativ hochwertiges Audiocodierungssystem mit 128 kb / s", 98. AES-Konvention, 25.-28. Februar 1995) und seiner Verwendung die im Patent EP-0400755B1 beschriebenen Algorithmen. Es ist bemerkenswert, dass die Autoren des Patents die kostenlose Nutzung von SBC nur in der Bluetooth-Anmeldung zulassen. Das Patent ist jedoch am 2. Juni 2010 abgelaufen. Da der A2DP-Standard sehr verbreitet ist, ist es äußerst schwierig, Kopfhörer oder Lautsprecher zu finden, die keine SBC-Unterstützung bieten.

Der Codec bietet eine Abtastfrequenz von 16, 32, 44,1, 48 kHz mit einer Flussrate von 10-1500 kbit / s. Ja, du hast richtig gehört. Bis zu 1500 kbps. Es gibt einfach keine Bitratenbegrenzung im Codec. Aber dazu später mehr.

Der aptX- Codec wurde 1988 an der Queen's University in Belfast entwickelt . Ja, vor Bluetooth gab es noch ungefähr ein Dutzend Jahre, daher wurde der Codec in professionellen Audiogeräten verwendet. Qualcomm besitzt derzeit die Rechte und daher erfordert die Nutzung Lizenzen und Lizenzgebühren. Ab 2014 betragen die Kosten ungefähr die folgenden: eine einmalige Zahlung von 6.000 USD und 1 USD für jedes Gerät, das für Parteien mit bis zu 10.000 Geräten freigegeben wurde. Aus diesem Grund sind viele Geräte mit Snapdragon 835, 845, 821, 820, 810, 805, 801, 800, 650, 615, 410 Chips durchaus möglich und unterstützen aptX, werden dort jedoch nicht aktiviert, da die Lizenz nicht gekauft wurde. Darüber - auch unten.

Mit einer Bittiefe von 16 Bit und einer Abtastfrequenz von 48 kHz kann der Codec eine Bitrate von 384 kbit / s (Zweikanal) bereitstellen.

Liste der Produkte, die aptX offiziell unterstützen . Sie können auf Aliexpress viele unbekannte Systeme mit aptX-Unterstützung finden, aber seien Sie darauf vorbereitet, dass es tatsächlich denselben guten alten SBC geben wird - und nicht mehr.

aptX HD - der gleiche Codec, jedoch mit einem anderen Codierungsprofil, hat eine Stream-Geschwindigkeit von 576 kbit / s, Unterstützung für Abtastfrequenzen bis zu 48 kHz und Bittiefe bis zu 24 Bit. Einige Leute nennen diesen aptX Lossless-Codec - aber das ist völliger Unsinn, schon allein deshalb, weil es derzeit unmöglich ist, den Wert eines Streams zu erreichen, der verlustfreie Daten enthalten könnte. Ein besonderer Vorteil dieses Codecs ist eine einstellbare Codierungsverzögerung, die bei einer Abtastfrequenz von 48 kHz auf 1 ms reduziert werden kann. Außerdem ist der Codec vom Standpunkt des Prozessorladens äußerst vorteilhaft, was einen Vorteil gegenüber MP3 und AAS ausdrückt.

Liste der Produkte, die aptX HD offiziell unterstützen . Er ist klein genug.

aptX Low Latency (oder LL) ist eine spezielle Version des Codecs, mit der Sie die Tonverzögerungszeit auf weniger als 40 ms reduzieren können. Liste der Produkte, die aptX LL offiziell unterstützen .

Bild

Da ist sie. Es war dieses Bild, das mich einmal mit Innereien gekauft hat. Verzögerungen! Wer will schon den Klang einer Explosion in einem Actionfilm hören, den Schrei eines Monsters in einem Horrorfilm oder das Dröhnen einer Menge bei einem Fußballspiel, wenn alles vorbei ist?

Aber ist das alles wirklich so?

Leider nein.

Wie bei jedem Marketingmaterial sind die Zahlen weit hergeholt. Die Verzögerung hängt weitgehend von der Pufferung im System und der Codec-Implementierung ab. Die Verzögerung mit SBC kann also durchaus weniger als 40 ms betragen, was angesichts der Standards der Fernsehübertragung (+40 ms ... –60 ms) durchaus akzeptabel ist.

Zusammenfassend:

  1. Kein vorhandener Codec kann besser sein als die kabelgebundene Technologie, da kein Codec eine echte verlustfreie Komprimierung erzielen kann.
  2. Der beliebteste Codec ist SBC. Er ist am flexibelsten in Einstellungen. Und trotz der Tatsache, dass aptX früher veröffentlicht wurde, konnte es die Popularität von SBC nicht übertreffen, anscheinend weil letzteres kostenlos war.
  3. Die Klangqualität hängt stark von der Implementierung des Codecs sowie von der Hardwareleistung der Kopfhörer / Lautsprecher im Allgemeinen ab. Wenn der Lautsprecher selbst schwach ist, kann die Qualität von keinem Codec verbessert werden. Daher werden wir in Zukunft beim Vergleich der Qualität davon sprechen, denselben Inhalt aus derselben Quelle auf denselben Lautsprechern / Kopfhörern, jedoch mit unterschiedlichen Codecs abzuspielen.

Praktische und sehr subjektive Ergebnisse




Die Informationen basieren auf den bereits erwähnten anderthalb Jahren Erfahrung im Bedienen, Vergleichen und Anziehen von externen Zuhörern.

Die Erfahrung basiert auf dem verlustfreien Hören auf dem SONY Walkman NWZ-A17-Player, auf dem der Codec ausgewählt werden kann, sowie auf dem Ansehen verschiedener Programme mit Audioausgabe über Avantree Priva III.

Es gab drei Kopfhörer: Sennheiser PMX 60, Koss Porta Pro und Koss UR-20.

Jabra BT3030 (SBC) und Avantree Clipper Pro (aptX) wurden als drahtlose Signalempfänger verwendet.

Ein Voombox Outdoor (SBC) -Lautsprecher und Aftershokz Trekz Titanium (aptX) -Knochenleitungskopfhörer wurden ebenfalls verwendet.

Alle Equalizer und Enhancer wurden ausgeschaltet - und das ist wichtig.

Gesamt:

  1. Die Klangqualität einer Kabelverbindung ist immer besser. Dies ist ohne Zweifel.
  2. Der Unterschied zwischen SBC und aptX ist äußerst schwer zu hören - und nur bei einigen Arten von Musik. Zum Beispiel hörte der Autor des Artikels deutlich den Unterschied in Cellosoli in klassischen Kompositionen, während der Unterschied bei Violinen- und Niederfrequenzinstrumenten weniger wahrnehmbar war. In modernen Genres - Pop, elektronische Musik und Rock - ist der Unterschied nicht zu hören. In einigen Fällen schien es subjektiv, dass SBC den Ton besser überträgt als aptX.
  3. Die Verzögerung zwischen SBC und aptX ist nur sichtbar, wenn Sie eine Verbindung zu derselben Quelle herstellen und verschiedene Empfänger in verschiedene Ohren einstecken (der linke Kanal ist beispielsweise SBC und der rechte ist aptX). Es ist fast unmöglich, die Verzögerung mit dem Bild zu sehen, aber weil die Geschichte, dass aptX für dynamische Szenen und Inhalte gedacht ist, ein Mythos ist.
  4. Die Überraschung wurde durch die Klangqualität der eher billigen und "nicht berühmten" Voombox Outdoor verursacht. Anscheinend ist dies die erfolgreiche Implementierung von SBC, die oben erwähnt wurde.
  5. Die Implementierung von aptX in Kopfhörern mit Knochenleitung ist völlig unverständlich - die Technologie ist sehr spezifisch und daher ist der Qualitätsverlust aufgrund der Technologie selbst erheblich. Angesichts des geringen Bereichs des „Bereichs“ des Gerätebetriebs und der äußerst schlechten Implementierung der Kopplung mit zwei Geräten kann ich sagen, dass Aftershokz ein Unternehmen ist, das mehr in Marketing als in Entwicklung investiert.


Ich behaupte nicht, dass Sie den Unterschied erkennen können und sollten, wenn Sie alle Arten von Spektralanalysatoren usw. anschließen. Aber das menschliche Ohr und noch schlimmer - das durchschnittliche menschliche Ohr - ist kein Spektralgerät und hört daher nicht alle diese Nuancen.

Übung: Fixieren, was repariert werden kann


Teil 1. Schalten Sie aptX ein


Wie bereits erwähnt, ist bei einigen Geräten die Verwendung von aptX deaktiviert, wahrscheinlich um Patentverfolgungen zu vermeiden.

Dieses Problem kann ganz einfach gelöst werden, indem Sie das Bibliotheksgerät verschieben, um den Codec zu implementieren, und die Möglichkeit schreiben, mit diesem Codec in build.prop zu arbeiten.

Im Internet gibt es eine Vielzahl solcher Lösungen. Ich nahm mir die Freiheit, sie zu einem zu kombinieren, während ich es als Modul für Magisk realisierte. Ja, dieses Projekt gefällt mir sehr gut und ich denke, dass die Implementierung von Änderungen im System in Form von Magisk-Modulen eine bessere und sicherere Lösung darstellt, da das System in seiner ursprünglichen Form gespeichert und auf einfache Weise zurückgesetzt werden kann.

Das Modul kann hier heruntergeladen werden . Ja, ich weiß über Github Bescheid. Und nein, bis ich Zeit habe, es dort abzulegen.

Einträge in build.prop, einschließlich aptX und, falls möglich, aptX HD, werden vom Modul automatisch emuliert.



Teil 2. Erhöhen Sie die SBC-Bitrate


Wie bereits berichtet, unterliegt der SBC-Codec grundsätzlich keinen Bitratenbeschränkungen. Die Hersteller legen jedoch normalerweise einen Grenzwert von 342 kbit / s für Mono und 345 kbit / s für Stereo fest, um einen zuverlässigen Betrieb mit allen Arten von Empfangsgeräten zu gewährleisten.

Gleichzeitig verlangt die von 2007 bis 2015 aktive A2DP v1.2-Spezifikation, dass alle Decodierungsgeräte mit Bitraten von bis zu 320 kbit / s für Mono und 512 kbit / s bei einem Stereosignal korrekt arbeiten.

In der neuen Version der Spezifikation gibt es überhaupt keine Bitratenbegrenzung. Es wird davon ausgegangen, dass moderne Kopfhörer, die nach 2015 veröffentlicht wurden und EDR unterstützen, Bitraten von bis zu 730 kbps unterstützen können.

In der Tat ist dies sicherlich nicht der Fall. In einer umfangreichen Studie von ValdikSS wurde festgestellt, dass fast alle Empfangsgeräte zuverlässig mit Bitraten von 454 kbit / s und eine relativ große Anzahl mit Bitraten von 507 kbit / s arbeiten.

In seiner Forschung hat ValdikSS auch gezeigt, dass es entgegen der weit verbreiteten Meinung über die Klangqualität des aptX-Codecs bei einigen Dateien zu schlechteren Ergebnissen führen kann als bei SBC mit einer Standardbitrate von 328 kbps, und beim Umschalten auf SBC mit hoher Bitrate wird häufig ein Ton erzeugt, der häufig übersteigt aptX, auf jedem Kopfhörer.

Basierend auf diesen Daten hat ValdikSS Kommentare an die Entwickler von Lineage OS und Google gesendet, aber bisher gab es keine Reaktion.

Daher können wir den Bluetooth-Stack nur manuell ändern.

Wir benötigen einen IDA Pro mit der Fähigkeit, ARM, jeden HEX-Editor (ich habe WinHEX verwendet) und die Datei bluetooth.default.so von unserem Gerät zu dekompilieren. Normalerweise befindet es sich im Pfad / system / lib / hw und seltener - auch im Pfad / system / lib64 / hw (Root-Zugriff ist definitiv erforderlich).

Öffnen Sie daher die Datei bluetooth.default.so. Die unten beschriebenen Vorgänge und Änderungen gelten nur für den ursprünglichen Android-Stack (bluedroid). Wenn in IDA Pro die Zeile "Benötigte Bibliothek 'com.qualcomm.qti.bluetooth_audio@1.0.so'" oder ähnliches angezeigt wird, hilft Ihnen diese Anweisung mit hoher Wahrscheinlichkeit nicht weiter.



Unsere erste Aufgabe ist es, Joint Stereo in einer Standardkonfiguration durch Dual Channel zu ersetzen.

Wir werden mit der Funktion bta_av_build_src_cfg arbeiten .

Um dieses Verfahren in der IDA zu finden, verwenden wir die Zeilensuche nach einer charakteristischen Nachricht im Debug-Protokoll "Cant parse src cap ret =% d" :





Infolgedessen finden wir die Funktion selbst ziemlich schnell in Form von Code:



Unsere Aufgabe ist es, die ursprüngliche Struktur der Schecks zu ersetzen

if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO;</code>  <code> if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO; 

Es gibt verschiedene Möglichkeiten, dies zu tun.

Das erste ist das Ersetzen der Anweisungen TST.W R0, # 1 durch TST.W R0, # 4 und MOVS R0, # 1 durch MOVS R0, # 4 in der Reihenfolge der Überprüfungen:



Im Bytecode ist dies der Ersatz von x01 bis x04. Es ist wichtig, die charakteristische Folge von Bytes zu beachten, anhand derer dieses Muster gefunden werden kann. Ohne auf Details einzugehen, möchte ich sagen, dass es sich im Wesentlichen um eine Suche nach Sequenzen handelt

 10 20 8D F8 04 00 9D F8 0D 00 10 F0 01 0F ?? ?? 10 F0 02 0F ?? ?? 10 F0 04 0F ?? ?? 10 F0 08 0F ?? ?? 08 20 ?? ?? 01 20 ?? ?? 02 20 ?? ?? 04 20 

und sein Ersatz durch

 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 04 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 04 ?? ?? ?? ?? ?? ?? ?? ?? ?? 

Dieses Verfahren hat jedoch Nachteile.

Eine Reihe von Compilern ändert die Reihenfolge der Ausführung von Befehlen abhängig von der Optimierung. In diesem Fall ist es nicht möglich, das gewünschte Muster zu finden, und manchmal wird der Prüfmechanismus in der Struktur im Allgemeinen in den Inline-Code eingeführt. Daher ist es zuverlässiger, die Konstante btif_av_sbc_default_config zu ändern.

Für den Anfang - finden Sie sie. Sie steht ganz am Anfang unserer Funktion, weil

 void bta_av_build_src_cfg (UINT8 *p_pref_cfg, UINT8 *p_src_cap) { tA2D_SBC_CIE src_cap; tA2D_SBC_CIE pref_cap; UINT8 status = 0; /* initialize it to default SBC configuration */ A2D_BldSbcInfo(AVDT_MEDIA_AUDIO, (tA2D_SBC_CIE *) &btif_av_sbc_default_config, p_pref_cfg); /* now try to build a preferred one */ /* parse configuration */ if ((status = A2D_ParsSbcInfo(&src_cap, p_src_cap, TRUE)) != 0) { APPL_TRACE_DEBUG(" Cant parse src cap ret = %d", status); 

Und hier ist sie:





Es ist ersichtlich, dass btif_av_sbc_default_config selbst eine Folge von Bytes 20 01 10 04 01 35 02 ist, während das erste Byte die Abtastfrequenz codiert und 10 (48 kHz) und 20 (44 kHz) sein kann und daher nicht spezifisch ist. Daher ist es unsere Aufgabe, die Sequenz zu ersetzen
01 10 04 01 35 02
auf
04 ?? ?? ?? ?? ??

Auf diese Weise können Sie die Logik der Struktur auf ähnliche Weise ändern. Gleichzeitig führt die Optimierung des Compilers jedoch nicht zu Problemen.

In einigen Fällen stellen die Kopfhörer oder Lautsprecher selbst die Verbindung her. In diesem Fall wird der Modus durch die Funktion bta_av_co_audio_init bestimmt .

Die Funktion ist durch die Zeile „bta_av_co_audio_init:% d“ gekennzeichnet und kann im Code leicht gesucht werden:


Die Aufzählung möglicher Verbindungsmodi erfolgt mit folgendem Befehl:

  switch (index) { case BTIF_SV_AV_AA_SBC_INDEX: /* Set up for SBC codec for SRC*/ *p_codec_type = BTA_AV_CODEC_SBC; /* This should not fail because we are using constants for parameters */ A2D_BldSbcInfo(AVDT_MEDIA_AUDIO, (tA2D_SBC_CIE *) &bta_av_co_sbc_caps, p_codec_info); /* Codec is valid */ return TRUE; 

Die Konstante bta_av_co_sbc_caps hat folgende Struktur :

 const tA2D_SBC_CIE bta_av_co_sbc_caps = { (A2D_SBC_IE_SAMP_FREQ_44), /* samp_freq */ (A2D_SBC_IE_CH_MD_MONO | A2D_SBC_IE_CH_MD_STEREO | A2D_SBC_IE_CH_MD_JOINT | A2D_SBC_IE_CH_MD_DUAL), /* ch_mode */ (A2D_SBC_IE_BLOCKS_16 | A2D_SBC_IE_BLOCKS_12 | A2D_SBC_IE_BLOCKS_8 | A2D_SBC_IE_BLOCKS_4), /* block_len */ (A2D_SBC_IE_SUBBAND_4 | A2D_SBC_IE_SUBBAND_8), /* num_subbands */ (A2D_SBC_IE_ALLOC_MD_L | A2D_SBC_IE_ALLOC_MD_S), /* alloc_mthd */ BTA_AV_CO_SBC_MAX_BITPOOL, /* max_bitpool */ A2D_SBC_IE_MIN_BITPOOL /* min_bitpool */ }; 

Die Konstante ist im Code leicht zu finden, in meinem Fall 20 0F F0 0C 03 35 02:



Achten Sie auf Byte 0F - es bietet die Möglichkeit, eine Verbindung mit einem der gültigen Modi herzustellen , da

 x0F = A2D_SBC_IE_CH_MD_MONO | A2D_SBC_IE_CH_MD_STEREO | A2D_SBC_IE_CH_MD_JOINT | A2D_SBC_IE_CH_MD_DUAL = x08 | x02 | x01 | x04 

Unsere Aufgabe ist es, diesen Wert wie folgt zu ändern:

 x0F = A2D_SBC_IE_CH_MD_DUAL = x04 

Daher ist es notwendig zu ersetzen

?? 0F F0 0C 03 35 02
auf
?? 04 ?? ?? ?? ?? ??

Daher haben wir den Stack gezwungen, im Zweikanalmodus eine Verbindung herzustellen, sowohl beim Herstellen einer Verbindung durch das Gerät als auch beim Herstellen einer Verbindung durch die Empfangsseite des Signals.

Jetzt müssen Sie die Einschränkungen der Bitrate aufheben oder den oberen Schwellenwert erhöhen.

Müssen btif_media_task_get_sbc_rate behandeln . Um nach der Kennlinie "Nicht-EDR-A2dP-Senke erkannt, Rate auf% d beschränken" zu suchen , suchen wir in ähnlicher Weise nach der Funktion im Code:


Das Bitratenlimit wird in einer Zeichenfolge ausgedrückt
UINT16 rate = DEFAULT_SBC_BITRATE (was wiederum 328 kbps beträgt )

Im Code ist dies:



Ändern Sie diesen Wert auf 454 kbit / s - er ist höher als der Standard und funktioniert mit der überwiegenden Mehrheit der Empfänger. Ersetzen Sie dazu die Bytes

B1 4F F4 A4 74 ?? E0
auf
?? ?? ?? E3 ?? ?? ??

Sie sollten auch nach Muster suchen.

E0 4F F4 A4 74 ?? E0
und ersetzen Sie es durch
?? ?? ?? E3 ?? ?? ??
- Dies ist für eine Reihe von Geräten erforderlich.

Der Wert von E3 kann abhängig von der gewünschten maximalen Bitrate unterschiedlich sein:

  • E3 - 454 kbps
  • F1 - 482 kbps
  • F3 - 486 kbps
  • 10 - 576 kbps
  • 48 - keine Begrenzung

Im Allgemeinen wird dies durch den Bytecode der Operation MOV.W R4, XXX bestimmt.

In der Praxis lohnt es sich zu experimentieren und den Maximalwert zu wählen, bei dem alle Ihre Empfangsgeräte einen stabilen Signalempfang erhalten. Es treten keine Risse, Unterbrechungen oder Verzerrungen auf.

Bei allen Empfängern in meinem Experiment (ich habe sie oben angegeben) betrug dieser Wert 576 kbit / s. Das Xiaomi Redmi 4x MIUI10 Android 7.1-Telefon war die Signalquelle.

Basierend auf den beschriebenen Aktionen wurde ein generischer Patch erstellt, der die angegebenen Muster in Bluetooth.default.so findet und ersetzt. einschließlich erzwungenem Zweikanalmodus und Festlegen der Bitratengrenze auf 454 kbps. Bei Bedarf kann der Grenzwert leicht durch Suchen und Ersetzen des entsprechenden Bytes geändert werden - ein aufmerksamer Leser wird dies ohne Schwierigkeiten tun.

Ich betone: Der Patch funktioniert nur im Fall des Bluedroid-Stacks und wird höchstwahrscheinlich im Fall des Fluoride-Stacks und der Android-Version 8 und höher nicht erfolgreich sein.

Der Patch kann hier heruntergeladen werden .

Es wird dringend empfohlen, die Originaldatei als Magisk-Module zu ersetzen. Für mich selbst habe ich dies wie folgt getan. Bitte beachten Sie : Diese Module wurden von mir für das Xiaomi Redmi 4x 3/32 GB-Telefon mit der aktuellen globalen stabilen MIUI 10-Firmware zum Zeitpunkt des Schreibens erstellt. In Ihrem Fall muss die Datei bluetooth.default.so wie oben beschrieben durch Ihre eigene, gepatchte ersetzt werden. Es ist auch möglich, dass die Datei entlang des Pfads / system / lib64 / hw dupliziert werden muss - dies hängt vom Modell und der Firmware-Version Ihres Telefons ab.

Dieser Ansatz mit Magisk-Modulen erleichtert das Ändern der maximalen Bitrate und das generelle Deaktivieren von Änderungen, wenn sich herausstellt, dass einige der empfangenden Geräte Dual Channel nicht unterstützen.

Fazit


Im Moment streben viele Unternehmen im Hinblick auf den Verkauf einige technologische Innovationen an, um einen höheren Preis zu rechtfertigen.

In der Praxis stellt sich heraus, dass vorhandene, billigere Technologien nicht vollständig entwickelt und technologische Innovationen nicht vollständig implementiert sind, was die Qualität erheblich beeinträchtigt.

Sehr oft erleben Benutzer den „Placebo-Effekt“, der sich nur deshalb von der Perfektion eines Produkts überzeugt, weil es neuer oder farbenfroher präsentiert wird. In der Tat ist diese Qualität imaginär.

Trotz der offensichtlichen Verschlechterung der Qualität der drahtlosen Audioübertragung im Vergleich zur kabelgebundenen Version scheinen die modernen Gerätehersteller auf einen vollständigen Übergang zu drahtlosen Technologien ausgerichtet zu sein. Gleichzeitig werden Marketingtricks verwendet, um die Preiserhöhung zu rechtfertigen: Schutz vor dem Eintauchen des Telefons in Wasser (wie können Sie unter Wasser sprechen? Warum das Gerät ins Wasser fallen lassen?), Verwendung teurerer Codecs usw. Gleichzeitig wird das Potenzial des vorhandenen beliebten SBC-Codecs nicht voll ausgeschöpft.

Wir konnten weder eine Klärung des Bitratenlimits von 328 kbit / s von Google erhalten noch dieses Limit aufheben und die Option zum Aktivieren von Dual Channel im Bluetooth-Menü von den Entwicklern von Lineage OS hinzufügen.

Vielen Dank an alle, die bis zum Ende gelesen haben!

Einige Fortsetzungen, die durch die Diskussion in den Kommentaren und einen Platz in Bezug auf den LDAC-Codec verursacht wurden, sind hier .

Source: https://habr.com/ru/post/de433502/


All Articles