1 คะแนน โดย GN⁺ 2023-11-25 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

ปรับปรุงคุณภาพเสียงด้วยการแก้ไขสแตกบลูทูธ

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

โค้ดेक SBC

  • SBC มีพารามิเตอร์หลากหลายที่เจรจากันในขั้นตอนตั้งค่าการเชื่อมต่อ: ประเภทและจำนวนช่องสัญญาณเสียง, จำนวนย่านความถี่, จำนวนบล็อกเสียงต่อแพ็กเก็ต, อัลกอริทึมการจัดสรรบิตสำหรับการควอนไทซ์, และค่า bitpool สูงสุดกับต่ำสุดที่ใช้ในกระบวนการควอนไทซ์
  • โดยทั่วไปสแตกบลูทูธในปัจจุบันจะเจรจาชุดตัวเลือกเป็น Joint Stereo, 8 ย่าน, 16 บล็อก, Loudness, bitpool 2..53
  • ค่า bitpool เป็นพารามิเตอร์ที่ใช้เปลี่ยนอัตราบิตในการเข้ารหัส โดยค่ายิ่งสูง อัตราบิตและคุณภาพก็ยิ่งดีขึ้น

การแก้ไขสแตกบลูทูธ

  • สแตกบลูทูธที่เข้ากันได้กับ A2DP ทั้งหมดต้องรองรับโหมด Dual Channel แต่ไม่มีวิธีบังคับใช้โหมดนี้
  • มีการสร้างแพตช์สำหรับ Android 8.1 และ 9 เพื่อเพิ่มโหมด Dual Channel ในเมนูนักพัฒนา และจะแสดงเป็นโค้ดेक "HD Audio" ในการตั้งค่าอุปกรณ์ Bluetooth
  • แพตช์นี้ถูกรวมเข้าไปในเฟิร์มแวร์ทางเลือกอย่าง LineageOS, Resurrection Remix และ crDroid

ที่มาของ 551 และ 452 kbps

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

ทำไมทั้งหมดนี้จึงจำเป็น?

  • ตรงกันข้ามกับความเชื่อทั่วไปเกี่ยวกับคุณภาพเสียงของ aptX ในบางกรณี SBC อาจให้คุณภาพเสียงที่แย่กว่าบิตเรตมาตรฐาน 328k
  • SBC จะจัดสรรบิตสำหรับการควอนไทซ์ให้กับย่านความถี่แบบไดนามิก ขณะที่ aptX จะควอนไทซ์ย่านความถี่ด้วยจำนวนบิตคงที่
  • หากใช้ SBC บิตเรตสูง จะได้คุณภาพเสียงที่ดีกว่า aptX ในกรณีส่วนใหญ่ และในหูฟังที่รองรับ EDR 3 Mb/s ก็ให้คุณภาพเสียงใกล้เคียง aptX HD มาก

ไปได้ไกลกว่านี้อีกไหม?

  • ชุดแพตช์ Android มีตัวเลือกเพิ่มเติมที่สามารถเพิ่มบิตเรตของอุปกรณ์ EDR 2 mbps จาก 452 kbps เป็น 595 kbps ได้
  • สามารถเปิดใช้งานบิตเรตที่สูงขึ้นได้โดยตั้งค่าตัวแปร persist.bluetooth.sbc_hd_higher_bitrate เป็น 1

ความเข้ากันได้กับอุปกรณ์

  • SBC Dual Channel รองรับโดยหูฟัง ลำโพง และเฮดยูนิตในรถยนต์แทบทั้งหมด
  • อุปกรณ์ที่มีปัญหาจากโหมดนี้พบได้น้อยมาก แต่ข้อมูลความเข้ากันได้โดยละเอียดสามารถหาได้จาก 4pda และ xda-developers

การเปรียบเทียบคุณภาพเสียง

  • มีการสร้างเว็บเซอร์วิสที่เข้ารหัสเสียงเป็น SBC แบบเรียลไทม์ในเบราว์เซอร์ (รวมถึง aptX และ aptX HD) เพื่อให้สามารถเปรียบเทียบคุณภาพเสียงของโปรไฟล์ SBC และโค้ดेकต่าง ๆ ได้

