Slik endrer du Bluetooth-stabler på Android for kraftig forbedret Bluetooth-lydkvalitet



Prøv Instrumentet Vårt For Å Eliminere Problemer

Advarsel: Dette er en svært avansert guide som innebærer endring av Bluetooth-stabler på Android - les denne guiden i sin helhet og følg alle instruksjonene nøyaktig som gitt.



Til tross for at Bluetooth-hodetelefoner og Bluetooth-lyd har blitt ganske populære, er det litt av et problem for lydfiler fordi Bluetooth har vist seg å redusere lydkvaliteten, ettersom biter av lydinformasjonen og frekvensene går tapt i luften gjennom Bluetooth-streaming.



Dette er grunnen til at noen produsenter legger ut aptX- og LDAC-kodeker for å forbedre lydkvaliteten over standard SBC Bluetooth-kodeken som støttes av alle hodetelefoner og de fleste Bluetooth-enheter - enheter med aptX- og LDAC-kodeker er imidlertid mye dyrere fordi disse kodeksene kreve lisensavgifter, som forbrukeren betaler på sikt.



Den lave lydkvaliteten til SBC Bluetooth-kodeken er forårsaket av kunstige begrensninger av alle nåværende Bluetooth-stabler og hodetelefoners konfigurasjon, og denne begrensningen kan omgåes på eksisterende enheter.

Hvis du er interessert i Bluetooth-lyd, viser vi deg på slutten av denne veiledningen hvordan du tar en Bluetooth-lydloggdump og inspiserer den for å se hva slags lydkvalitet og frekvens du får fra Android-Bluetooth-mottakeren.

Flertallet av denne guiden vil fokusere på noen få enkle tilpasninger og måter å lese Bluetooth-lydutgangen din for å forbedre utgangskvaliteten til standard SBC Bluetooth-kodeker. Les hele veiledningen nøye, siden den er ganske lærerik, og det er mange forskjellige ting for å blinke eller justere, avhengig av enhetsmodellen.



På denne slutten av denne guiden er en liste over forhåndsoppdaterte Bluetooth-stabler for mange populære Android-enheter - disse kan bli blinket i gjenoppretting som du ville gjort med andre flashbare .zip - hvis ingen av enhetene tilhører deg, vil du ha for å følge guiden for endring av Bluetooth-stabler på Android.

Kort teknisk informasjon om SBC-kodeken

SBC har mange forskjellige parametere som er forhandlet under tilkoblingsfasen:

  • Audio kanaltype og nummer: Joint Stereo, Stereo, Dual Channel, Mono;
  • Antall frekvensbånd: 4 eller 8;
  • Antall lydblokker i en pakke: 4, 8, 12, 16;
  • Kvantiseringsalgoritme for bitallokering: Loudness, SNR;
  • Maksimum og minimum bitpool brukt i kvantiseringsprosess: vanligvis 2-53.

Dekoderen kreves for å støtte enhver kombinasjon av disse parametrene. Encoder kan bare implementere en del av dem.

Eksisterende Bluetooth-stabler forhandler vanligvis følgende profil: Joint Stereo, 8 bånd, 16 blokker, Loudness, bitpool 2..53. Denne profilen koder for 44,1 kHz lyd med en bithastighet på 328 kbps.

Bitpool-parameter påvirker direkte bithastigheten i samme profil: jo høyere den er, jo høyere bithastighet og dermed kvaliteten.

Imidlertid er bitpool-parameteren ikke bundet til en bestemt profil. Bithastigheten påvirkes også betydelig av andre parametere: lydkanaltype, antall frekvensbånd, antall lydblokker. Du kan øke bithastigheten indirekte ved å forhandle om ikke-standardprofiler, uten å endre bitpool.

Dual Channel koder for eksempel kanaler hver for seg, og bruker hele bitpoolen for hver kanal. Å tvinge enheten til å bruke Dual Channel i stedet for Joint Stereo vil gi oss nesten doblet bithastighet ved samme maksimale bitpool, 617 kbps.

For meg føles det at bitpool bør være en intern variabel. Det er en A2DP-spesifikasjonsdesignfeil at bitpool-verdien ikke er bundet til andre kodekparametere og bare definert som en global verdi.

Disse faste Bitpool- og Bitrate-verdiene stammer fra anbefalte verdier for lyd av høy kvalitet. Men anbefalingen er ikke en unnskyldning for å begrense profilen til disse verdiene.

A2DP-spesifikasjon v1.2, som var aktiv fra 2007 til 2015, krever at alle dekodere fungerer riktig med bithastigheter på opptil 512 kbps:

Dekoderen til SNK skal støtte alle mulige bitpoolverdier som ikke resulterer i overskudd av maksimal bithastighet. Denne profilen begrenser den tilgjengelige maksimale bithastigheten til 320 kb / s for mono, og 512 kb / s for tokanalsmodi.

I den nye versjonen av spesifikasjonen er det ingen bithastighetsbegrensning. Det antas at moderne hodetelefoner utgitt etter 2015 kan støtte bitrater opptil 1000 kbps .

Av en eller annen grunn har alle for tiden testede Bluetooth-stabler (Linux (PulseAudio), Android, Blackberry og macOS) kunstige begrensninger på maksimal bitpool-parameter, som direkte påvirker maksimal bithastighet. Men dette er ikke det største problemet, nesten alle hodetelefoner begrenser også maksimal bitpool-verdi til 53.

De fleste enheter fungerer bra på en modifisert Bluetooth-stack med en bithastighet på 507 kbps, uten avbrudd og knitring. Men en slik bitrate vil aldri bli forhandlet under normale forhold, med Bluetooth-stabler.

*** Nødvendig for testing med guider nedenfor: bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso.torrent

Hvordan teste på en PC

SBC-hodetelefonkompatibilitetstest med høy bithastighet er den enkleste å utføre på PC-en med en Bluetooth-adapter. Jeg har forberedt Ubuntu-bilde med en modifisert Bluetooth-stabel, som kan kjøres som i en virtuell maskin (ved å koble Bluetooth-adapteren som en USB-enhet inne i den virtuelle maskinen, fungerer den også med adaptere innebygd i bærbare datamaskiner) eller ved å starte fra USB-minnepinnen. Dette bildet bruker følgende profil: Dual Channel, 8 bånd, 16 blokker, Loudness, bitpool 2..41, 44,1 kHz, som gir 485 kbps bithastighet.

Kjører i en VM

  • Last ned Virtualbox og Virtualbox Extension Pack: https://www.virtualbox.org/wiki/Downloads;
  • Installer Virtualbox, start den;
  • Installer Extension Pack ved hjelp av File → Preferences → Extensions;
  • Opprett ny virtuell maskin: Linux, Ubuntu (64-bit), 1024 RAM. Ikke opprett en harddisk.
  • Naviger til innstillinger for virtuell maskin, i Lagring velger du Kontroller: IDE, Tom, trykk på CD-ikon → Velg virtuell optisk diskfil;
  • Velg nedlastet bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso;
  • Lagre og lukk innstillingsvinduet, start virtuell maskin;
  • Høyreklikk på USB-kabelikonet nederst til høyre, velg Bluetooth-adapteren;

Kjører på en PC

Bildet støtter oppstart av BIOS / CSM og UEFI.

  • Brenn bildet til en USB-flashstasjon ved hjelp av Etcher: https://etcher.io/. Denne operasjonen vil slette alle eksisterende filer på en USB-stasjon.
  • Slå av PCen;
  • Sett inn USB-minnepinne, slå på PCen og trykk på startordreknappen (vanligvis Esc eller F12);
  • Velg USB-flashstasjonen.

Utfører testen

  • (valgfritt men anbefalt) Dobbeltklikk på “Btsnoop Dump” -skriptet på skrivebordet. Det vil starte Bluetooth-datafangst for senere analyse. Ikke lukk terminalvinduet.
  • Sett hodetelefonene i paringsmodus;
  • Klikk på pilen øverst til høyre, velg Bluetooth-ikon → Bluetooth-innstillinger;
  • Velg hodetelefonene dine, vent til paringen er fullført, og lukk vinduet.
  • Sett Ubuntu-volumet til omtrent 2/3. Senk også volumet ved hjelp av hodetelefonknappene, da det kan være veldig høyt etter paring.
  • Åpne 'musikk' -mappen, spill 'testrecord1.flac';
  • (valgfritt men anbefalt) Lukk spiller, lukk terminalvinduet. Dette vil stoppe datafangst.
  • (valgfritt men anbefalt) Åpne Firefox-nettleser, last opp datadump (btsnoop_hci.btsnoop på skrivebordet) til https://btcodecs.valdikss.org.ru/

Du kan lytte til annen musikk i musikkmappen, eller laste opp din egen;

Det skal ikke være noen knitring, lydavbrudd eller annen lydforvrengning i hodetelefonene. Hvis du hører en god lyd av høy kvalitet, betyr det at hodetelefonene dine støtter lyd med en bithastighet på 485 kbps.

