Comment modifier les piles Bluetooth sur Android pour améliorer considérablement la qualité audio Bluetooth

Avertissement: Ceci est 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 à la lettre.

Malgré le fait que les casques Bluetooth et l'audio Bluetooth sont devenus très populaires, c'est un problème pour les audiophiles, car il a été prouvé que Bluetooth réduisait la qualité audio, car des bits de l'information audio et des fréquences sont perdus dans l'air par la diffusion Bluetooth.

C’est pourquoi certains fabricants proposent des codecs aptX et LDAC afin d’améliorer la qualité du son par rapport au codec Bluetooth SBC standard pris en charge par tous les casques et la plupart des périphériques Bluetooth. Cependant, les appareils dotés des codecs aptX et LDAC sont beaucoup plus coûteux exiger des droits de licence, que le consommateur paie à long terme.

La faible qualité audio du codec Bluetooth SBC est due aux limitations artificielles de toutes les piles Bluetooth actuelles et à la configuration des écouteurs. Cette limitation peut être contournée sur tous les périphériques existants.

Si vous êtes intéressé par l'audio Bluetooth, nous vous montrerons à la fin de ce guide comment effectuer un vidage de 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 façons de lire votre sortie audio Bluetooth afin d'améliorer considérablement la qualité de sortie des codecs Bluetooth SBC standard. Veuillez lire attentivement ce guide dans son intégralité, car il est très instructif et contient de nombreux éléments différents. clignoter ou modifier, selon le modèle de votre appareil.

À la fin de ce guide, vous trouverez une liste des piles Bluetooth pré-appliquées pour de nombreux appareils Android populaires. Celles-ci peuvent être flashées lors de la récupération, comme vous le feriez pour tout autre fichier .zip flashable. Si aucun des appareils ne vous appartient, vous aurez suivre le guide pour modifier les piles Bluetooth sur Android.

Informations techniques courtes sur le codec SBC

SBC a beaucoup de paramètres différents qui sont négociés pendant la phase d'établissement 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 maximal et minimal utilisé dans le processus de quantification: généralement 2-53.

Le décodeur doit prendre en charge toute combinaison de ces paramètres. Encoder peut ne mettre en œuvre qu'une partie d'entre eux.

Les piles Bluetooth existantes négocient généralement le profil suivant: Joint stéréo, 8 bandes, 16 blocs, Loudness, bitpool 2..53. Ce profil code l’audio à 44, 1 kHz avec un débit 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 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 influencé de manière significative par d'autres paramètres: type de canal audio, nombre de bandes de fréquence, nombre de blocs audio. Vous pouvez augmenter le débit 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 le bitpool complet pour chaque canal. Forcer le périphérique à utiliser Dual Channel au lieu de Joint Stereo nous permettra d'obtenir un débit presque doublé au même pool de bits maximum, 617 kbps.

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

Ces valeurs fixes Bitpool et 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 binaires allant jusqu'à 512 kbps:

Le décodeur du SNK doit prendre en charge toutes les valeurs de pool de bits possibles qui n'entraînent pas un dépassement du débit binaire maximal. Ce profil limite le débit binaire maximal disponible à 320 kb / s pour les modes 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. Il est supposé que les casques modernes publiés après 2015 peuvent prendre en charge des débits allant 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 bitpool maximal, qui affecte directement le débit maximal. Mais ce n’est pas le principal problème, presque tous les casques limitent également la valeur maximale du bitpool à 53.

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

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

Comment tester sur un PC

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

Courir dans une VM

  • Télécharger Virtualbox et Virtualbox Extension Pack: //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 → Choisir le fichier du disque optique virtuel;
  • Sélectionnez téléchargé bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso;
  • Enregistrez et fermez la fenêtre des paramètres, démarrez la machine virtuelle;
  • Cliquez avec le bouton droit sur l'icône du câble USB en bas à droite, sélectionnez votre adaptateur Bluetooth.

Courir sur un PC

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

  • Gravez l’image sur un lecteur flash USB à l’aide de Etcher: //etcher.io/. Cette opération supprimera tous les fichiers existants sur un lecteur USB.
  • Éteignez le PC;
  • Insérez un 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 lancera la capture de données Bluetooth pour une analyse ultérieure. Ne fermez pas la fenêtre du terminal.
  • Basculez le casque en mode de couplage.
  • Cliquez sur la flèche située dans le coin supérieur droit, sélectionnez Icône Bluetooth → Paramètres Bluetooth.
  • Choisissez votre casque, attendez la fin du couplage et fermez la fenêtre.
  • Réglez le volume Ubuntu à environ 2/3. Diminuez également le volume à l’aide des boutons du micro-casque car il pourrait être très fort après l’appariement.
  • Ouvrez le dossier «music», lancez «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 transfert de données (btsnoop_hci.btsnoop sur le bureau) vers //btcodecs.valdikss.org.ru/

Vous pouvez écouter de la musique dans le dossier de musique ou télécharger la vôtre.

Il ne devrait y avoir aucun craquement, interruption audio ou autre distorsion du son dans les écouteurs. Si vous entendez un son de haute qualité, cela signifie que vos écouteurs prennent en charge l’audio avec un débit 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 un privilège root.

