วิธีแก้ไขบลูทู ธ สแต็คบน Android เพื่อคุณภาพเสียงบลูทู ธ ที่เพิ่มขึ้นอย่างมาก



ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา

คำเตือน: นี่เป็นคำแนะนำขั้นสูงที่เกี่ยวข้องกับการปรับเปลี่ยนบลูทู ธ สแต็กของคุณบน Android - อ่านคู่มือนี้อย่างครบถ้วนและปฏิบัติตามคำแนะนำทั้งหมดตามที่ระบุ



แม้ว่าชุดหูฟังบลูทู ธ และเสียงบลูทู ธ จะเป็นที่นิยม แต่ก็เป็นปัญหาเล็กน้อยสำหรับออดิโอไฟล์เนื่องจากบลูทู ธ ได้รับการพิสูจน์แล้วว่าลดคุณภาพเสียงเนื่องจากข้อมูลเสียงและความถี่ส่วนน้อยหายไปในอากาศผ่านการสตรีมบลูทู ธ



นี่คือเหตุผลที่ผู้ผลิตบางรายออกตัวแปลงสัญญาณ aptX และ LDAC เพื่อปรับปรุงคุณภาพเสียงให้ดีขึ้นกว่าตัวแปลงสัญญาณบลูทู ธ SBC มาตรฐานซึ่งรองรับโดยหูฟังทั้งหมดและอุปกรณ์บลูทู ธ ส่วนใหญ่อย่างไรก็ตามอุปกรณ์ที่มีตัวแปลงสัญญาณ aptX และ LDAC มีราคาแพงกว่ามากเนื่องจากตัวแปลงสัญญาณเหล่านี้ ต้องมีค่าธรรมเนียมใบอนุญาตซึ่งผู้บริโภคจ่ายในระยะยาว



คุณภาพเสียงต่ำของตัวแปลงสัญญาณบลูทู ธ SBC เกิดจากข้อ จำกัด เทียมของการกำหนดค่าบลูทู ธ สแต็กและหูฟังปัจจุบันทั้งหมดและข้อ จำกัด นี้สามารถหลีกเลี่ยงได้กับอุปกรณ์ที่มีอยู่

หากคุณสนใจเสียงบลูทู ธ เราจะแสดงให้คุณเห็นในตอนท้ายของคู่มือนี้เกี่ยวกับวิธีถ่ายโอนบันทึกเสียงบลูทู ธ และตรวจสอบเพื่อดูคุณภาพเสียงและความถี่ที่คุณได้รับจากเครื่องรับบลูทู ธ ของ Android

คู่มือนี้ส่วนใหญ่จะเน้นไปที่การปรับแต่งง่ายๆและวิธีอ่านเอาต์พุตเสียง Bluetooth ของคุณเพื่อเพิ่มคุณภาพเอาต์พุตของตัวแปลงสัญญาณบลูทู ธ SBC มาตรฐานอย่างมาก - โปรดอ่านคู่มือทั้งหมดนี้อย่างละเอียดเนื่องจากมีการศึกษาค่อนข้างมากและมีหลายสิ่งที่แตกต่างกัน เพื่อแฟลชหรือปรับแต่งขึ้นอยู่กับรุ่นอุปกรณ์ของคุณ



ในตอนท้ายของคู่มือนี้เป็นรายการบลูทู ธ สแต็คที่ติดตั้งไว้ล่วงหน้าสำหรับอุปกรณ์ Android ยอดนิยมจำนวนมากซึ่งสามารถแฟลชในการกู้คืนได้เช่นเดียวกับที่คุณทำกับไฟล์. zip อื่น ๆ หากไม่มีอุปกรณ์ใดเป็นของคุณคุณจะมี เพื่อทำตามคำแนะนำสำหรับการแก้ไขบลูทู ธ สแต็กบน Android

ข้อมูลทางเทคนิคสั้น ๆ เกี่ยวกับ SBC codec

