เสียง

ไอคอน Android Audio HAL

Audio Hardware Abstraction Layer (HAL) ของ Android เชื่อมต่อ API ของเฟรมเวิร์กเฉพาะเสียงในระดับสูงกว่าใน android.media กับไดรเวอร์เสียงและฮาร์ดแวร์พื้นฐาน ส่วนนี้ประกอบด้วยคำแนะนำในการใช้งานและเคล็ดลับในการปรับปรุงประสิทธิภาพ

สถาปัตยกรรมเสียงของ Android กำหนดวิธีการใช้งานฟังก์ชั่นเสียงและชี้ไปที่ซอร์สโค้ดที่เกี่ยวข้องที่เกี่ยวข้องกับการใช้งาน

สถาปัตยกรรมเสียง

รูปที่ 1. สถาปัตยกรรมเสียงของ Android

กรอบการใช้งาน
กรอบงานแอปพลิเคชันประกอบด้วยรหัสแอปซึ่งใช้ android.media API เพื่อโต้ตอบกับฮาร์ดแวร์เสียง ภายในรหัสนี้เรียกคลาสกาว JNI ที่สอดคล้องกันเพื่อเข้าถึงโค้ดเนทีฟที่โต้ตอบกับฮาร์ดแวร์เสียง
JNI
รหัส JNI ที่เชื่อมโยงกับ android.media เรียกรหัสเนทีฟระดับล่างเพื่อเข้าถึงฮาร์ดแวร์เสียง JNI อยู่ใน frameworks/base/core/jni/ และ frameworks/base/media/jni
กรอบงานดั้งเดิม
เนทีฟเฟรมเวิร์กจัดเตรียมเนทีฟเทียบเท่ากับแพ็กเกจ android.media โดยเรียกใช้ Binder IPC proxies เพื่อเข้าถึงบริการเฉพาะด้านเสียงของเซิร์ฟเวอร์สื่อ โค้ดเนทีฟเฟรมเวิร์กจะอยู่ใน frameworks/av/media/libmedia
Binder IPC
Binder พร็อกซี IPC อำนวยความสะดวกในการสื่อสารข้ามขอบเขตของกระบวนการ พร็อกซีจะอยู่ใน frameworks/av/media/libmedia และขึ้นต้นด้วยตัวอักษร "I"
เซิร์ฟเวอร์สื่อ
เซิร์ฟเวอร์สื่อมีบริการเสียงซึ่งเป็นรหัสจริงที่โต้ตอบกับการใช้งาน HAL ของคุณ เซิร์ฟเวอร์สื่อตั้งอยู่ใน frameworks/av/services/audioflinger
ฮัล
HAL กำหนดอินเทอร์เฟซมาตรฐานที่บริการเสียงเรียกเข้าและคุณต้องติดตั้งเพื่อให้ฮาร์ดแวร์เสียงของคุณทำงานได้อย่างถูกต้อง สำหรับรายละเอียดเพิ่มเติมโปรดดู อินเทอร์เฟซ HAL เสียง และความคิดเห็นในไฟล์ *.hal ของไดเร็กทอรีเวอร์ชัน HAL ที่เกี่ยวข้อง
ไดรเวอร์เคอร์เนล
ไดรเวอร์เสียงโต้ตอบกับฮาร์ดแวร์และการใช้งาน HAL ของคุณ คุณสามารถใช้ Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS) หรือไดรเวอร์ที่กำหนดเองได้ (HAL คือไดรเวอร์ไม่เชื่อเรื่องพระเจ้า)

หมายเหตุ : หากคุณใช้ ALSA เราขอแนะนำ external/tinyalsa สำหรับส่วนผู้ใช้ของไดรเวอร์เนื่องจากมีการอนุญาตให้ใช้สิทธิ์ที่เข้ากันได้ (ไลบรารีโหมดผู้ใช้มาตรฐานได้รับอนุญาตจาก GPL)

เสียงเนทีฟของ Android ที่ใช้ Open SL ES (ไม่แสดง)
API นี้ถูกเปิดเผยโดยเป็นส่วนหนึ่งของ Android NDK และอยู่ในระดับสถาปัตยกรรมเดียวกับ android.media