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

รูปที่ 1. สถาปัตยกรรมเสียง Android
- กรอบงานการสมัคร
- กรอบงานแอปพลิเคชันประกอบด้วยรหัสแอป ซึ่งใช้ android.media APIs เพื่อโต้ตอบกับฮาร์ดแวร์เสียง ภายในโค้ดนี้เรียกใช้คลาสกาว JNI ที่เกี่ยวข้องเพื่อเข้าถึงโค้ดเนทีฟที่โต้ตอบกับฮาร์ดแวร์เสียง
- JNI
- รหัส JNI ที่เชื่อมโยงกับ android.media เรียกโค้ดเนทีฟระดับล่างเพื่อเข้าถึงฮาร์ดแวร์เสียง JNI ตั้งอยู่ใน
frameworks/base/core/jni/
และframeworks/base/media/jni
- เฟรมเวิร์กดั้งเดิม
- เฟรมเวิร์กเนทีฟให้เนทีฟเทียบเท่ากับแพ็คเกจ android.media โดยเรียกพร็อกซี Binder IPC เพื่อเข้าถึงบริการเสียงเฉพาะของเซิร์ฟเวอร์สื่อ โค้ดเฟรมเวิร์กดั้งเดิมอยู่ใน
frameworks/av/media/libmedia
- สารยึดเกาะ 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-licensed) - เสียงเนทีฟของ Android ที่ใช้ Open SL ES (ไม่แสดง)
- API นี้เปิดเผยโดยเป็นส่วนหนึ่งของ Android NDK และอยู่ในระดับสถาปัตยกรรมเดียวกับ android.media