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

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

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

เริ่มตั้งแต่ Android 9 เป็นต้นไป การปรับปรุงต่อไปนี้ไม่จำเป็นต้องมีการใช้งานจากพันธมิตร:

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

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

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

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

  • เอฟเฟกต์เอาต์พุตทั้งหมดบังคับให้แปลงจากข้อมูลเสียงทศนิยมเป็น int16 ส่งผลให้สูญเสียความแม่นยำ
  • เอฟเฟ็กต์เอาต์พุตถูกปฏิเสธจากเอาท์พุตซิงก์โดยมีจำนวนช่องสัญญาณมากกว่าสองช่อง

ในรุ่น Android 9 ไปป์ไลน์การประมวลผลเอฟเฟกต์ลูกโซ่ได้รับการอัปเกรดให้รองรับรูปแบบโฟลตแบบหลายช่องสัญญาณ ประเด็นสำคัญ:

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

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

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

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

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