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

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

  • Float: อัปเดตตัวแปลงรหัสและโปรแกรมแยกไฟล์ WAV, FLAC เพื่อรองรับ Float (ความแม่นยำแบบไม่สูญเสียรายละเอียด 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
    • ยืนยันโค้ดเดิม อย่าเพิ่งคิดว่าวิธีนี้ใช้ได้