Cara Ubah Suai Bluetooth pada Android untuk Kualiti Audio Bluetooth yang Dipertingkatkan

Amaran: Ini adalah panduan yang sangat maju yang melibatkan mengubah suai stack Bluetooth anda ke Android - baca panduan ini secara keseluruhan dan ikuti semua arahan sama seperti yang diberikan.

Walaupun Bluetooth set kepala dan audio Bluetooth telah menjadi agak popular, ia adalah sedikit isu untuk audiophile kerana Bluetooth telah terbukti untuk mengurangkan kualiti audio, kerana bit maklumat audio dan frekuensi hilang di udara melalui penstriman Bluetooth.

Inilah sebabnya mengapa sesetengah pengeluar meletakkan codec aptX dan LDAC, untuk meningkatkan kualiti bunyi di atas standard codec SBC Bluetooth yang disokong oleh semua fon kepala dan kebanyakan peranti Bluetooth - bagaimanapun, peranti dengan codec aptX dan LDAC lebih mahal kerana codec ini memerlukan yuran pelesenan, yang pengguna bayar dalam jangka masa panjang.

Kualiti audio rendah codec SBC Bluetooth disebabkan oleh pembatasan tiruan semua storan Bluetooth dan konfigurasi fon kepala semasa, dan batasan ini boleh dielakkan pada mana-mana peranti yang sedia ada.

Jika anda berminat dengan audio Bluetooth, kami akan menunjukkan kepada anda di hujung panduan ini bagaimana untuk mengambil dump log audio Bluetooth dan memeriksanya untuk melihat jenis kualiti dan kekerapan audio yang anda terima daripada penerima Bluetooth Android anda.

Majoriti panduan ini akan memberi tumpuan kepada beberapa tweak mudah dan cara untuk membaca output audio Bluetooth anda untuk meningkatkan kualiti output standard codec SBC Bluetooth - sila baca keseluruhan panduan ini dengan berhati-hati kerana ia cukup pendidikan dan terdapat banyak perkara yang berbeza untuk berkelip atau tweak, bergantung pada model peranti anda.

Pada akhir panduan ini adalah senarai susunan bluetooth yang telah disusun pra-patung untuk banyak peranti Android yang popular - ini boleh dijadikan sebagai pemulihan seperti yang anda lakukan .zip lain - jika tiada peranti milik anda, anda akan mempunyai untuk mengikuti panduan untuk mengubah susunan Bluetooth pada Android.

Maklumat teknikal ringkas mengenai codec SBC

SBC mempunyai banyak parameter yang berbeza yang dirundingkan semasa fasa penyambungan sambungan:

  • Jenis dan nombor saluran audio: Stereo Bersama, Stereo, Dual Channel, Mono;
  • Bilangan jalur kekerapan: 4 atau 8;
  • Bilangan blok audio dalam satu paket: 4, 8, 12, 16;
  • Algoritma pengagihan bit kuantisasi: Kuat, SNR;
  • Kolam minimum maksimum dan minimum yang digunakan dalam proses kuantisasi: biasanya 2-53.

Decoder diperlukan untuk menyokong sebarang gabungan parameter ini. Pengekod boleh melaksanakan hanya sebahagian daripada mereka.

Susunan bluetooth sedia ada biasanya merundingkan profil berikut: Stereo Bersama, 8 band, 16 blok, Loudness, bitpool 2..53. Profil ini mengkodekan audio 44.1 kHz dengan bitrate sebanyak 328 kbps.

Parameter Bitpool secara langsung memberi kesan kepada bitrate dalam profil yang sama: semakin tinggi, semakin tinggi bitrate, dan karenanya kualiti.

Walau bagaimanapun, parameter bitpool tidak terikat pada profil tertentu. Bitrate juga dipengaruhi dengan ketara oleh parameter lain: jenis saluran audio, bilangan jalur frekuensi, bilangan blok audio. Anda boleh meningkatkan kadar bit secara tidak langsung dengan merundingkan profil tidak standard, tanpa menukar bitpool.

