Cara Mengubah Tumpukan Bluetooth di Android untuk Kualitas Audio Bluetooth yang Sangat Ditingkatkan

Peringatan: Ini adalah panduan yang sangat canggih yang melibatkan memodifikasi tumpukan Bluetooth Anda di Android - baca panduan ini secara keseluruhan dan ikuti semua instruksi persis seperti yang diberikan.

Terlepas dari kenyataan bahwa headset Bluetooth dan audio Bluetooth telah menjadi sangat populer, itu sedikit masalah bagi audiophiles karena Bluetooth telah terbukti mengurangi kualitas audio, karena bit informasi audio dan frekuensi hilang di udara melalui streaming Bluetooth.

Inilah sebabnya mengapa beberapa produsen mengeluarkan codec aptX dan LDAC, untuk meningkatkan kualitas suara di atas codec SBC Bluetooth standar yang didukung oleh semua headphone dan sebagian besar perangkat Bluetooth - namun, perangkat dengan codec aptX dan LDAC jauh lebih mahal karena codec ini membutuhkan biaya lisensi, yang dibayar oleh konsumen dalam jangka panjang.

Rendahnya kualitas audio dari SBC Bluetooth codec disebabkan oleh keterbatasan artifisial dari semua susunan Bluetooth saat ini dan konfigurasi headphone, dan batasan ini dapat dielakkan pada perangkat yang ada.

Jika Anda tertarik dengan audio Bluetooth, kami akan menunjukkan kepada Anda di akhir panduan ini cara mengambil dump log audio Bluetooth dan memeriksanya untuk melihat kualitas dan frekuensi audio seperti apa yang Anda dapatkan dari penerima Bluetooth Android Anda.

Sebagian besar panduan ini akan fokus pada beberapa penyesuaian sederhana dan cara membaca output audio Bluetooth Anda untuk sangat meningkatkan kualitas output codec Bluetooth SBC standar - silakan baca seluruh panduan ini dengan seksama karena cukup mendidik dan ada banyak hal berbeda untuk mem-flash atau mengubah, tergantung pada model perangkat Anda.

Pada akhir panduan ini adalah daftar tumpukan Bluetooth yang telah ditambal untuk banyak perangkat Android yang populer - ini dapat di-flash dalam pemulihan seperti halnya perangkat zip lainnya. - jika tidak ada perangkat yang menjadi milik Anda, Anda akan memiliki untuk mengikuti panduan untuk memodifikasi tumpukan Bluetooth di Android.

Informasi teknis singkat tentang SBC codec

SBC memiliki banyak parameter berbeda yang dinegosiasikan selama fase pengaturan koneksi:

  • Jenis dan nomor saluran audio: Stereo Bersama, Stereo, Dual Channel, Mono;
  • Jumlah pita frekuensi: 4 atau 8;
  • Jumlah blok audio dalam satu paket: 4, 8, 12, 16;
  • Algoritma alokasi bit kuantisasi: Loudness, SNR;
  • Kumpulan bit maksimum dan minimum yang digunakan dalam proses kuantisasi: biasanya 2-53.

Dekoder diperlukan untuk mendukung kombinasi parameter ini. Encoder hanya dapat mengimplementasikan sebagian dari mereka.

Tumpukan Bluetooth yang ada biasanya menegosiasikan profil berikut: Stereo Bersama, 8 band, 16 blok, Loudness, bitpool 2..53. Profil ini menyandikan audio 44, 1 kHz dengan bitrate 328 kbps.

Parameter Bitpool secara langsung mempengaruhi bitrate dalam profil yang sama: semakin tinggi, semakin tinggi bitrate, dan karenanya kualitasnya.

Namun, parameter bitpool tidak terikat ke profil tertentu. Bitrate juga dipengaruhi secara signifikan oleh parameter lain: jenis saluran audio, jumlah pita frekuensi, jumlah blok audio. Anda dapat meningkatkan bitrate secara tidak langsung dengan menegosiasikan profil non-standar, tanpa mengubah bitpool.

Misalnya, Dual Channel mengkodekan saluran secara terpisah, menggunakan seluruh bitpool untuk setiap saluran. Memaksa perangkat untuk menggunakan Dual Channel sebagai ganti Joint Stereo akan membuat kita mendapatkan bitrate hampir dua kali lipat pada bitpool maksimum yang sama, 617 kbps.

Bagi saya rasanya bitpool harus menjadi variabel internal. Ini adalah kesalahan desain spesifikasi A2DP yang nilai bitpool tidak terikat pada parameter codec lainnya dan hanya didefinisikan sebagai nilai global.

Nilai Bitpool dan Bitrate yang diperbaiki ini berasal dari nilai yang disarankan untuk audio berkualitas tinggi. Tetapi rekomendasi tersebut bukan alasan untuk membatasi profil untuk nilai-nilai ini.