Comment capturer le dump de données Bluetooth sur Android

  1. Désactiver Bluetooth;
  2. Dans les paramètres du développeur, activez le commutateur «Activer le journal de surveillance Bluetooth HCI»;
  3. Activez Bluetooth, connectez votre casque en utilisant le menu Bluetooth (c'est important! N'autorisez pas la connexion automatique!);
  4. Jouer un échantillon audio court;
  5. Ouvrez les paramètres de développement, désactivez le commutateur «Enable Bluetooth HCI snoop log»;
  6. Vous devez créer /storage/emulated/0/btsnoop_hci.log ou /data/misc/bluetooth/logs/btsnoop_hci.log. S'il est manquant, ouvrez /etc/bluetooth/bt_stack.conf avec un éditeur de texte et affichez le chemin dans l'option BtSnoopFileName.

Il ne devrait y avoir aucun craquement, interruption audio ou autre distorsion du son dans les écouteurs. Si vous entendez un son de haute qualité avec la bibliothèque corrigé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. En particulier, si vous éteignez le casque ou que vous vous déconnectez après la liaison, il est important de vous connecter manuellement au casque à partir des paramètres Bluetooth. N'autorisez pas la connexion automatique!

Périphériques prenant en charge un débit SBC d'au moins 512 kbit / s

  • 1 PLUS 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épondez à ne pas prendre en charge le double canal, mais fonctionne s'il est forcé à 462 kbit / s. Ne est pas conforme à la spécification A2DP.)
  • Bluedio T5 (ne répond pas pour supporter Dual Channel, mais fonctionne si forcé. Ne se conforme pas à la spécification A2DP.)
  • Bluedio T6 (Répondez à ne pas prendre en charge Dual Channel, mais travaillez si forcé. Ne est pas conforme à la spécification A2DP. Adop Max puce 97220.)
  • Marshall Major II Bluetooth
  • Overdrive RealForce D1
  • Edifier W830BT
  • DEXP BT-250
  • Adaptateur Logitech BT
  • Unité principale automobile Noname (puce CSR8645)
  • Unité centrale automobile Sony DSX-A400BT

Périphériques prenant en charge le 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)

Périphériques qui ne fonctionnent pas avec des débits plus élevés ou Dual Channel

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

Pourquoi est-ce important: SBC 328k et 485k vs aptX

Contrairement aux idées reçues sur la qualité du son aptX, il peut dans certains cas produire une qualité audio inférieure à celle de SBC avec un débit binaire standard de 328k.

SBC alloue de manière dynamique les bits de quantification pour les bandes de fréquences, en agissant de bas en haut. Si tout le débit a été utilisé pour les fréquences basses et moyennes, les fréquences les plus hautes sont "coupées" (coupées).

aptX quantifie constamment les bandes de fréquence 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 de bits» vers des fréquences dont ils ont généralement besoin. Contrairement à SBC, aptX ne "coupera" pas les fréquences, mais leur ajoutera un bruit de quantification, réduisant la plage dynamique de l'audio et introduisant parfois des craquements. SBC, au contraire, "mange les détails" - élimine les zones les plus calmes.

En moyenne, comparé à SBC 328k, aptX génère 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 gagne parfois.

Considérons un cas particulier, un enregistrement de piano. Voici un spectrogramme:

La plupart de l'énergie réside dans les fréquences de 0 à 4 kHz et peut durer jusqu'à 10 kHz.

Le spectrogramme du fichier aptX fichier ressemble à ceci:

Voici SBC 328k:

On constate que le SBC 328k coupe périodiquement complètement la plage supérieure à 16 kHz et utilise tous les débits binaires 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 (plus la distorsion est claire):

Alors que le SBC 328k a introduit moins de distorsion, le signal est compris entre 0 et 10 kHz, et le reste a été supprimé:

Un débit de 485k pour SBC était suffisant pour sauvegarder l’ensemble de la gamme de fréquences, sans couper les bandes.

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

En passant à un SBC à haut débit, vous obtiendrez un son supérieur à aptX la plupart du temps, avec tous les écouteurs.

  • original_and_aptx.zip
  • sbc.zip

Comment modifier les piles Bluetooth sous Android 5 - 7

Ces modifications doivent être appliquées aux stocks de piles bluetooth Android Bluedroid (Android 5) et Fluorure (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: 4

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

La pile Bluetooth Android n'a pas seulement une limite de bitpool, mais également une limite de débit, 328 kbit / s. Si le casque prend en charge, par exemple, le bitpool 53 pour 48 kHz, Android le diminuera pour s’adapter à la limite de 328 kbit / s. Cela se produira APRÈS la négociation du codec, à l'étape du codage, ne tenez pas compte de 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ésactiver la limite MTU.

Cela 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 - (en-tête L2CAP de 4 octets + en-tête AVDTP de 12 octets) * / #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 un support Dual Channel dans A2DP SBC Source

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

Code:

 / * Fonctions de codec SBC SRC * / static const tA2DP_SBC_CIE a2dp_sbc_caps = A2DP_SBC_IE_SAMP_FREQ_44, / * samp_freq * / (A2DP_SBC_IE_CH_MD_MONO; 

ajoutez A2DP_SBC_IE_CH_MD_DUAL en mode_ch.

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

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

Code:

 / * Défaut SBC configuration codec * / 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:

 b_product_channel_mode (uint8_t ch_mode, tA2DP_SBC_CIE * p_result, btav_a2dp_codec_config_t *, c'est un élément 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éplacez-vous 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) Disable MTU limit

Cela 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 

Patchs Bluetooth Stacks (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 (Version 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, 29Mmb, 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

Des Articles Intéressants