SBC มีพารามิเตอร์ต่างๆมากมายที่ต่อรองระหว่างขั้นตอนการตั้งค่าการเชื่อมต่อ:

  • ประเภทและหมายเลขช่องสัญญาณเสียง: สเตอริโอร่วม, สเตอริโอ, ช่องสัญญาณคู่, โมโน;
  • จำนวนคลื่นความถี่: 4 หรือ 8;
  • จำนวนบล็อกเสียงในหนึ่งแพ็คเก็ต: 4, 8, 12, 16;
  • อัลกอริธึมการจัดสรรบิต Quantization: Loudness, SNR;
  • พูลบิตสูงสุดและต่ำสุดที่ใช้ในกระบวนการหาปริมาณ: โดยปกติคือ 2-53

จำเป็นต้องใช้ตัวถอดรหัสเพื่อรองรับการรวมกันของพารามิเตอร์เหล่านี้ ตัวเข้ารหัสอาจใช้เพียงบางส่วนเท่านั้น

สแต็คบลูทู ธ ที่มีอยู่มักจะเจรจาโปรไฟล์ต่อไปนี้: สเตอริโอร่วม, 8 แบนด์, 16 บล็อค, ความดัง, บิตพูล 2..53 โปรไฟล์นี้เข้ารหัสเสียง 44.1 kHz ด้วยบิตเรต 328 kbps

พารามิเตอร์ Bitpool ส่งผลโดยตรงต่อบิตเรตภายในโปรไฟล์เดียวกัน: ยิ่งสูงเท่าใดบิตเรตก็จะยิ่งสูงขึ้นเท่านั้นและด้วยเหตุนี้คุณภาพ

อย่างไรก็ตามพารามิเตอร์ bitpool ไม่ถูกผูกไว้กับโปรไฟล์เฉพาะ บิตเรตยังได้รับผลกระทบอย่างมีนัยสำคัญจากพารามิเตอร์อื่น ๆ เช่นประเภทช่องสัญญาณเสียงจำนวนย่านความถี่จำนวนบล็อกเสียง คุณสามารถเพิ่มบิตเรตทางอ้อมได้โดยการเจรจาต่อรองโปรไฟล์ที่ไม่ได้มาตรฐานโดยไม่ต้องเปลี่ยนบิตพูล

ตัวอย่างเช่น Dual Channel เข้ารหัสแชนเนลแยกกันโดยใช้ bitpool ทั้งหมดสำหรับแต่ละแชนเนล การบังคับให้อุปกรณ์ใช้ Dual Channel แทน Joint Stereo จะทำให้เราได้รับบิตเรตเพิ่มขึ้นเกือบสองเท่าที่ bitpool สูงสุดเท่ากันคือ 617 kbps

สำหรับฉันแล้วรู้สึกว่า bitpool ควรเป็นตัวแปรภายใน เป็นข้อผิดพลาดในการออกแบบข้อกำหนด A2DP ที่ค่า bitpool ไม่ผูกกับพารามิเตอร์ตัวแปลงสัญญาณอื่นและกำหนดเป็นค่าส่วนกลางเท่านั้น

ค่า Bitpool และ Bitrate คงที่เหล่านี้มาจากค่าที่แนะนำสำหรับเสียงคุณภาพสูง แต่คำแนะนำไม่ใช่ข้ออ้างในการ จำกัด โปรไฟล์ไว้ที่ค่าเหล่านี้

ข้อกำหนด A2DP v1.2 ซึ่งใช้งานตั้งแต่ปี 2550 ถึง 2558 กำหนดให้ตัวถอดรหัสทั้งหมดทำงานได้อย่างถูกต้องด้วยบิตเรตสูงสุด 512 kbps:

ตัวถอดรหัสของ SNK จะต้องรองรับค่า bitpool ที่เป็นไปได้ทั้งหมดที่ไม่ส่งผลให้อัตราบิตสูงสุดเกิน โปรไฟล์นี้ จำกัด อัตราบิตสูงสุดที่มีอยู่ที่ 320kb / s สำหรับโมโนและ 512kb / s สำหรับโหมดสองแชนเนล