Sebagai contoh, Dual Channel menyusun saluran secara berasingan, menggunakan seluruh bitpool untuk setiap saluran. Memaksa peranti untuk menggunakan Dual Channel dan bukan Stereo Bersama akan membawa kita hampir dua kali ganda bitrate pada bitpool maksimum yang sama, 617 kbps.

Kepada saya merasakan bahawa bitpool harus menjadi pemboleh ubah dalaman. Ia adalah reka bentuk spesifikasi A2DP kesalahan bahawa nilai bitpool tidak terikat kepada parameter codec lain dan hanya ditakrifkan sebagai nilai global.

Nilai Bitpool dan Bitrate tetap ini berasal dari nilai yang disyorkan untuk audio berkualiti tinggi. Tetapi cadangan itu bukan alasan untuk mengehadkan profil kepada nilai-nilai ini.

Spesifikasi A2DP v1.2, yang aktif dari 2007 hingga 2015, menghendaki semua penyahkodakan berfungsi dengan betul dengan bitrates hingga 512 kbps:

Penyahkod SNK akan menyokong semua nilai bitpool yang mungkin tidak menghasilkan lebih banyak bit bit maksimum. Profil ini menghadkan kadar bit maksimum yang ada pada 320kb / s untuk mono, dan 512kb / s untuk mod dua saluran.

Dalam versi baru spesifikasi tidak ada batasan bitrate. Dianggap bahawa fon kepala moden yang dikeluarkan selepas 2015 boleh menyokong bitrates sehingga 1000 kbps .

Atas sebab tertentu, kesemua stack Bluetooth diuji (Linux (PulseAudio), Android, Blackberry dan macOS) mempunyai sekatan buatan parameter bitpool maksimum, yang secara langsung memberi kesan kepada bitrate maksimum. Tetapi ini bukan masalah terbesar, hampir semua fon kepala juga mengehadkan nilai bitpool maksimum kepada 53.

Kebanyakan peranti bekerja dengan baik pada timbunan Bluetooth yang diubah suai dengan bitrate 507 kbps, tanpa gangguan dan retak. Tetapi bitrate semacam itu tidak akan dirundingkan dalam keadaan biasa, dengan stok stok Bluetooth.

*** Diperlukan untuk Ujian Menggunakan Panduan Di Bawah: bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso.torrent

Bagaimana untuk menguji pada PC

Ujian keserasian headphone SBC bitrate yang tinggi adalah yang paling mudah untuk dilakukan pada PC dengan penyesuai Bluetooth. Saya telah menyediakan imej Ubuntu dengan timbunan Bluetooth yang diubahsuai, yang boleh dijalankan seperti dalam mesin maya (dengan menyambungkan penyesuai Bluetooth sebagai peranti USB di dalam mesin maya, ia juga berfungsi dengan penyesuai yang dibina dalam komputer riba) atau dengan boot dari pemacu denyar USB. Imej ini menggunakan profil berikut: Dual Channel, 8 band, 16 blok, Loudness, bitpool 2..41, 44.1 kHz, yang menyediakan 485 kbps bitrate.

Berjalan dalam VM

  • Muat turun Pek Extension Virtualbox dan Virtualbox: //www.virtualbox.org/wiki/Downloads;
  • Pasang Virtualbox, mulakannya;
  • Pasang Pek Tambahan menggunakan Fail → Pilihan → Pelanjutan;
  • Buat mesin maya baru: Linux, Ubuntu (64-bit), 1024 RAM. Jangan buat HDD.
  • Navigasi ke tetapan mesin maya, dalam Penyimpanan pilih Pengawal: IDE, Kosong, tekan ikon CD → Pilih fail cakera optik maya;
  • Pilih dimuat turun bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso;
  • Simpan dan tutup tetingkap tetapan, mulakan mesin maya;
  • Klik ikon kabel USB di sebelah kanan bawah, pilih penyesuai Bluetooth anda;

