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