ในข้อกำหนดเวอร์ชันใหม่ไม่มีการ จำกัด บิตเรต สันนิษฐานว่าหูฟังสมัยใหม่ที่วางจำหน่ายหลังปี 2015 สามารถรองรับบิตเรตได้ สูงถึง 1,000 kbps .

ด้วยเหตุผลบางประการบลูทู ธ สแต็กที่ทดสอบในปัจจุบันทั้งหมด (Linux (PulseAudio), Android, Blackberry และ macOS) มีข้อ จำกัด เทียมของพารามิเตอร์ bitpool สูงสุดซึ่งส่งผลโดยตรงต่อบิตเรตสูงสุด แต่นี่ไม่ใช่ปัญหาที่ใหญ่ที่สุดหูฟังเกือบทั้งหมดยัง จำกัด ค่า bitpool สูงสุดไว้ที่ 53

อุปกรณ์ส่วนใหญ่ทำงานได้ดีบนสแต็กบลูทู ธ ที่แก้ไขโดยมีบิตเรต 507 kbps โดยไม่มีการขัดจังหวะและเสียงแตก แต่บิตเรตดังกล่าวจะไม่สามารถเจรจาได้ภายใต้เงื่อนไขปกติโดยมีบลูทู ธ สแต็คสต็อก

*** จำเป็นสำหรับการทดสอบโดยใช้คำแนะนำด้านล่าง: บลูทู ธ dualchannel ทดสอบ ubuntu-18.04.1-desktop-amd64.iso.torrent

วิธีทดสอบบนพีซี

การทดสอบความเข้ากันได้ของหูฟัง SBC บิตเรตสูงเป็นวิธีที่ง่ายที่สุดในการดำเนินการบนพีซีด้วยอะแดปเตอร์บลูทู ธ ฉันได้เตรียมอิมเมจ Ubuntu พร้อมบลูทู ธ สแต็กที่ปรับเปลี่ยนแล้วซึ่งสามารถทำงานได้เหมือนในเครื่องเสมือน (โดยการเชื่อมต่ออะแดปเตอร์บลูทู ธ เป็นอุปกรณ์ USB ภายในเครื่องเสมือนมันยังทำงานร่วมกับอะแดปเตอร์ที่มีอยู่ในแล็ปท็อป) หรือโดยการบูตจาก แฟลชไดรฟ์ USB ภาพนี้ใช้โปรไฟล์ต่อไปนี้: Dual Channel, 8 แบนด์, 16 บล็อค, Loudness, bitpool 2..41, 44.1 kHz ซึ่งให้บิตเรต 485 kbps

ทำงานใน VM

  • ดาวน์โหลด Virtualbox และ Virtualbox Extension Pack: https://www.virtualbox.org/wiki/Downloads;
  • ติดตั้ง Virtualbox เริ่มต้น
  • ติดตั้ง Extension Pack โดยใช้ File → Preferences → Extensions;
  • สร้างเครื่องเสมือนใหม่: Linux, Ubuntu (64 บิต), 1024 RAM อย่าสร้าง HDD
  • ไปที่การตั้งค่าเครื่องเสมือนในที่จัดเก็บเลือกคอนโทรลเลอร์: IDE ว่างเปล่ากดไอคอนซีดี→เลือกไฟล์ออปติคัลดิสก์เสมือน
  • เลือกดาวน์โหลด bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso;
  • บันทึกและปิดหน้าต่างการตั้งค่าเริ่มเครื่องเสมือน
  • คลิกขวาที่ไอคอนสาย USB ที่ด้านล่างขวาเลือกอะแดปเตอร์บลูทู ธ ของคุณ

ทำงานบนพีซี

ภาพรองรับการบูต BIOS / CSM และ UEFI

  • เบิร์นภาพไปยังแฟลชไดรฟ์ USB โดยใช้ Etcher: https://etcher.io/ การดำเนินการนี้จะลบไฟล์ที่มีอยู่ทั้งหมดในไดรฟ์ USB
  • ปิดพีซี
  • ใส่แฟลชไดรฟ์ USB เปิดพีซีและกดปุ่มสั่งการบูต (โดยปกติคือ Esc หรือ F12)
  • เลือกแฟลชไดรฟ์ USB ของคุณ