Berjalan di PC

Imej ini menyokong boot BIOS / CSM dan UEFI.

  • Buang imej ke pemacu denyar USB menggunakan Etcher: //etcher.io/. Operasi ini akan memadam semua fail sedia ada pada pemacu USB.
  • Matikan PC;
  • Masukkan pemacu denyar USB, hidupkan PC dan tekan butang pesanan boot (biasanya Esc atau F12);
  • Pilih pemacu kilat USB anda.

Melakukan ujian

  • (pilihan tetapi disyorkan) Klik dua kali pada skrip "Btsnoop Dump" pada desktop. Ia akan memulakan penangkapan data Bluetooth untuk analisis kemudian. Jangan tutup tetingkap terminal.
  • Tukar fon kepala ke mod berpasangan;
  • Klik pada anak panah di sudut kanan atas, pilih ikon Bluetooth → Tetapan Bluetooth;
  • Pilih fon kepala anda, tunggu sehingga pasangan selesai dan tutup tetingkap;
  • Tetapkan jumlah Ubuntu kepada kira-kira 2/3. Juga turunkan volume menggunakan butang alat dengar kerana ia boleh menjadi sangat kuat selepas berpasangan.
  • Buka folder "muzik", main "testrecord1.flac";
  • (pilihan tetapi disyorkan) Pemain dekat, tetingkap terminal tutup. Ini akan menghentikan penangkapan data.
  • (pilihan tetapi disyorkan) Buka pelayar Firefox, muat naik dump data (btsnoop_hci.btsnoop di desktop) ke //btcodecs.valdikss.org.ru/

Anda boleh mendengar muzik lain dalam folder muzik, atau muat naik sendiri;

Tidak perlu keretakan, gangguan audio atau gangguan muzik lain di fon kepala. Sekiranya anda mendengar suara berkualiti tinggi yang baik, ini bermakna fon kepala anda menyokong audio dengan kadar bit 485 kbps.

Bagaimana untuk menguji pada peranti Android

Untuk menguji dari telefon pintar Android atau tablet, anda perlu menggunakan susunan Bluetooth yang diubahsuai, yang memerlukan keistimewaan root.

Bagaimana untuk menangkap dump data Bluetooth pada Android

  1. Matikan Bluetooth;
  2. Dalam Tetapan Pembangun, aktifkan suis "Aktifkan suapan Bluetooth HCI";
  3. Hidupkan Bluetooth, sambungkan ke alat dengar anda menggunakan menu Bluetooth (ini penting! Jangan biarkan sambungan auto!);
  4. Mainkan sampel audio pendek;
  5. Buka tetapan pemaju, matikan suis "Aktifkan log suapan Bluetooth HCI";
  6. Harus ada /storage/emulated/0/btsnoop_hci.log atau /data/misc/bluetooth/logs/btsnoop_hci.log dicipta. Jika hilang, buka /etc/bluetooth/bt_stack.conf dengan editor teks dan lihat laluan dalam pilihan BtSnoopFileName.

Tidak perlu keretakan, gangguan audio atau gangguan muzik lain di fon kepala. Jika anda mendengar suara berkualiti tinggi yang baik dengan pustaka yang dipasang, ini bermakna fon kepala anda menyokong audio dengan kadar bit 512 kbps.

Sila ikut dengan teliti algoritma di atas. Khususnya, jika anda menghidupkan fon kepala atau memecahkan selepas berpasangan, penting untuk menyambungkan fon kepala secara manual dari tetapan Bluetooth, jangan benarkan sambungan auto!

