Comment modifier les piles Bluetooth sur Android pour une qualité audio Bluetooth grandement améliorée



Essayez Notre Instrument Pour Éliminer Les Problèmes

Attention: il s'agit d'un guide très avancé qui implique la modification de vos piles Bluetooth sur Android - lisez ce guide dans son intégralité et suivez toutes les instructions exactement comme indiqué.



Malgré le fait que les casques Bluetooth et l'audio Bluetooth sont devenus très populaires, c'est un peu un problème pour les audiophiles car il a été prouvé que Bluetooth réduit la qualité audio, car des bits d'informations audio et de fréquences se perdent dans l'air via le streaming Bluetooth.



C'est pourquoi certains fabricants proposent des codecs aptX et LDAC, pour améliorer la qualité du son par rapport au codec Bluetooth SBC standard qui est pris en charge par tous les écouteurs et la plupart des appareils Bluetooth - cependant, les appareils avec les codecs aptX et LDAC sont beaucoup plus chers parce que ces codecs exiger des frais de licence, que le consommateur paie à long terme.



La faible qualité audio du codec Bluetooth SBC est causée par des limitations artificielles de toutes les piles Bluetooth actuelles et de la configuration des écouteurs, et cette limitation peut être contournée sur tous les appareils existants.

Si vous êtes intéressé par l'audio Bluetooth, nous vous montrerons à la fin de ce guide comment effectuer un vidage du journal audio Bluetooth et l'inspecter pour voir quel type de qualité audio et de fréquence vous obtenez du récepteur Bluetooth de votre Android.

La majorité de ce guide se concentrera sur quelques ajustements simples et sur des moyens de lire votre sortie audio Bluetooth pour améliorer considérablement la qualité de sortie des codecs Bluetooth SBC standard - veuillez lire attentivement ce guide complet car il est assez éducatif et il y a beaucoup de choses différentes pour flasher ou modifier, selon le modèle de votre appareil.



À la fin de ce guide, vous trouverez une liste de piles Bluetooth pré-corrigées pour de nombreux appareils Android populaires - elles peuvent être flashées lors de la récupération comme vous le feriez pour n'importe quel autre .zip flashable - si aucun des appareils ne vous appartient, vous aurez pour suivre le guide de modification des piles Bluetooth sur Android.

Informations techniques succinctes sur le codec SBC

SBC a beaucoup de paramètres différents qui sont négociés pendant la phase de configuration de la connexion:

  • Type et numéro de canal audio: Stéréo mixte, Stéréo, Double canal, Mono;
  • Nombre de bandes de fréquences: 4 ou 8;
  • Nombre de blocs audio dans un paquet: 4, 8, 12, 16;
  • Algorithme d'allocation de bits de quantification: Loudness, SNR;
  • Pool de bits maximum et minimum utilisé dans le processus de quantification: généralement 2-53.

Le décodeur doit prendre en charge toute combinaison de ces paramètres. L'encodeur ne peut implémenter qu'une partie d'entre eux.

Les piles Bluetooth existantes négocient généralement le profil suivant: Stéréo mixte, 8 bandes, 16 blocs, Loudness, bitpool 2..53. Ce profil code l'audio de 44,1 kHz avec un débit binaire de 328 kbps.

Le paramètre Bitpool affecte directement le débit dans le même profil: plus il est élevé, plus le débit binaire et donc la qualité sont élevés.

Cependant, le paramètre bitpool n'est pas lié à un profil spécifique. Le débit est également significativement affecté par d'autres paramètres: type de canal audio, nombre de bandes de fréquences, nombre de blocs audio. Vous pouvez augmenter le débit binaire indirectement en négociant des profils non standard, sans modifier le pool de bits.

Par exemple, Dual Channel code les canaux séparément, en utilisant la totalité du pool de bits pour chaque canal. Forcer l'appareil à utiliser Dual Channel au lieu de Joint Stereo nous permettra d'obtenir un débit binaire presque doublé au même bitpool maximal, 617 kbps.