ทำการทดสอบ

  • (ไม่บังคับ แต่แนะนำ) ดับเบิลคลิกที่สคริปต์“ Btsnoop Dump” บนเดสก์ท็อป จะเริ่มจับข้อมูลบลูทู ธ เพื่อการวิเคราะห์ในภายหลัง อย่าปิดหน้าต่างเทอร์มินัล
  • เปลี่ยนหูฟังเป็นโหมดจับคู่
  • คลิกที่ลูกศรที่มุมขวาบนเลือกไอคอนบลูทู ธ →การตั้งค่าบลูทู ธ
  • เลือกหูฟังของคุณรอจนกว่าการจับคู่จะเสร็จสมบูรณ์และปิดหน้าต่าง
  • ตั้งค่าระดับเสียงของ Ubuntu เป็นประมาณ 2/3 ลดระดับเสียงโดยใช้ปุ่มชุดหูฟังเนื่องจากอาจดังมากหลังจากจับคู่
  • เปิดโฟลเดอร์“ music” เล่น“ testrecord1.flac”;
  • (ไม่บังคับ แต่แนะนำ) ปิดเครื่องเล่นปิดหน้าต่างเทอร์มินัล การดำเนินการนี้จะหยุดการดักจับข้อมูล
  • (ไม่บังคับ แต่แนะนำ) เปิดเบราว์เซอร์ Firefox อัปโหลดการถ่ายโอนข้อมูล (btsnoop_hci.btsnoop บนเดสก์ท็อป) ไปที่ https://btcodecs.valdikss.org.ru/

คุณสามารถฟังเพลงอื่นในโฟลเดอร์เพลงหรืออัปโหลดเพลงของคุณเอง

ไม่ควรมีเสียงแตกเสียงขาดตอนหรือเสียงผิดเพี้ยนอื่น ๆ ในหูฟัง หากคุณได้ยินเสียงคุณภาพสูงนั่นหมายความว่าหูฟังของคุณรองรับเสียงที่มีอัตราบิต 485 kbps

วิธีทดสอบบนอุปกรณ์ Android

ในการทดสอบจากสมาร์ทโฟนหรือแท็บเล็ต Android คุณต้องใช้บลูทู ธ สแต็คที่แก้ไขแล้วซึ่งต้องใช้สิทธิ์รูท

วิธีถ่ายโอนข้อมูลบลูทู ธ บน Android

  1. ปิดบลูทู ธ
  2. ในการตั้งค่านักพัฒนาให้เปิดสวิตช์“ เปิดใช้งานบันทึกการสอดแนมบลูทู ธ HCI”
  3. เปิดบลูทู ธ เชื่อมต่อกับชุดหูฟังของคุณโดยใช้เมนูบลูทู ธ (สิ่งนี้สำคัญห้ามเชื่อมต่ออัตโนมัติ!)
  4. เล่นตัวอย่างเสียงสั้น ๆ
  5. เปิดการตั้งค่านักพัฒนาปิดสวิตช์“ เปิดใช้งานบันทึกการสอดแนมบลูทู ธ HCI”;
  6. ควรมีการสร้าง /storage/emulated/0/btsnoop_hci.log หรือ /data/misc/bluetooth/logs/btsnoop_hci.log หากไม่มีให้เปิด /etc/bluetooth/bt_stack.conf ด้วยโปรแกรมแก้ไขข้อความและดูเส้นทางในตัวเลือก BtSnoopFileName

ไม่ควรมีเสียงแตกเสียงขาดตอนหรือเสียงผิดเพี้ยนอื่น ๆ ในหูฟัง หากคุณได้ยินเสียงคุณภาพสูงที่มีไลบรารีที่ได้รับการแก้ไขนั่นหมายความว่าหูฟังของคุณรองรับเสียงที่มีอัตราบิต 512 kbps

