Computer >> คอมพิวเตอร์ >  >> การแก้ไขปัญหา >> Android

วิธีแก้ไข Bluetooth Stacks บน Android เพื่อคุณภาพเสียง Bluetooth ที่ปรับปรุงอย่างมาก

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

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

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

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

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

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

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

ข้อมูลทางเทคนิคโดยย่อเกี่ยวกับตัวแปลงสัญญาณ SBC

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

การทดสอบความเข้ากันได้ของหูฟัง SBC อัตราบิตสูงเป็นวิธีที่ง่ายที่สุดที่จะทำบนพีซีด้วยอะแดปเตอร์ Bluetooth ฉันได้เตรียมอิมเมจ Ubuntu ด้วยสแต็ก Bluetooth ที่แก้ไขแล้ว ซึ่งสามารถทำงานเหมือนในเครื่องเสมือน (โดยการเชื่อมต่ออะแดปเตอร์ Bluetooth เป็นอุปกรณ์ USB ภายในเครื่องเสมือน มันยังใช้งานได้กับอะแดปเตอร์ที่ติดตั้งในแล็ปท็อป) หรือโดยการบูตจาก แฟลชไดรฟ์ USB ภาพนี้ใช้โปรไฟล์ต่อไปนี้:Dual Channel, 8 bands, 16 blocks, 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
  • ไปที่การตั้งค่าเครื่องเสมือนใน Storage เลือก Controller:IDE, Empty, กดไอคอน CD → เลือกไฟล์ดิสก์ออปติคัลเสมือน
  • เลือก Bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso ที่ดาวน์โหลดไว้
  • บันทึกและปิดหน้าต่างการตั้งค่า เริ่มเครื่องเสมือน
  • คลิกขวาที่ไอคอนสาย USB ที่ด้านล่างขวา เลือกอะแดปเตอร์บลูทูธ

ทำงานบนพีซี

อิมเมจรองรับการบูท BIOS/CSM และ UEFI

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

ทำการทดสอบ

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

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

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

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

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

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

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

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

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

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

  • 1MORE iBFree
  • JBL เอเวอร์เรสต์ 310
  • JBL เอเวอเรสต์ 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. ตอบสนองต่อการไม่สนับสนุน Dual Channel แต่ทำงานได้หากถูกบังคับ 462 kbit/s. ไม่สอดคล้องกับข้อกำหนด A2DP)
  • Bluedio T5 (ตอบสนองต่อการไม่รองรับ Dual Channel แต่ใช้งานได้หากบังคับ ไม่เป็นไปตามข้อกำหนด A2DP)
  • Bluedio T6 (ตอบสนองต่อการไม่รองรับ Dual Channel แต่ใช้งานได้หากบังคับ ไม่เป็นไปตามข้อกำหนด A2DP ใช้ชิป Max 97220)
  • Marshall Major II บลูทูธ
  • โอเวอร์ไดรฟ์ RealForce D1
  • ตัวแก้ไข W830BT
  • DEXP BT-250
  • อะแดปเตอร์ Logitech BT
  • ส่วนหัวของยานยนต์ Noname (ชิป CSR8645)
  • ชุดเครื่องเสียงรถยนต์ Sony DSX-A400BT

อุปกรณ์ที่รองรับ SBC ที่สูงกว่า 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)
  • โอเวอร์ไดรฟ์ 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 ในบางครั้งอาจชนะ

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

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

นี่คือ SBC 328k:
วิธีแก้ไข Bluetooth Stacks บน Android เพื่อคุณภาพเสียง Bluetooth ที่ปรับปรุงอย่างมาก

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

วิธีแก้ไข Bluetooth Stacks บน Android เพื่อคุณภาพเสียง Bluetooth ที่ปรับปรุงอย่างมาก
ในขณะที่ SBC 328k นำเสนอสัญญาณบิดเบือนน้อยลงในช่วงตั้งแต่ 0 ถึง 10 kHz และส่วนที่เหลือถูกตัด:
วิธีแก้ไข Bluetooth Stacks บน Android เพื่อคุณภาพเสียง Bluetooth ที่ปรับปรุงอย่างมาก

บิตเรต 485k สำหรับ SBC ก็เพียงพอที่จะบันทึกช่วงความถี่ทั้งหมด โดยไม่ต้องตัดย่านความถี่ออก
วิธีแก้ไข Bluetooth Stacks บน Android เพื่อคุณภาพเสียง Bluetooth ที่ปรับปรุงอย่างมาก

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

วิธีแก้ไข Bluetooth Stacks บน Android เพื่อคุณภาพเสียง Bluetooth ที่ปรับปรุงอย่างมาก

เมื่อเปลี่ยนไปใช้ 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/platform/external/bluetooth/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/platform/external/bluetooth/bluedroid/btif/co/bta_av_co.c:41

รหัส:

    if (src_cap.ch_mode &A2D_SBC_IE_CH_MD_JOINT)        pref_cap.ch_mode =A2D_SBC_IE_CH_MD_JOINT; อื่น if (src_cap.ch_mode &A2D_SBC_IE_CH_MD_STEREO)        pref_cap.ch_mode =A2D_SBC_IE_CH_MD_STEREO; อื่น if (src_cap.ch_mode &A2D_SBC_IE_CH_MD_DUAL)        pref_cap.ch_mode =A2D_SBC_IE_CH_MD_DUAL; อื่น if (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 ไม่เพียง แต่ขีด จำกัด บิตพูล แต่ยัง จำกัด บิตเรตด้วย 328 kbit / s หากหูฟังรองรับ เช่น bitpool 53 สำหรับ 48 kHz Android จะลด bitpool ลงเพื่อให้พอดีกับขีดจำกัด 328 kbit/s สิ่งนี้จะเกิดขึ้นหลังจากการเจรจาตัวแปลงสัญญาณ ในขั้นตอนการเข้ารหัส อย่าคำนึงถึงค่าบิตพูลในแพ็กเก็ต Bluetooth SetCapabilities

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

รหัส:

#define DEFAULT_SBC_BITRATE 328

แทนที่ด้วย 512

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

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

btif/src/btif_media_task.c:174

รหัส:

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

วิธีการปรับเปลี่ยน Bluetooth Stacks บน Android 8 – 9

การปรับเปลี่ยนเหล่านี้ยังไม่ได้รับการทดสอบ แต่น่าจะใช้ได้

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

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

รหัส:

 / * ความสามารถ SBC SRC ตัวแปลงสัญญาณ * / คง const tA2DP_SBC_CIE a2dp_sbc_caps ={A2DP_SBC_IE_SAMP_FREQ_44 / * samp_freq * / (A2DP_SBC_IE_CH_MD_MONO | A2DP_SBC_IE_CH_MD_JOINT) / * ch_mode * / (A2DP_SBC_IE_BLOCKS_16 | A2DP_SBC_IE_BLOCKS_12 | A2DP_SBC_IE_BLOCKS_8 | A2DP_SBC_IE_BLOCKS_4) / * 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_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_16PER_Spresample/} 

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

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

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

รหัส:

 static bool selects_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; คืนค่าจริง; }  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; คืนค่าจริง; }  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; คืนค่าจริง; }  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; คืนค่าจริง; }  คืนค่าเท็จ}

ย้ายถ้า 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

รหัส:

#define MAX_2MBPS_AVDTP_MTU 663