Pour moi, je pense que bitpool devrait être une variable interne. C'est un défaut de conception de spécification A2DP que la valeur du pool de bits n'est pas liée à d'autres paramètres de codec et uniquement définie comme une valeur globale.

Ces valeurs fixes de Bitpool et de Bitrate proviennent des valeurs recommandées pour un son de haute qualité. Mais la recommandation n'est pas une excuse pour limiter le profil à ces valeurs.

La spécification A2DP v1.2, qui était active de 2007 à 2015, exige que tous les décodeurs fonctionnent correctement avec des débits allant jusqu'à 512 kbps:

Le décodeur de la SNK doit prendre en charge toutes les valeurs de pool binaire possibles qui n'entraînent pas un excès du débit binaire maximal. Ce profil limite le débit binaire maximal disponible à 320 kb / s pour le mono et à 512 kb / s pour les modes à deux canaux.

Dans la nouvelle version de la spécification, il n'y a pas de limitation de débit. On suppose que les écouteurs modernes sortis après 2015 peuvent prendre en charge les débits binaires jusqu'à 1000 kbps .

Pour une raison quelconque, toutes les piles Bluetooth actuellement testées (Linux (PulseAudio), Android, Blackberry et macOS) ont des restrictions artificielles du paramètre de bitpool maximal, ce qui affecte directement le débit maximal. Mais ce n'est pas le plus gros problème, presque tous les écouteurs limitent également la valeur maximale du pool de bits à 53.

La plupart des appareils fonctionnent correctement sur une pile Bluetooth modifiée avec un débit de 507 kbps, sans interruptions ni grésillements. Mais un tel débit ne sera jamais négocié dans des conditions normales, avec des piles Bluetooth en stock.

*** Requis pour les tests à l'aide des guides ci-dessous: test-bluetooth-dualchannel-ubuntu-18.04.1-desktop-amd64.iso.torrent

Comment tester sur un PC

Le test de compatibilité des écouteurs SBC à haut débit est le plus simple à réaliser sur un PC avec un adaptateur Bluetooth. J'ai préparé une image Ubuntu avec une pile Bluetooth modifiée, qui peut être exécutée comme dans une machine virtuelle (en connectant l'adaptateur Bluetooth en tant que périphérique USB à l'intérieur de la machine virtuelle, cela fonctionne également avec les adaptateurs intégrés aux ordinateurs portables) ou en démarrant à partir de la clé USB. Cette image utilise le profil suivant: Dual Channel, 8 bandes, 16 blocs, Loudness, bitpool 2..41, 44,1 kHz, qui fournit un débit binaire de 485 kbps.

Exécution dans une VM

  • Téléchargez Virtualbox et Virtualbox Extension Pack: https://www.virtualbox.org/wiki/Downloads;
  • Installez Virtualbox, démarrez-le;
  • Installez Extension Pack en utilisant Fichier → Préférences → Extensions;
  • Créez une nouvelle machine virtuelle: Linux, Ubuntu (64 bits), 1024 RAM. Ne créez pas de disque dur.
  • Accédez aux paramètres de la machine virtuelle, dans Stockage, choisissez Contrôleur: IDE, Vide, appuyez sur l'icône du CD → Choisissez le fichier du disque optique virtuel;
  • Sélectionnez bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso téléchargé;
  • Enregistrer et fermer la fenêtre des paramètres, démarrer la machine virtuelle;
  • Cliquez avec le bouton droit sur l'icône du câble USB en bas à droite, sélectionnez votre adaptateur Bluetooth;

Fonctionnement sur un PC

L'image prend en charge le démarrage BIOS / CSM et UEFI.

  • Gravez l'image sur une clé USB à l'aide d'Etcher: https://etcher.io/. Cette opération supprimera tous les fichiers existants sur une clé USB.
  • Éteignez le PC;
  • Insérez le lecteur flash USB, allumez le PC et appuyez sur le bouton d'ordre de démarrage (généralement Esc ou F12);
  • Sélectionnez votre clé USB.