โปรดปฏิบัติตามอัลกอริทึมด้านบนอย่างระมัดระวัง โดยเฉพาะอย่างยิ่งหากคุณปิดหูฟังหรือตัดการเชื่อมต่อหลังจากจับคู่สิ่งสำคัญคือต้องเชื่อมต่อกับหูฟังด้วยตนเองจากการตั้งค่าบลูทู ธ อย่าอนุญาตให้เชื่อมต่ออัตโนมัติ!

อุปกรณ์ที่รองรับ SBC อย่างน้อย 512 kbit / s

  • 1MORE iBFree
  • JBL เอเวอเรสต์ 310
  • JBL เอเวอเรสต์ 700
  • Skullcandy HESH 3
  • โซนี่ WI-C400
  • โซนี่ MDR-1ABT
  • โซนี่ MDR-ZX770BT
  • โซนี่ MDR-XB650BT
  • โซนี่ MDR-XB950B1
  • โซนี่ SBH50
  • Bluedio T4s (Bitpool max 39. ตอบสนองเพื่อไม่รองรับ Dual Channel แต่ทำงานได้หากถูกบังคับ 462 kbit / s ไม่เป็นไปตามข้อกำหนด A2DP)
  • Bluedio T5 (ตอบสนองเพื่อไม่รองรับ Dual Channel แต่จะทำงานได้หากถูกบังคับไม่เป็นไปตามข้อกำหนด A2DP)
  • Bluedio T6 (ตอบสนองเพื่อไม่รองรับ Dual Channel แต่ทำงานได้หากถูกบังคับไม่เป็นไปตามข้อกำหนด A2DP ใช้ชิปสูงสุด 97220)
  • Marshall Major II Bluetooth
  • Overdrive RealForce D1
  • Edifier W830BT
  • DEXP BT-250
  • Logitech BT Adapter
  • หน่วยหัวยานยนต์ที่ไม่ใช่ชื่อ (ชิป CSR8645)
  • เฮดยูนิตยานยนต์ Sony DSX-A400BT

อุปกรณ์ที่รองรับ SBC สูงกว่า 512 kbit / s

  • JBL Everest 310 (617-660 กิโลบิต / วินาที)
  • Sony WI-C400 (576 กิโลบิต / วินาที)
  • Sony MDR-ZX770BT (617-660 กิโลบิต / วินาที)
  • Marshall Major II Bluetooth (617-660 kbit / s)
  • Overdrive RealForce D1 (730 kbit / s, dual channel, 4 subbands)

อุปกรณ์ที่ใช้บิตเรตที่สูงกว่าหรือ Dual Channel ไม่ได้

  1. Harper HB-202 (เสียงแตก; ชิป Beken BK3256)
  2. Sony Ericsson MW600 (การบิดเบือนความถี่สูงเสียงแตกอุปกรณ์จากปี 2009)

เหตุใดจึงสำคัญ: SBC 328k และ 485k เทียบกับ aptX

ตรงกันข้ามกับความเชื่อที่นิยมในคุณภาพเสียง aptX ในบางกรณีอาจให้คุณภาพเสียงที่แย่กว่า SBC ที่มีบิตเรตมาตรฐาน 328k

SBC จะจัดสรรบิตเชิงปริมาณสำหรับย่านความถี่แบบไดนามิกโดยทำหน้าที่ 'จากล่างขึ้นบน' หากใช้บิตเรตทั้งหมดสำหรับความถี่ต่ำและกลางความถี่ด้านบนจะ“ ถูกตัดออก” (ปิดเสียง)

aptX วัดคลื่นความถี่ที่มีจำนวนบิตเท่ากันอย่างต่อเนื่องซึ่งทำให้ตัวแปลงรหัสบิตเรตคงที่: 352 kbps สำหรับ 44.1 kHz, 384 kbps สำหรับ 48 kHz ไม่สามารถ 'โอนบิต' ไปยังความถี่ที่ส่วนใหญ่ต้องการได้ ซึ่งแตกต่างจาก SBC ตรงที่ aptX จะไม่ 'ตัด' ความถี่ แต่จะเพิ่มเสียงรบกวนในการหาปริมาณลดช่วงไดนามิกของเสียงและบางครั้งก็ทำให้เกิดเสียงแตก ในทางตรงกันข้าม SBC“ กินรายละเอียด” - ทิ้งพื้นที่ที่เงียบที่สุด