Spesifikasi A2DP v1.2, yang aktif dari 2007 hingga 2015, mengharuskan semua decoder bekerja dengan bitrate hingga 512 kbps:

Decoder SNK harus mendukung semua nilai bitpool yang mungkin yang tidak menghasilkan kelebihan dari bit rate maksimum. Profil ini membatasi bit rate maksimum yang tersedia hingga 320kb / s untuk mono, dan 512kb / s untuk mode dua saluran.

Dalam versi baru dari spesifikasi tidak ada batasan bitrate. Diasumsikan bahwa headphone modern yang dirilis setelah 2015 dapat mendukung bitrate hingga 1000 kbps .

Untuk beberapa alasan, semua tumpukan Bluetooth saat ini diuji (Linux (PulseAudio), Android, Blackberry dan macOS) memiliki batasan buatan parameter bitpool maksimum, yang secara langsung mempengaruhi bitrate maksimum. Tapi ini bukan masalah terbesar, hampir semua headphone juga membatasi nilai bitpool maksimum menjadi 53.

Sebagian besar perangkat berfungsi dengan baik pada tumpukan Bluetooth yang dimodifikasi dengan bitrate 507 kbps, tanpa gangguan dan keretakan. Tetapi bitrate semacam itu tidak akan pernah dinegosiasikan dalam kondisi normal, dengan tumpukan Bluetooth stock.

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

Cara mengetes di PC

Tes kompatibilitas headphone bitrate SBC tinggi adalah yang termudah untuk dilakukan pada PC dengan adaptor Bluetooth. Saya sudah menyiapkan gambar Ubuntu dengan tumpukan Bluetooth yang dimodifikasi, yang dapat dijalankan seperti di mesin virtual (dengan menghubungkan adaptor Bluetooth sebagai perangkat USB di dalam mesin virtual, itu juga bekerja dengan adaptor yang terpasang di laptop) atau dengan boot dari USB flash drive. Gambar ini menggunakan profil berikut: Dual Channel, 8 band, 16 blok, Loudness, bitpool 2..41, 44.1 kHz, yang menyediakan bitrate 485 kbps.

Berjalan di VM

  • Unduh Virtualbox dan Virtualbox Extension Pack: //www.virtualbox.org/wiki/Downloads;
  • Instal Virtualbox, mulai saja;
  • Instal Paket Ekstensi menggunakan File → Preferences → Extensions;
  • Buat mesin virtual baru: Linux, Ubuntu (64-bit), 1024 RAM. Jangan membuat HDD.
  • Arahkan ke pengaturan mesin virtual, di Storage pilih Controller: IDE, Empty, tekan ikon CD → Pilih file disk optik virtual;
  • Pilih bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso yang diunduh;
  • Simpan dan tutup jendela pengaturan, mulai mesin virtual;
  • Klik kanan ikon kabel USB di kanan bawah, pilih adaptor Bluetooth Anda;

Berjalan di PC

Gambar mendukung booting BIOS / CSM dan UEFI.

  • Bakar gambar ke USB flash drive menggunakan Etcher: //etcher.io/. Operasi ini akan menghapus semua file yang ada di drive USB.
  • Matikan PC;
  • Masukkan USB flash drive, nyalakan PC dan tekan tombol boot order (biasanya Esc atau F12);
  • Pilih USB flash drive Anda.

Melakukan tes

  • (opsional tetapi disarankan) Klik dua kali pada skrip “Btsnoop Dump” di desktop. Ini akan memulai pengambilan data Bluetooth untuk analisis selanjutnya. Jangan tutup jendela terminal.
  • Ganti headphone ke mode berpasangan;
  • Klik panah di sudut kanan atas, pilih ikon Bluetooth → Pengaturan Bluetooth;
  • Pilih headphone Anda, tunggu hingga pemasangan selesai dan tutup jendela;
  • Atur volume Ubuntu menjadi sekitar 2/3. Juga kurangi volume menggunakan tombol headset karena bisa sangat keras setelah memasangkan.
  • Buka folder "musik", mainkan "testrecord1.flac";
  • (opsional tetapi disarankan) Tutup pemain, tutup jendela terminal. Ini akan menghentikan pengambilan data.
  • (opsional tetapi disarankan) Buka browser Firefox, unggah data dump (btsnoop_hci.btsnoop di desktop) ke //btcodecs.valdikss.org.ru/

Anda dapat mendengarkan musik lain di folder musik, atau mengunggah musik Anda sendiri;

Seharusnya tidak ada suara berderak, gangguan audio atau distorsi suara lainnya di headphone. Jika Anda mendengar suara berkualitas tinggi yang bagus, itu berarti headphone Anda mendukung audio dengan bit rate 485 kbps.