Effectuer le test

  • (facultatif mais recommandé) Double-cliquez sur le script «Btsnoop Dump» sur le bureau. Il démarrera la capture de données Bluetooth pour une analyse ultérieure. Ne fermez pas la fenêtre du terminal.
  • Mettez le casque en mode d'appairage;
  • Cliquez sur la flèche dans le coin supérieur droit, sélectionnez l'icône Bluetooth → Paramètres Bluetooth;
  • Choisissez vos écouteurs, attendez que le couplage soit terminé et fermez la fenêtre;
  • Réglez le volume Ubuntu sur 2/3 environ. Réduisez également le volume à l'aide des boutons du casque, car il peut être très fort après le couplage.
  • Ouvrez le dossier «musique», lisez «testrecord1.flac»;
  • (facultatif mais recommandé) Fermez le lecteur, fermez la fenêtre du terminal. Cela arrêtera la capture de données.
  • (facultatif mais recommandé) Ouvrez le navigateur Firefox, téléchargez le vidage des données (btsnoop_hci.btsnoop sur le bureau) sur https://btcodecs.valdikss.org.ru/

Vous pouvez écouter d'autres musiques dans le dossier de musique ou télécharger la vôtre;

Il ne doit y avoir aucun crépitement, interruption audio ou autre distorsion sonore dans les écouteurs. Si vous entendez un son de bonne qualité, cela signifie que vos écouteurs prennent en charge l'audio avec un débit binaire de 485 kbps.

Comment tester sur un appareil Android

Pour tester à partir d'un smartphone ou d'une tablette Android, vous devez utiliser une pile Bluetooth modifiée, qui nécessite le privilège root.

Comment capturer le vidage de données Bluetooth sur Android

  1. Désactivez Bluetooth;
  2. Dans les paramètres du développeur, activez le commutateur «Activer le journal de surveillance Bluetooth HCI»;
  3. Activez Bluetooth, connectez-vous à votre casque à l'aide du menu Bluetooth (c'est important! N'autorisez pas la connexion automatique!);
  4. Jouez un court échantillon audio;
  5. Ouvrez les paramètres du développeur, désactivez le commutateur «Activer le journal de surveillance Bluetooth HCI»;
  6. Il doit y avoir /storage/emulated/0/btsnoop_hci.log ou /data/misc/bluetooth/logs/btsnoop_hci.log créé. S'il manque, ouvrez /etc/bluetooth/bt_stack.conf avec un éditeur de texte et voyez le chemin dans l'option BtSnoopFileName.

Il ne doit y avoir aucun crépitement, interruption audio ou autre distorsion sonore dans les écouteurs. Si vous entendez un son de bonne qualité avec la bibliothèque patchée, cela signifie que vos écouteurs prennent en charge l'audio avec un débit binaire de 512 kbps.

Veuillez suivre attentivement l'algorithme ci-dessus. Surtout, si vous éteignez le casque ou que vous vous déconnectez après le couplage, il est important de vous connecter manuellement au casque à partir des paramètres Bluetooth, n'autorisez pas la connexion automatique!