โดยเฉลี่ยแล้วเมื่อเทียบกับ SBC 328k aptX จะทำให้ดนตรีมีความผิดเพี้ยนน้อยลงด้วยช่วงความถี่กว้าง แต่สำหรับเพลงที่มีช่วงความถี่แคบและช่วงไดนามิกกว้าง SBC 328k บางครั้งก็ชนะ

ขอให้เราพิจารณาเป็นกรณีพิเศษคือการบันทึกเสียงเปียโน นี่คือโปรแกรมสเปกตรัม:


พลังงานส่วนใหญ่อยู่ในความถี่ 0-4 kHz และอยู่ได้ถึง 10 kHz
สเปกโตรแกรมของไฟล์ aptX ไฟล์มีลักษณะดังนี้:

นี่คือ SBC 328k:

จะเห็นได้ว่า SBC 328k ตัดช่วงที่สูงกว่า 16 kHz เป็นระยะ ๆ และใช้บิตเรตที่มีอยู่ทั้งหมดสำหรับช่วงที่ต่ำกว่าค่านี้ อย่างไรก็ตาม aptX นำเสนอความผิดเพี้ยนมากขึ้นในสเปกตรัมความถี่ที่ได้ยินโดยหูของมนุษย์ซึ่งสามารถมองเห็นได้จากสเปกโตรแกรมดั้งเดิมที่ลบออกจากสเปกตรัม aptX (ยิ่งสว่างขึ้นความผิดเพี้ยนก็ยิ่งมากขึ้น):


ในขณะที่ SBC 328k นำสัญญาณที่ผิดเพี้ยนน้อยลงในช่วง 0 ถึง 10 kHz และส่วนที่เหลือได้รับการсut:

Bitrate 485k สำหรับ SBC เพียงพอที่จะบันทึกช่วงความถี่ทั้งหมดโดยไม่ต้องตัดแถบ

SBC 485k ในตัวอย่างเสียงนี้ดีกว่า aptX มากในช่วง 0-15 kHz และมีความแตกต่างที่น้อยกว่า แต่ยังเห็นได้ชัด - ที่ 15-22 kHz (ยิ่งมืดความเพี้ยนน้อยกว่า):

เมื่อเปลี่ยนไปใช้ SBC ที่มีบิตเรตสูงคุณจะได้รับเสียงที่เหนือกว่า aptX เกือบตลอดเวลาบนหูฟังใด ๆ

  • original_and_aptx.zip
  • sbc.zip

วิธีปรับเปลี่ยน Bluetooth Stacks บน Android 5 - 7

การปรับเปลี่ยนเหล่านี้ควรใช้กับสแต็คบลูทู ธ Android Bluedroid (Android 5) และ Fluoride (Android 6-7) ไม่รองรับสแต็กที่แก้ไขโดย Qualcomm

แทนที่ Joint Stereo ด้วย Dual Channel ในการกำหนดค่า SBC มาตรฐาน

android / แพลตฟอร์ม / ภายนอก / บลูทู ธ / bluedroid / btif / co / bta_av_co.c: 99

รหัส:

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

แทนที่ A2D_SBC_IE_CH_MD_JOINT ด้วย A2D_SBC_IE_CH_MD_DUAL

เพิ่มลำดับความสำคัญของช่องสัญญาณคู่

android / แพลตฟอร์ม / ภายนอก / บลูทู ธ / bluedroid / btif / co / bta_av_co.c: 41

รหัส:

ถ้า (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT; อื่นถ้า (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; อื่นถ้า (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; อื่นถ้า (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO; ย้ายถ้าด้วย A2D_SBC_IE_CH_MD_DUAL ไปด้านบน
  1. ปิดใช้งานหรือเพิ่มข้อ จำกัด บิตเรต

สแต็กบลูทู ธ Android ไม่เพียง แต่มีขีด จำกัด bitpool เท่านั้น แต่ยัง จำกัด บิตเรต 328 kbit / s หากหูฟังรองรับเช่น bitpool 53 สำหรับ 48 kHz Android จะลดบิตพูลลงเพื่อให้พอดีกับขีด จำกัด 328 kbit / s สิ่งนี้จะเกิดขึ้นหลังจากการเจรจาตัวแปลงสัญญาณในขั้นตอนการเข้ารหัสอย่าคำนึงถึงค่า bitpool ในแพ็กเก็ต Bluetooth SetCapabilities

android / แพลตฟอร์ม / ภายนอก / บลูทู ธ / bluedroid / btif / src / btif_media_task.c: 172

รหัส:

# กำหนด DEFAULT_SBC_BITRATE 328

แทนที่ด้วย 512

  1. (สำหรับการทดลองเท่านั้น) ปิดใช้งานขีด จำกัด MTU

สิ่งนี้จำเป็นสำหรับบิตเรตที่สูงกว่า ~ 580 kbit / s

btif / src / btif_media_task.c: 174

รหัส:

/ * ขนาดเพย์โหลด 2DH5 679 ไบต์ - (4 ไบต์ L2CAP Header + 12 bytes AVDTP Header) * / #define MAX_2MBPS_AVDTP_MTU 663

วิธีแก้ไข Bluetooth Stacks บน Android 8 - 9

การปรับเปลี่ยนเหล่านี้ยังไม่ได้รับการทดสอบ แต่ควรได้ผล

เพิ่มการรองรับ Dual Channel ใน A2DP SBC Source

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

รหัส:

/ * ความสามารถของตัวแปลงสัญญาณ SBC SRC * / คงที่ tA2DP_SBC_CIE a2dp_sbc_caps = A2DP_SBC_IE_BLOCKS_8;

เพิ่ม A2DP_SBC_IE_CH_MD_DUAL ใน ch_mode

แทนที่ Joint Stereo ด้วย Dual Channel ในการกำหนดค่าเริ่มต้น

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

รหัส:

/ * เริ่มต้น 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 * /};

แทนที่ A2DP_SBC_IE_CH_MD_JOINT ด้วย A2DP_SBC_IE_CH_MD_DUAL

เพิ่มลำดับความสำคัญของช่องสัญญาณคู่

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

รหัส:

บูลแบบคงที่ 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- A2DP_SBC_IE_CH_MD_JOINT-A2) p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; กลับจริง } ถ้า (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; กลับจริง } ถ้า (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; กลับจริง } ถ้า (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; กลับจริง } กลับเท็จ; }

ย้ายถ้าด้วย A2DP_SBC_IE_CH_MD_DUAL ไปด้านบน

เพิ่มขีด จำกัด บิตเรต

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

รหัส:

#define A2DP_SBC_DEFAULT_BITRATE 328

แทนที่ด้วย 512

  1. (สำหรับการทดลองเท่านั้น) ปิดใช้งานขีด จำกัด MTU

สิ่งนี้จำเป็นสำหรับบิตเรตที่สูงกว่า ~ 580 kbit / s

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

รหัส:

# กำหนด MAX_2MBPS_AVDTP_MTU 663

บลูทู ธ ที่ติดตั้งแล้ว (Flashable)

  • เลอแม็กซ์ 2 โอรีโอ 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 (รีมิกซ์ 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
  • เลอแม็กซ์ 2 โอรีโอ Patched.zip
  • Huawei P9 (Android 7) .zip
  • Samsung Galaxy S4 LTE GT-I9505 (Android 7.1.2; LineageOS 14.1-20180615-NIGHTLY-jfltexx) .zip
  • ซิป
  • เลอแม็กซ์ 2 โอรีโอ Patched.zip
อ่าน 10 นาที