Cara menguji pada perangkat Android

Untuk menguji dari ponsel atau tablet Android, Anda perlu menggunakan tumpukan Bluetooth yang dimodifikasi, yang membutuhkan hak akses root.

Cara menangkap dump data Bluetooth di Android

  1. Matikan Bluetooth;
  2. Di Pengaturan Pengembang, aktifkan sakelar "Aktifkan log snoop Bluetooth HCI";
  3. Nyalakan Bluetooth, hubungkan ke headset Anda menggunakan menu Bluetooth (ini penting! Jangan izinkan koneksi otomatis!);
  4. Putar sampel audio pendek;
  5. Buka pengaturan pengembang, nonaktifkan sakelar “Enable Bluetooth HCI snoop log”;
  6. Harus ada /storage/emulated/0/btsnoop_hci.log atau /data/misc/bluetooth/logs/btsnoop_hci.log dibuat. Jika hilang, buka /etc/bluetooth/bt_stack.conf dengan editor teks dan lihat path di opsi BtSnoopFileName.

Seharusnya tidak ada suara berderak, gangguan audio atau distorsi suara lainnya di headphone. Jika Anda mendengar suara berkualitas tinggi yang bagus dengan pustaka yang ditambal, itu berarti headphone Anda mendukung audio dengan kecepatan bit 512 kbps.

Ikuti dengan cermat algoritme di atas. Terutama, jika Anda mematikan headphone atau memutuskan sambungan setelah pemasangan, penting untuk menyambungkan ke headphone secara manual dari pengaturan Bluetooth, jangan izinkan koneksi otomatis!

Perangkat yang mendukung setidaknya 512 kbit / s SBC

  • 1 LEBIH BANYAK 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. Menanggapi tidak mendukung Dual Channel, tetapi bekerja jika dipaksakan, 462 kbit / s. Tidak sesuai dengan spesifikasi A2DP.)
  • Bluedio T5 (Tanggapi tidak mendukung Dual Channel, tetapi berfungsi jika dipaksa. Tidak sesuai dengan spesifikasi A2DP.)
  • Bluedio T6 (Menanggapi tidak mendukung Dual Channel, tetapi bekerja jika dipaksa. Tidak sesuai dengan spesifikasi A2DP. Mengadopsi chip Max 97220.)
  • Marshall Major II Bluetooth
  • Overdrive RealForce D1
  • Edifier W830BT
  • DEXP BT-250
  • Logitech BT Adapter
  • Head unit otomotif noname (chip CSR8645)
  • Sony DSX-A400BT head unit otomotif

Perangkat yang mendukung SBC lebih tinggi dari 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, saluran ganda, 4 subbands)

Perangkat yang tidak berfungsi dengan bitrate lebih tinggi atau Dual Channel

  1. Harper HB-202 (cracklings; Beken BK3256 chip)
  2. Sony Ericsson MW600 (distorsi frekuensi tinggi, berderak; perangkat dari 2009)

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

Berlawanan dengan kepercayaan umum kualitas suara aptX, dalam beberapa kasus dapat menghasilkan kualitas audio yang lebih buruk daripada SBC dengan bitrate 328k standar.

SBC secara dinamis mengalokasikan bit kuantisasi untuk pita frekuensi, bertindak atas dasar "bottom-to-top". Jika bitrate keseluruhan digunakan untuk frekuensi yang lebih rendah dan menengah, frekuensi atas adalah "terputus" (dibungkam).

aptX menghitung frekuensi band dengan jumlah bit yang sama secara konstan, yang membuatnya menjadi codec bitrate konstan: 352 kbps untuk 44, 1 kHz, 384 kbps untuk 48 kHz. Itu tidak bisa "mentransfer bit" ke frekuensi yang sebagian besar dibutuhkan di dalamnya. Tidak seperti SBC, aptX tidak akan "memotong" frekuensi, tetapi akan menambah derau kuantisasi pada mereka, mengurangi rentang dinamis audio, dan kadang-kadang menyebabkan suara berderak. SBC, sebaliknya, "makan detail" - membuang daerah paling sunyi.

Rata-rata, dibandingkan dengan SBC 328k, aptX membuat lebih sedikit distorsi dalam musik dengan rentang frekuensi yang luas, tetapi pada musik dengan rentang frekuensi yang sempit dan rentang dinamis yang luas, SBC 328k terkadang menang.

Mari kita perhatikan kasus khusus, rekaman piano. Inilah spektrogram:

Energi terbanyak terletak pada frekuensi 0-4 kHz, dan bertahan hingga 10 kHz.

Spectrogram dari file aptX terlihat seperti ini:

Inilah SBC 328k:

Dapat dilihat bahwa SBC 328k secara berkala benar-benar memotong kisaran di atas 16 kHz, dan menggunakan semua bitrate yang tersedia untuk rentang di bawah nilai ini. Namun, aptX memperkenalkan lebih banyak distorsi ke dalam spektrum frekuensi yang dapat didengar oleh telinga manusia, yang dapat dilihat pada spektogram asli yang dikurangkan dari spektrogram aptX (semakin cerah, semakin banyak distorsi):

Sementara SBC 328k telah memperkenalkan lebih sedikit distorsi sinyal dalam kisaran dari 0 hingga 10 kHz, dan sisanya telah dipotong:

Bitrate 485k untuk SBC sudah cukup untuk menyelamatkan seluruh rentang frekuensi, tanpa memotong band.

SBC 485k pada sampel audio ini jauh lebih baik daripada aptX dalam kisaran 0-15 kHz, dan dengan perbedaan yang lebih kecil tetapi masih terlihat - pada 15-22 kHz (semakin gelap, semakin sedikit distorsi):

Beralih ke SBC bitrate tinggi, Anda akan mendapatkan suara yang superior untuk sebagian besar waktu, pada headphone apa pun.

  • original_and_aptx.zip
  • sbc.zip

Cara Mengubah Tumpukan Bluetooth di Android 5 - 7

Modifikasi ini harus diterapkan untuk stok tumpukan Bluetooth Android Bluedroid (Android 5) dan Fluoride (Android 6-7). Tumpukan yang dimodifikasi oleh Qualcomm tidak didukung.

Ganti Stereo Bersama dengan Dual Channel dalam konfigurasi SBC standar

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

Ganti A2D_SBC_IE_CH_MD_JOINT dengan A2D_SBC_IE_CH_MD_DUAL.

Tingkatkan prioritas Dual Channel

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

Kode:

 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; Pindahkan jika dengan A2D_SBC_IE_CH_MD_DUAL ke atas. 
  1. Nonaktifkan atau tambah batasan bitrate

Android bluetooth stack tidak hanya memiliki batas bitpool, tetapi juga batas bitrate, 328 kbit / s. Jika headphone mendukung, misalnya, bitpool 53 untuk 48 kHz, Android akan mengurangi bitpool ke dalam batas 328 kbit / s. Ini akan terjadi SETELAH negosiasi codec, pada tahap pengkodean, jangan memperhitungkan nilai bitpool akun dalam paket Bluetooth SetCapabilities.

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

Kode:

 #define DEFAULT_SBC_BITRATE 328 

Ganti dengan 512.

  1. (hanya untuk percobaan) Nonaktifkan batas MTU.

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

btif / src / btif_media_task.c: 174

Kode:

 / * Ukuran muatan 2DH5 dari 679 byte - (Header L2CAP 4 byte + Header AVDTP 12 byte) * / #define MAX_2MBPS_AVDTP_MTU 663 

Cara Mengubah Tumpukan Bluetooth di Android 8 - 9

Modifikasi ini belum diuji, tetapi harus berfungsi.

Tambahkan dukungan Dual Channel ke Sumber A2BC SBC

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

Kode:

 / * Kemampuan codec SBC SRC * / const statis tA2DP_SBC_CIE a2dp_sbc_caps = A2DP_SBC_IE_SAMP_FREQ_44, / * samp_freq * / (A2DP_SBC_IE_CH_MD_MONO; 

tambahkan A2DP_SBC_IE_CH_MD_DUAL di ch_mode.

Ganti Stereo Bersama dengan Dual Channel dalam konfigurasi default

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

Kode:

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

Ganti A2DP_SBC_IE_CH_MD_JOINT dengan A2DP_SBC_IE_CH_MD_DUAL.

Tingkatkan prioritas Dual Channel

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

Kode:

 static 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_Mode_DCL_TEM_TEM_TEM_TEM_TEM_TEM_TEM_TODE_CH_TEM_DURTODE_CH_TEM_DUR_DCH_DURCH_DURCH_DURCH_DURCH_DURCH_DURCH_DURCH_DURCH _D_ID_DURCH _CH_MD _DCH_TEM_TEM_DLET_DATE 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; } 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; kembali benar; } 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; kembali benar; } return false; } 

Pindahkan jika dengan A2DP_SBC_IE_CH_MD_DUAL ke atas.

Tambah batas bitrate

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

Kode:

 #define A2DP_SBC_DEFAULT_BITRATE 328 

Ganti dengan 512.

  1. (hanya untuk percobaan) Nonaktifkan batas MTU

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

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

Kode:

 #define MAX_2MBPS_AVDTP_MTU 663 

Stack Bluetooth Ditambal (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)).
  • 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 (Resixection Remix Android 7.1.2_r36) .zip
  • Redmi Note 4x (Masik Premium, android 7.0) .zip
  • Zoom Asus (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 Menarik