Appareils prenant en charge au moins 512 kbit / s SBC

  • 1 PLUS D'iBFree
  • JBL Everest 310
  • JBL Everest 700
  • Skullcandy HESH 3
  • Sony WI-C400
  • Sony MDR-1ABT
  • Sony MDR-ZX770BT
  • Sony MDR-XB650BT
  • Sony MDR-XB950B1
  • Sony SBH50
  • Bluedio T4s (Bitpool max 39. Répond pour ne pas prendre en charge le double canal, mais fonctionne s'il est forcé, 462 kbit / s. Non conforme à la spécification A2DP.)
  • Bluedio T5 (Répond pour ne pas prendre en charge le double canal, mais fonctionne s'il est forcé. Non conforme à la spécification A2DP.)
  • Bluedio T6 (Répond pour ne pas prendre en charge le double canal, mais fonctionne s'il est forcé. Non conforme à la spécification A2DP. Adoptez la puce Max 97220.)
  • Marshall Major II Bluetooth
  • Overdrive RealForce D1
  • Edifier W830BT
  • DEXP BT-250
  • Adaptateur Logitech BT
  • Unité principale automobile Noname (puce CSR8645)
  • Unité principale automobile Sony DSX-A400BT

Appareils prenant en charge SBC supérieur à 512 kbit / s

  • JBL Everest 310 (617 à 660 kbit / s)
  • Sony WI-C400 (576 kbit / s)
  • Sony MDR-ZX770BT (617 à 660 kbit / s)
  • Marshall Major II Bluetooth (617-660 kbit / s)
  • Overdrive RealForce D1 (730 kbit / s, double canal, 4 sous-bandes)

Appareils qui ne fonctionnent pas avec des débits binaires plus élevés ou deux canaux

  1. Harper HB-202 (crépitements; puce Beken BK3256)
  2. Sony Ericsson MW600 (distorsion haute fréquence, crépitements; appareil de 2009)

Pourquoi c'est important: SBC 328k et 485k vs aptX

Contrairement à la croyance populaire sur la qualité sonore d'aptX, dans certains cas, il peut produire une qualité audio inférieure à celle du SBC avec un débit binaire standard de 328k.

SBC alloue dynamiquement des bits de quantification pour les bandes de fréquences, agissant sur une base «de bas en haut». Si tout le débit binaire a été utilisé pour les fréquences inférieures et moyennes, les fréquences supérieures sont «coupées» (silencieuses).

aptX quantifie constamment les bandes de fréquences avec le même nombre de bits, ce qui en fait un codec à débit constant: 352 kbps pour 44,1 kHz, 384 kbps pour 48 kHz. Il ne peut pas «transférer des bits» vers des fréquences qui y sont le plus souvent nécessaires. Contrairement à SBC, aptX ne «coupera» pas les fréquences, mais y ajoutera du bruit de quantification, réduisant la plage dynamique de l'audio et introduisant parfois des craquements. SBC, au contraire, «mange les détails» - rejette les zones les plus calmes.

En moyenne, comparé au SBC 328k, aptX fait moins de distorsion dans la musique avec une large plage de fréquences, mais sur la musique avec une plage de fréquences étroite et une large plage dynamique SBC 328k l'emporte parfois.

Prenons un cas particulier, un enregistrement pour piano. Voici un spectrogramme:


La plus grande énergie réside dans les fréquences 0-4 kHz et dure jusqu'à 10 kHz.
Le spectrogramme du fichier fichier aptX ressemble à ceci:

Voici SBC 328k:

On peut voir que le SBC 328k coupe périodiquement complètement la plage au-dessus de 16 kHz, et utilise tous les débits disponibles pour les plages inférieures à cette valeur. Cependant, aptX a introduit plus de distorsions dans le spectre de fréquences audibles par l'oreille humaine, ce qui peut être vu sur le spectrogramme original soustrait du spectrogramme aptX (le plus clair, le plus de distorsion):


Alors que le SBC 328k a introduit moins de distorsion, le signal dans la plage de 0 à 10 kHz, et le reste a été coupé:

Le débit binaire 485k pour SBC était suffisant pour sauvegarder toute la gamme de fréquences, sans couper les bandes.

Le SBC 485k sur cet échantillon audio est bien meilleur que aptX dans la plage de 0 à 15 kHz, et avec une différence plus petite mais toujours perceptible - à 15-22 kHz (le plus sombre, le moins de distorsion):

En passant à un SBC à haut débit, vous obtiendrez un son supérieur à aptX la plupart du temps, sur n'importe quel casque.

  • original_and_aptx.zip
  • sbc.zip

Comment modifier les piles Bluetooth sur Android 5-7

Ces modifications doivent être appliquées aux piles bluetooth Android Bluedroid (Android 5) et Fluoride (Android 6-7). La pile modifiée par Qualcomm n'est pas prise en charge.

Remplacez Joint Stereo par Dual Channel dans la configuration SBC standard

android / plateforme / externe / bluetooth / bluedroid / btif / co / bta_av_co.c: 99

Code:

const tA2D_SBC_CIE btif_av_sbc_default_config = {BTIF_AV_SBC_DEFAULT_SAMP_FREQ, / * samp_freq * / A2D_SBC_IE_CH_MD_JOINT, / * ch_mode * / A2D_SBC_IE_BLOCKS_16, / * block_len * / A2D_SBC_IE_SUBBAND_8, / * num_subbands * / A2D_SBC_IE_ALLOC_MD_L, / * alloc_mthd * / BTA_AV_CO_SBC_MAX_BITPOOL, / * max_bitpool * / A2D_SBC_IE_MIN_BITPOOL / * min_bitpool * /};

Remplacez A2D_SBC_IE_CH_MD_JOINT par A2D_SBC_IE_CH_MD_DUAL.

Augmenter la priorité Dual Channel

android / plateforme / externe / bluetooth / bluedroid / btif / co / bta_av_co.c: 41

Code:

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; Déplacer if avec A2D_SBC_IE_CH_MD_DUAL vers le haut.
  1. Désactiver ou augmenter la restriction de débit

La pile Bluetooth Android a non seulement une limite de bitpool, mais également une limite de débit binaire, 328 kbit / s. Si le casque prend en charge, par exemple, bitpool 53 pour 48 kHz, Android diminuera le bitpool pour s'adapter à la limite de 328 kbit / s. Cela se produira APRÈS la négociation du codec, au stade du codage, ne prenez pas en compte la valeur du pool de bits dans le paquet Bluetooth SetCapabilities.

Android / plateforme / externe / bluetooth / bluedroid / btif / src / btif_media_task.c: 172

Code:

#define DEFAULT_SBC_BITRATE 328

Remplacez par 512.

  1. (pour les expériences uniquement) Désactivez la limite de MTU.

Ceci est nécessaire pour les débits supérieurs à ~ 580 kbit / s.

btif / src / btif_media_task.c: 174

Code:

/ * Taille de la charge utile 2DH5 de 679 octets - (4 octets d'en-tête L2CAP + 12 octets d'en-tête AVDTP) * / #define MAX_2MBPS_AVDTP_MTU 663

Comment modifier les piles Bluetooth sur Android 8-9

Ces modifications n’ont pas été testées, mais devraient fonctionner.

Ajouter la prise en charge du double canal dans la source A2DP SBC

/platform/system/bt/stack/a2dp/a2dp_sbc.cc:55

Code:

/ * Capacités du codec SBC SRC * / static const tA2DP_SBC_CIE a2dp_sbc_caps = A2DP_SBC_IE_BLOCKS_8;

ajoutez A2DP_SBC_IE_CH_MD_DUAL dans ch_mode.

Remplacer Joint Stereo par Dual Channel dans la configuration par défaut

/platform/system/bt/stack/a2dp/a2dp_sbc.cc:82

Code:

/ * Configuration codec par défaut SBC * / const tA2DP_SBC_CIE a2dp_sbc_default_config = {A2DP_SBC_IE_SAMP_FREQ_44, / * samp_freq * / A2DP_SBC_IE_CH_MD_JOINT, / * ch_mode * / A2DP_SBC_IE_BLOCKS_16, / * block_len * / A2DP_SBC_IE_SUBBAND_8, / * num_subbands * / A2DP_SBC_IE_ALLOC_MD_L, / * alloc_method * / A2DP_SBC_IE_MIN_BITPOOL, / * min_bitpool * / A2DP_SBC_MAX_BITPOOL, / * max_bitpool * / BTAV_A2DP_CODEC_BITS_PER_SAMPLE_16 / * bits_per_sample * /};

Remplacez A2DP_SBC_IE_CH_MD_JOINT par A2DP_SBC_IE_CH_MD_DUAL.

Augmenter la priorité Dual Channel

/platform/system/bt/stack/a2dp/a2dp_sbc.cc:1155

Code:

booléen statique select_best_channel_mode (uint8_t ch_mode, tA2DP_SBC_CIE * p_result, btav_a2dp_codec_config_t * p_codec_config) {if (ch_mode & A2DP_SBC_IE_CH_MD_JOINT) {p_codec_config) {if (ch_mode & A2DP_SBC_IE_CH_MD_JOINT) {p_codec_config) {if (ch_mode & A2DP_SBC_IE_CH_MD_JOINT) p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; retourne vrai; } if (ch_mode & A2DP_SBC_IE_CH_MD_STEREO) {p_result-> ch_mode = A2DP_SBC_IE_CH_MD_STEREO; p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; retourne vrai; } if (ch_mode & A2DP_SBC_IE_CH_MD_DUAL) {p_result-> ch_mode = A2DP_SBC_IE_CH_MD_DUAL; p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; retourne vrai; } if (ch_mode & A2DP_SBC_IE_CH_MD_MONO) {p_result-> ch_mode = A2DP_SBC_IE_CH_MD_MONO; p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_MONO; retourne vrai; } return false; }

Déplacer if avec A2DP_SBC_IE_CH_MD_DUAL vers le haut.

Augmenter la limite de débit

/platform/system/bt/stack/a2dp/a2dp_sbc_encoder.cc:42

Code:

#define A2DP_SBC_DEFAULT_BITRATE 328

Remplacez par 512.

  1. (pour les expériences uniquement) Désactiver la limite de MTU

Ceci est nécessaire pour les débits supérieurs à ~ 580 kbit / s.

/platform/system/bt/stack/a2dp/a2dp_sbc_encoder.cc:47

Code:

#define MAX_2MBPS_AVDTP_MTU 663

Piles Bluetooth corrigées (Flashable)

  • Le Max 2 Oreo Patched.zip
  • LeEco Cool Changer S1 EUI_5.8.19S.zip
  • Leeco LE2 (EUI 5.9.26s, Android 6) .zip
  • Xiaomi Mi Note (Miui 9 Miui.su usnkreal v8.4.12, Android 6.0.1) .zip
  • Xiaomi mi note 3 (MIUI 9, Android 7) .zip
  • Xiaomi Mi4c (Android 7.0 NRD90M, MIUI-9.5 9.5.1.0 (NXKCNFA)). Zip
  • Xiaomi MI5s (MIUI Global 9.6.1.0, Android 7) .zip
  • Xiaomi Redmi 3s (android 6.01, mmb29m, miui global 9.6.1.0) .zip
  • Xiaomi Redmi 4 (MiuiPro 10 8.8.2, Android 6.0.1, MMB29M) .zip
  • Xiaomi Redmi 4 Prime.zip
  • Xiaomi Redmi 4 pro (MIUI 9, miuipro 8.4.26) .zip
  • Xiaomi Redmi Note 3 (Resurrection Remix Android 7.1.2_r36) .zip
  • Redmi Note 4x (Masik Premium, Android 7.0) .zip
  • Asus Zoom (Android 5, 2.26.40.108_20160520) .zip
  • Le Max 2 Oreo Patched.zip
  • Huawei P9 (Android 7) .zip
  • Samsung Galaxy S4 LTE GT-I9505 (Android 7.1.2; LineageOS 14.1-20180615-NIGHTLY-jfltexx) .zip
  • Zip *: français
  • Le Max 2 Oreo Patched.zip
10 minutes de lecture