Hvordan teste på Android-enhet

For å teste fra Android-smarttelefon eller nettbrett må du bruke endret Bluetooth-stack, som krever root-privilegium.

Hvordan fange Bluetooth-datadump på Android

  1. Slå av Bluetooth;
  2. I utviklerinnstillinger aktiverer du 'Aktiver Bluetooth HCI snoop log' -bryteren;
  3. Slå på Bluetooth, koble til headsettet ditt ved hjelp av Bluetooth-menyen (dette er viktig! Ikke tillat automatisk tilkobling!);
  4. Spill kort lydprøve;
  5. Åpne utviklerinnstillinger, deaktiver bryteren “Aktiver Bluetooth HCI snoop log”.
  6. Det bør være /storage/emulated/0/btsnoop_hci.log eller /data/misc/bluetooth/logs/btsnoop_hci.log opprettet. Hvis den mangler, åpner du /etc/bluetooth/bt_stack.conf med et tekstredigeringsprogram og ser banen i BtSnoopFileName-alternativet.

Det skal ikke være noen knitring, lydavbrudd eller annen lydforvrengning i hodetelefonene. Hvis du hører en god lyd av høy kvalitet med det oppdaterte biblioteket, betyr det at hodetelefonene dine støtter lyd med en bithastighet på 512 kbps.

Følg algoritmen ovenfor. Spesielt hvis du slår av hodetelefonene eller kobler fra etter paring, er det viktig å koble til hodetelefonene manuelt fra Bluetooth-innstillingene, ikke tillat automatisk tilkobling!

Enheter som støtter minst 512 kbit / s SBC

  • 1 MER 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. Svar på ikke støtte Dual Channel, men arbeid hvis tvunget, 462 kbit / s. Oppfyller ikke A2DP-spesifikasjonen.)
  • Bluedio T5 (Svar på ikke støtte Dual Channel, men arbeid hvis tvunget. Oppfyller ikke A2DP-spesifikasjonen.)
  • Bluedio T6 (Svar på å ikke støtte Dual Channel, men arbeid hvis den er tvunget. Oppfyller ikke A2DP-spesifikasjonen. Vedta Max 97220-brikke.)
  • Marshall Major II Bluetooth
  • Overdrive RealForce D1
  • Edifier W830BT
  • DEXP BT-250
  • Logitech BT-adapter
  • Noname bilhodeenhet (CSR8645-brikke)
  • Sony DSX-A400BT bil hovedenhet

Enheter som støtter SBC høyere enn 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, dobbeltkanal, 4 underbånd)

Enheter som ikke fungerer med høyere bithastigheter eller Dual Channel

  1. Harper HB-202 (knitrende; Beken BK3256-chip)
  2. Sony Ericsson MW600 (høyfrekvent forvrengning, knitring; enhet fra 2009)

Hvorfor dette er viktig: SBC 328k og 485k vs aptX

I motsetning til populær tro på aptX lydkvalitet, kan det i noen tilfeller gi dårligere lydkvalitet enn SBC med en standard 328k bithastighet.

SBC tildeler dynamisk kvantiseringsbiter for frekvensbånd, og fungerer på en 'bunn-til-topp' -basis. Hvis hele bithastigheten ble brukt for nedre og midtre frekvenser, blir de øvre frekvensene 'avskåret' (stille).

aptX kvantiserer frekvensbånd med samme antall bits konstant, noe som gjør det til en konstant bithastighetskodek: 352 kbps for 44,1 kHz, 384 kbps for 48 kHz. Det kan ikke 'overføre biter' til frekvenser som det meste er behov for i dem. I motsetning til SBC vil aptX ikke 'kutte' frekvenser, men vil legge til kvantiseringsstøy til dem, redusere det dynamiske lydområdet og noen ganger introdusere knitrer. SBC tvert imot “spiser detaljene” - forkaster de roligste områdene.

I gjennomsnitt sammenlignet med SBC 328k, gir aptX mindre forvrengning i musikk med et bredt frekvensområde, men på musikk med et smalt frekvensområde og et bredt dynamisk område vinner SBC 328k noen ganger.

La oss se på et spesielt tilfelle, et pianoopptak. Her er et spektrogram:


Mest energi ligger i 0-4 kHz frekvensene, og varer opptil 10 kHz.
Spektrogrammet til filen aptX-fil ser slik ut:

Her er SBC 328k:

Det kan sees at SBC 328k periodisk fullstendig avskåret området over 16 kHz, og brukte alle tilgjengelige bitrater for områder under denne verdien. Imidlertid introduserte aptX flere forvrengninger i frekvensspektret som høres av det menneskelige øret, som kan sees på det subtraherte originale spektrogrammet fra aptX-spektrogrammet (jo lysere, jo mer forvrengning):


Mens SBC 328k har introdusert mindre forvrengning, er signalet i området 0 til 10 kHz, og resten har blitt utført:

Bithastighet 485k for SBC var nok til å lagre hele frekvensområdet uten å kutte av båndene.

SBC 485k på denne lydprøven er mye bedre enn aptX i området 0-15 kHz, og med en mindre, men likevel merkbar forskjell - ved 15-22 kHz (jo mørkere, desto mindre forvrengning):

Når du bytter til en SBC med høy bithastighet, får du en lyd bedre enn aptX mesteparten av tiden, på alle hodetelefoner.

  • original_and_aptx.zip
  • sbc.zip

Slik endrer du Bluetooth-stakkene på Android 5-7

Disse modifikasjonene bør brukes på lager Android Bluetooth-stabler Bluedroid (Android 5) og Fluoride (Android 6-7). Qualcomm-modifisert stabel støttes ikke.

Erstatt Joint Stereo med Dual Channel i standard SBC-konfigurasjon

android / plattform / ekstern / bluetooth / bluedroid / btif / co / bta_av_co.c: 99

Kode:

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 * /};

Erstatt A2D_SBC_IE_CH_MD_JOINT med A2D_SBC_IE_CH_MD_DUAL.

Øk Dual Channel-prioritet

android / plattform / ekstern / bluetooth / bluedroid / btif / co / bta_av_co.c: 41

Kode:

hvis (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT; annet hvis (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; annet hvis (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; annet hvis (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO; Flytt hvis med A2D_SBC_IE_CH_MD_DUAL til toppen.
  1. Deaktiver eller øk bithastighetsbegrensningen

Android Bluetooth-stack har ikke bare bitpoolgrense, men også bitrate-grense, 328 kbit / s. Hvis hodetelefonene støtter for eksempel bitpool 53 for 48 kHz, vil Android redusere bitpoolen for å passe inn i grensen på 328 kbit / s. Dette vil skje ETTER kodekforhandlinger, på kodingsstadiet, ikke ta hensyn til bitpool-verdien i Bluetooth SetCapabilities-pakken.

android / plattform / ekstern / bluetooth / bluedroid / btif / src / btif_media_task.c: 172

Kode:

#define DEFAULT_SBC_BITRATE 328

Bytt ut med 512.

  1. (kun for eksperimenter) Deaktiver MTU-grense.

Dette kreves for bithastigheter høyere enn ~ 580 kbit / s.

174. btif / src / btif_media_task.c: 174

Kode:

/ * 2DH5 nyttelaststørrelse på 679 byte - (4 byte L2CAP Header + 12 byte AVDTP Header) * / #define MAX_2MBPS_AVDTP_MTU 663

Slik endrer du Bluetooth-stabler på Android 8-9

Disse modifikasjonene er ikke testet, men skal fungere.

Legg til Dual Channel-støtte i A2DP SBC-kilde

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

Kode:

/ * SBC SRC-kodekapasiteter * / statisk konst tA2DP_SBC_CIE a2dp_sbc_caps = A2DP_SBC_IE_BLOCKS_8;

legg til A2DP_SBC_IE_CH_MD_DUAL i ch_mode.

Erstatt Joint Stereo med Dual Channel i standardkonfigurasjon

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

Kode:

/ * Standard SBC kodek konfigurasjon * / 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 * /};

Erstatt A2DP_SBC_IE_CH_MD_JOINT med A2DP_SBC_IE_CH_MD_DUAL.

Øk Dual Channel-prioritet

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

Kode:

statisk bool 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_result_DE_CH_MOD_CH_M p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; returner sant; } hvis (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; returner sant; } hvis (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; returner sant; } hvis (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; returner sant; } returner falsk; }

Flytt hvis med A2DP_SBC_IE_CH_MD_DUAL til toppen.

Øk bithastighetsgrensen

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

Kode:

#definer A2DP_SBC_DEFAULT_BITRATE 328

Bytt ut med 512.

  1. (kun for eksperimenter) Deaktiver MTU-grense

Dette kreves for bithastigheter høyere enn ~ 580 kbit / s.

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

Kode:

#define MAX_2MBPS_AVDTP_MTU 663

Patchede Bluetooth-stabler (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
  • glidelås
  • Le Max 2 Oreo Patched.zip
10 minutter lest