เสียงความละเอียดสูง

การเปิดตัว Android 10 มีการปรับปรุงต่อไปนี้เพื่อให้เสียงความละเอียดสูง

  • Float: ตัวแปลงรหัส WAV, FLAC และเครื่องมือแยกข้อมูลได้รับการอัปเดตเพื่อรองรับการลอยตัว (ทศนิยม 24 บิตขึ้นไปด้วยความแม่นยำแบบไม่สูญเสียรายละเอียด) เอฟเฟกต์การลดขนาดเสียงและ Virtualizer ได้รับการอัปเดตเป็นลอย MediaPlayer (NuPlayer) อนุญาตให้ใช้ความแม่นยำที่อัปเดตแล้ว
  • ความถี่สูง: ตัวแปลงรหัสและโปรแกรมแยก WAV, FLAC ได้รับการอัปเดตให้รองรับ 192 kHz เอฟเฟกต์เริ่มต้นที่ Android มีให้ได้รับการทดสอบเพื่อรองรับ 192 kHz ที่ความถี่มาตรฐาน ความถี่มาตรฐานที่อนุญาตคือ 88.2 kHz, 96 kHz, 176.4 kHz และ 192 kHz
  • หลายช่องทาง: เอฟเฟกต์การเล่นเริ่มต้นของ Android จะได้รับการทดสอบเพื่อรองรับการรองรับหลายช่องทาง ถึง 8 ช่อง
  • เวลา: ข้อมูลเวลาจะรวมอยู่ในเฟรมเวิร์กเสียง

ตั้งแต่ Android 9 เป็นต้นไป การปรับปรุงต่อไปนี้จะไม่ต้องติดตั้งใช้งานพาร์ทเนอร์

  • จำนวนแทร็กเอาต์พุตไคลเอ็นต์พร้อมกันเพิ่มขึ้นจาก 14 เป็น 40 เนื่องจากอินสแตนซ์ไคลเอ็นต์ของ AudioTrack แบบจำกัดเป็นปัญหาสำหรับแอปใน Android 8.x
  • หน่วยความจำสูงสุดของไคลเอ็นต์/เซิร์ฟเวอร์เพิ่มขึ้นจาก 4 MB เป็น 32 MB (ขึ้นอยู่กับหน่วยความจำทั้งหมดของอุปกรณ์) เพื่อให้เล่นแทร็กเสียงความละเอียดสูงพร้อมกันได้มากขึ้น
  • แทร็กผสมทั้งหมดเพิ่มขึ้นจาก 32 เป็น 256 เพื่อป้องกันการช่วงชิงทรัพยากรระหว่างแอปและ UI ของระบบ

การเปลี่ยนแปลงเอฟเฟกต์เอาต์พุต

ดูเอฟเฟกต์เสียงสำหรับการเปลี่ยนแปลงในรุ่น Android 11

ก่อนการเปิดตัว Android 9 ได้มีการใช้การประมวลผลเชนเอฟเฟกต์ในรูปแบบตัวอย่าง int16 แบบสเตอริโอ ซึ่งมีข้อจำกัดหลายประการดังนี้

  • เอฟเฟกต์เอาต์พุตทั้งหมดจะบังคับให้แปลงข้อมูลจากเสียงที่เป็นทศนิยมไปเป็นแบบ int16 ซึ่งทำให้ความแม่นยำลดลง
  • ระบบปฏิเสธเอฟเฟกต์เอาต์พุตจากซิงค์เอาต์พุตที่มีจํานวนช่องมากกว่า 2

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

  • ระบบได้ย้ายข้อมูลเอฟเฟกต์ซอฟต์แวร์ของ Android ไปยังสเตอริโอแบบลอยตัวแล้ว
  • เอฟเฟกต์เดิมรองรับอะแดปเตอร์รูปแบบ ซึ่งจะแปลง float เป็น int16 ตามต้องการ

ใช้เอฟเฟกต์เอาต์พุต

การใช้งานอ้างอิงสำหรับเอฟเฟกต์เอาต์พุตมีอยู่ใน frameworks/av/media/libeffects

พาร์ทเนอร์ที่ใช้เอฟเฟกต์เอาต์พุตที่กำหนดเองของตนเองควรทำดังนี้สำหรับรุ่น Android 10

  • อัปเดตเอฟเฟกต์เอาต์พุตเพื่อรองรับรูปแบบ Float แบบหลายช่อง โดยทำดังนี้
    • คุณไม่จําเป็นต้องรองรับการประมวลผล Int16 อีกต่อไป
    • รองรับจำนวนช่องสัญญาณเอาต์พุตตั้งแต่ 2-8 (สำหรับความเข้ากันได้ในอนาคต ให้พิจารณานับจํานวนจาก 1–30)
    • รองรับจำนวนช่องอินพุตที่ตรงกับจำนวนช่องเอาต์พุตสำหรับเอฟเฟกต์แทรก เอฟเฟกต์เสริมจะยังเห็นจำนวนช่องอินพุตเป็น 1 (โมโน)
    • รองรับทั้งมาสก์ตำแหน่งช่อง (Canonical) และมาสก์ดัชนีช่องของ (1 << n) - 1
  • หากคุณยังคงต้องรองรับเอฟเฟกต์เอาต์พุตของผู้ให้บริการเดิมต่อไปและอัปเดตไม่ได้ ให้ยืนยันโค้ดเดิมโดยทำดังนี้
    • เอฟเฟกต์เอาต์พุต (แทรก) แบบเดิมต้องปฏิเสธการกำหนดค่าที่ไม่รองรับใน EFFECT_CMD_SET_CONFIG
      • ตรวจสอบว่ารูปแบบเป็น int16
      • ตรวจสอบว่าหน้ากากช่องอินพุตและเอาต์พุตเป็นแบบสเตอริโอ
      • หากการตรวจสอบรายการใดรายการหนึ่งไม่สำเร็จ ให้แสดงผล -EINVAL
    • เอฟเฟกต์เอาต์พุต (เสริม) แบบเดิมได้รับการกำหนดค่าโดย AudioFlinger ด้วยมาสก์ช่องอินพุตโมโนและมาสก์ช่องเอาต์พุตที่อาจเป็นแบบหลายช่อง ทั้งนี้ขึ้นอยู่กับว่าตัวรับสัญญาณเอาต์พุตเป็นแบบหลายช่องหรือไม่ ผู้ขายต้องปฏิเสธการกำหนดค่าที่ไม่รองรับใน EFFECT_CMD_SET_CONFIG
      • ตรวจสอบว่ารูปแบบเป็น int16
      • ตรวจสอบว่ามาสก์ของช่องอินพุตเป็นโมโนและมาสก์ช่องสัญญาณเอาต์พุตเป็นสเตอริโอ
      • หากการตรวจสอบรายการใดรายการหนึ่งไม่สำเร็จ ให้แสดงผล -EINVAL
    • ยืนยันโค้ดเดิม อย่าเพิ่งคิดว่าวิธีนี้ใช้ได้