Peranti yang menyokong sekurang-kurangnya 512 kbit / s SBC

  • 1MORE 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 maks 39. Balas tidak menyokong Saluran Dual, tetapi berfungsi jika terpaksa, 462 kbit / s. Tidak mematuhi spesifikasi A2DP.)
  • Bluedio T5 (Balas tidak menyokong Saluran Dwi, tetapi berfungsi jika dipaksa.) Tidak mematuhi spesifikasi A2DP.)
  • Bluedio T6 (Balas tidak menyokong Saluran Dual, tetapi berfungsi jika terpaksa.) Tidak mematuhi spesifikasi A2DP. Mengguna pakai cip Max 97220.)
  • Marshall Major II Bluetooth
  • Overdrive RealForce D1
  • Edifier W830BT
  • DEXP BT-250
  • Penyesuai Logitech BT
  • Unit kepala automotif noname (cip CSR8645)
  • Unit kepala automotif Sony DSX-A400BT

Peranti yang menyokong SBC lebih tinggi daripada 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, dua saluran, 4 subbah)

Peranti yang tidak berfungsi dengan bitrate yang lebih tinggi atau Dual Channel

  1. Harper HB-202 (keretakan; cip Beken BK3256)
  2. Sony Ericsson MW600 (gangguan frekuensi tinggi, keretakan, peranti dari tahun 2009)

Kenapa ini penting: SBC 328k dan 485k vs aptX

Berbeza dengan kepercayaan popular kualiti suara aptX, dalam beberapa kes ia dapat menghasilkan kualiti audio yang lebih buruk daripada SBC dengan bitrate 328k standard.

SBC secara dinamik memperuntukkan bit kuantisasi untuk band frekuensi, yang bertindak secara "dasar-ke-atas". Sekiranya bitrate keseluruhan digunakan untuk frekuensi rendah dan pertengahan, frekuensi atas adalah "dipotong" (dibungkus).

aptX menghitung band kekerapan dengan bilangan bit yang sama secara berterusan, yang menjadikannya codec bitrate tetap: 352 kbps untuk 44.1 kHz, 384 kbps untuk 48 kHz. Ia tidak boleh "memindahkan bit" ke frekuensi yang kebanyakannya diperlukan di dalamnya. Tidak seperti SBC, aptX tidak akan "mengurangkan" kekerapan, tetapi akan menambah bunyi kuantisasi kepada mereka, mengurangkan pelbagai dinamik audio, dan kadang-kadang memperkenalkan keretakan. SBC, sebaliknya, "makan butiran" - membuang kawasan paling tenang.

Rata-rata, berbanding dengan SBC 328k, aptX kurang menyimpang dalam muzik dengan julat frekuensi yang luas, tetapi pada muzik dengan jarak frekuensi sempit dan pelbagai dinamik SBC 328k kadang-kadang menang.

Marilah kita mempertimbangkan kes khas, rakaman piano. Inilah spektrum:

Tenaga yang paling banyak terdapat pada frekuensi 0-4 kHz, dan bertahan sehingga 10 kHz.

Spektrogram fail aptX fail kelihatan seperti ini:

Berikut ialah SBC 328k:

Ia dapat dilihat bahawa SBC 328k secara berkala memotong julat di atas 16 kHz, dan menggunakan semua bitrat tersedia untuk julat di bawah nilai ini. Walau bagaimanapun, aptX memperkenalkan lebih banyak gangguan kepada spektrum frekuensi yang boleh didengar oleh telinga manusia, yang boleh dilihat pada spektrogram asal yang ditolak dari spektrogram aptX (yang lebih cerah, lebih banyak distorsi):

Sedangkan SBC 328k telah memperkenalkan kurang herotan isyarat dalam julat dari 0 hingga 10 kHz, dan selebihnya telah terjadi:

Bitrate 485k untuk SBC sudah cukup untuk menyelamatkan julat frekuensi keseluruhan, tanpa memotong band.

SBC 485k pada sampel audio ini jauh lebih baik daripada aptX dalam julat 0-15 kHz, dan dengan perbezaan yang lebih kecil tetapi masih ketara - pada 15-22 kHz (yang lebih gelap, kurang herotannya):

