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

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

  • Float: เราได้อัปเดตตัวแปลงสัญญาณและตัวแยกสัญญาณ WAV, FLAC เพื่อรองรับ float (ความแม่นยำแบบไม่สูญเสียข้อมูล 24 บิตขึ้นไป) และอัปเดตเอฟเฟกต์ Downmix และ Virtualizer เป็น float นอกจากนี้ 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 เราได้อัปเกรดไปป์ไลน์การประมวลผลเชนเอฟเฟกต์ เพื่อรองรับรูปแบบ float แบบหลายช่อง ประเด็นสำคัญมีดังนี้

  • เราได้ย้ายเอฟเฟกต์ซอฟต์แวร์ของ Android ไปเป็น float แบบสเตอริโอแล้ว
  • ระบบรองรับเอฟเฟกต์เดิมด้วยอะแดปเตอร์รูปแบบ ซึ่งจะแปลง 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
    • ตรวจสอบโค้ดเดิม อย่าคิดว่าโค้ดจะทำงานได้