การติดต่อกับนักพัฒนา Android

  • มีการขอให้นักพัฒนาสแตกบลูทูธของ Google รวมแพตช์นี้เข้า AOSP แต่ยังไม่ได้รับคำตอบ
  • แม้แต่ในระบบรีวิวโค้ด Gerrit ก็ยังไม่ได้รับความคิดเห็นใด ๆ จากผู้ที่เกี่ยวข้องกับการพัฒนา

บทสรุป

  • ผู้ใช้เฟิร์มแวร์ LineageOS, Resurrection Remix และ crDroid สามารถปรับปรุงคุณภาพเสียงบลูทูธได้ด้วยการเลือกช่องทำเครื่องหมายในการตั้งค่าอุปกรณ์ Bluetooth
  • ผู้ใช้ Linux ก็สามารถติดตั้งแพตช์ของ Pali Rohár เพื่อให้ได้ SBC บิตเรตที่สูงขึ้นเช่นกัน

ความเห็นของ GN⁺

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

1 ความคิดเห็น

 
GN⁺ 2023-11-25
ความคิดเห็นจาก Hacker News
  • ชื่นชมการรองรับอย่างกว้างขวางและความสามารถในการขยายต่ออย่างเป็นธรรมชาติของ SBC

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

  • วิเคราะห์เชิงลึกเกี่ยวกับบั๊กใน Bluetooth stack ของ Android และชี้ให้เห็นความหลากหลายของฮาร์ดแวร์

    บทความนี้ไม่ได้พูดถึง Bluetooth โดยรวม แต่เป็นการวิเคราะห์เชิงลึกเกี่ยวกับบั๊กใน Bluetooth stack ของ Android สิ่งที่ผู้เขียนไม่ได้พูดถึงเลยคือฮาร์ดแวร์ที่ใช้นั้นมีความหลากหลายมาก Android ทำงานอยู่บนชิปเซ็ต Bluetooth จำนวนมหาศาล ดังนั้นแม้แพตช์จะดูเหมือนใช้ได้บนฮาร์ดแวร์ตัวหนึ่ง ก็อาจใช้ไม่ได้บนโทรศัพท์ Android เครื่องอื่น นอกจากนี้ยังอาจขึ้นอยู่กับงานอื่นที่อุปกรณ์กำลังทำอยู่ในขณะนั้นด้วย ตัวอย่างเช่น ถ้าใช้งานชิปเซ็ต BT+Wifi ร่วมกัน และกำลังสตรีมวิดีโอผ่าน Wi‑Fi พร้อมกับสตรีมเสียงไปยังหูฟัง อุปกรณ์ก็ต้องจัดสรรทรัพยากรตามการใช้งาน Wi‑Fi และ BT ดังนั้นเสียงที่เก็บไว้ในเครื่องกับเสียงที่สตรีมจึงไม่จำเป็นต้องได้พารามิเตอร์ของ CODEC เหมือนกันเสมอไป หัวข้อนี้มีความแตกต่างเล็กๆ น้อยๆ มากมายที่ผู้เขียนไม่ได้คำนึงถึง จึงควรอ่านอย่างระมัดระวัง

  • แชร์ประสบการณ์การปรับพารามิเตอร์ SBC และการใช้งาน AAC, aptX, LDAC ผ่าน 'Alternative A2DP Driver' บน Windows

    "Alternative A2DP Driver" มีฟังก์ชันนี้บน Windows สามารถปรับแต่งพารามิเตอร์ SBC ได้เอง และใช้ AAC, aptX (ยังไม่ได้ลอง) ได้ด้วย จากประสบการณ์ของผมมันทำงานได้ดี และสามารถใช้ LDAC กับ Sony XM4 ได้ เป็นเวอร์ชันทดลองแต่ราคาถูก ผมสังเกตได้ว่าระยะ Bluetooth ลดลงในโหมดคุณภาพสูง จึงยืนยันได้จริงว่ามีการเปลี่ยน codec (หรืออย่างน้อยก็มีบางอย่างเปลี่ยนไป) ลิงก์ข้างต้นไม่ได้เป็นลิงก์แอฟฟิลิเอต

  • กล่าวถึงความเป็นไปได้ในการเปิดใช้เสียงบิตเรตสูงขึ้นด้วย SBC XQ และการปรับปรุงคุณภาพเสียงเฮดเซ็ตด้วย mSBC บน Linux

    บน Linux สามารถเปิดใช้เสียง SBC ที่มีบิตเรตสูงขึ้นได้ผ่านสิ่งที่เรียกว่า "SBC XQ" เช่นเดียวกัน ยังสามารถใช้ "mSBC" เพื่อให้ได้เสียงเฮดเซ็ตที่คุณภาพสูงขึ้นได้ด้วย (แน่นอนว่ายังคุณภาพต่ำกว่า SBC หรือ APTX อยู่) หูฟังหลายรุ่นรองรับ codec เสียงที่ดีกว่า แต่การรองรับยังไม่ครอบคลุมทั่วไป และก็ยังไม่แน่ชัดว่าจะช่วยปรับปรุงเสียงแบบสองทางได้จริงหรือไม่ หวังว่า Google จะรวมฟีเจอร์แบบนี้หรือสิ่งที่คล้ายกันเข้าไปแล้วสักที

  • เสนอความจำเป็นของฟีเจอร์ที่อนุญาตให้บัฟเฟอร์ล่วงหน้าได้นานในโปรไฟล์เสียง Bluetooth

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

  • กล่าวถึงประสบการณ์ใช้งานฟีเจอร์ส่งสัญญาณเสียงคุณภาพสูงบน LineageOS และความจำเป็นในการปรับปรุงประสบการณ์ผู้ใช้

    ผมเคยใช้ฟีเจอร์นี้บน LineageOS และพอใจมาก ความสามารถในการส่งเสียงคุณภาพสูงขึ้นไปยังอุปกรณ์อย่างเครื่องเสียงรถยนต์ที่ไม่รองรับ 3P codec นั้นมีประโยชน์มาก และยังให้ประโยชน์อย่างมากกับหูฟังด้วย ประสบการณ์ผู้ใช้อาจยังต้องปรับปรุงอยู่บ้าง แต่ตัวฟีเจอร์เองยอดเยี่ยมมาก

  • กล่าวถึงความจำเป็นในการเพิ่มปี (2019) ในชื่อเรื่อง และระบุว่ามีการนำไปใช้แล้วใน PulseAudio และ PipeWire

    น่าจะดีถ้าเพิ่ม (2019) ไว้ในชื่อเรื่อง มีการอ้างถึง "Bluetooth stack ปัจจุบันทั้งหมด" แต่ความสามารถเหล่านี้ถูกนำไปใช้แล้วใน PulseAudio และ PipeWire

  • มุมมองเชิงสงสัยต่อผลของความแตกต่างของบิตเรตระหว่าง Dual Channel กับ Joint Stereo ที่มีต่อคุณภาพเสียงจริง

    ผมค่อนข้างสงสัยว่า Dual Channel ที่ 551 kbps จะให้คุณภาพที่ดีกว่า Joint Stereo ที่ 328 kbps อย่างเห็นได้ชัดจริงหรือไม่ สำหรับเพลงส่วนใหญ่ ผมสงสัยว่านี่อาจเป็นเพียงการใช้บิตเพิ่มขึ้นเพื่อเข้ารหัสข้อมูลที่ซ้ำซ้อนหรือเปล่า

  • ถามถึงวิธีปรับปรุงคุณภาพ HFP บน MacOS และแชร์ประสบการณ์การใช้ mSBC บน Linux

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

  • เล่าประสบการณ์ที่ไม่รู้ว่าตัวเองใช้งาน SBC อยู่ และแสดงความขอบคุณต่อโพสต์นี้

    ตอนใช้ Lineage 18-1 ผมไม่รู้เลยว่ากำลังใช้ความสามารถของ SBC อยู่ โพสต์นี้ทำให้ผมรู้ว่าผมใช้งานฟีเจอร์ SBC อยู่แล้ว "magic -"