Beralih ke SBC kadar bit yang tinggi, anda akan mendapat suara yang lebih tinggi daripada aptX pada masa yang sama, pada mana-mana fon kepala.

  • original_and_aptx.zip
  • sbc.zip

Bagaimana Mengubah Stack Bluetooth di Android 5 - 7

Pengubahsuaian ini sepatutnya digunakan untuk stok Android stack bluetooth Bluedroid (Android 5) dan Fluoride (Android 6-7). Susunan susunan Qualcomm tidak disokong.

Gantikan Stereo Bersama dengan Dual Channel dalam konfigurasi SBC standard

android / platform / luaran / bluetooth / bluedroid / btif / co / bta_av_co.c: 99

Kod:

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

Gantikan A2D_SBC_IE_CH_MD_JOINT dengan A2D_SBC_IE_CH_MD_DUAL.

Meningkatkan keutamaan Saluran Dual

android / platform / luaran / bluetooth / bluedroid / btif / co / bta_av_co.c: 4

Kod:

 jika (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT; lain jika (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; lain jika (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; lain jika (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO; Pindah jika dengan A2D_SBC_IE_CH_MD_DUAL ke bahagian atas. 
  1. Lumpuhkan atau tambah sekatan bitrate

Tumpuan bluetooth Android bukan hanya batasan bitpool, tetapi juga batas bitrate, 328 kbit / s. Jika fon kepala menyokong, sebagai contoh, bitpool 53 untuk 48 kHz, Android akan mengurangkan bitpool ke bawah untuk dimuatkan ke dalam batas 328 kbit / s. Ini akan berlaku SELEPAS perundingan codec, pada peringkat pengekodan, tidak mengambil kira nilai bitpool dalam paket SetCapabilities Bluetooth.

android / platform / luaran / bluetooth / bluedroid / btif / src / btif_media_task.c: 172

Kod:

 #define DEFAULT_SBC_BITRATE 328 

Gantikan dengan 512.

  1. (untuk eksperimen sahaja) Matikan had MTU.

Ini diperlukan untuk bitrate lebih tinggi daripada ~ 580 kbit / s.

btif / src / btif_media_task.c: 174

Kod:

 / * 2DH5 saiz muatan 679 bait - (4 bait L2CAP Header + 12 bait AVDTP Header) * / #define MAX_2MBPS_AVDTP_MTU 663 

Bagaimana Mengubah Balasan Bluetooth di Android 8 - 9

Pengubahsuaian ini belum diuji, tetapi harus berfungsi.

Tambah sokongan Sokongan Saluran ke Sumber SBC A2DP

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

Kod:

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

tambah A2DP_SBC_IE_CH_MD_DUAL dalam ch_mode.

Gantikan Stereo Bersama dengan Dual Channel dalam konfigurasi lalai

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

Kod:

 / * Lalai SBC codec konfigurasi * / 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 * /}; 

Gantikan A2DP_SBC_IE_CH_MD_JOINT dengan A2DP_SBC_IE_CH_MD_DUAL.

Meningkatkan keutamaan Saluran Dual

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

Kod:

 boolean static 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-> ch_mode = A2DP_SBC_IE_CH_MD_JOINT; p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; kembali benar; } jika (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; kembali benar; } jika (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; kembali benar; } jika (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; kembali benar; } kembali palsu; } 

Pindah jika dengan A2DP_SBC_IE_CH_MD_DUAL ke bahagian atas.

Meningkatkan had bitrate

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

Kod:

 #define A2DP_SBC_DEFAULT_BITRATE 328 

Gantikan dengan 512.

  1. (untuk eksperimen sahaja) Matikan had MTU

Ini diperlukan untuk bitrate lebih tinggi daripada ~ 580 kbit / s.

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

Kod:

 #define MAX_2MBPS_AVDTP_MTU 663 

Tindanan Bluetooth Patched (Berkilau)

  • 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 nota 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 (Kebangkitan 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
  • Le Max 2 Oreo Patched.zip

Artikel Yang Menarik