เสียง

ไอคอน HAL เสียงของ Android

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

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

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

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

เฟรมเวิร์กแอปพลิเคชัน
เฟรมเวิร์กแอปพลิเคชันมีโค้ดแอปที่ใช้ API android.media เพื่อ โต้ตอบกับฮาร์ดแวร์เสียง ภายใน โค้ดนี้จะเรียกคลาส JNI glue ที่เกี่ยวข้อง เพื่อเข้าถึงโค้ดแบบเนทีฟที่โต้ตอบกับฮาร์ดแวร์เสียง
JNI
โค้ด JNI ที่เชื่อมโยงกับ android.media จะเรียกโค้ดแบบเนทีฟระดับล่างเพื่อเข้าถึงฮาร์ดแวร์เสียง JNI อยู่ใน frameworks/base/core/jni/ และ frameworks/base/media/jni
เฟรมเวิร์กเนทีฟ
เฟรมเวิร์กเนทีฟมีแพ็กเกจ android.media ที่เทียบเท่ากับเนทีฟ โดยเรียกพร็อกซี Binder IPC เพื่อเข้าถึงบริการเฉพาะเสียงของเซิร์ฟเวอร์สื่อ โค้ดเฟรมเวิร์กดั้งเดิมอยู่ใน frameworks/av/media/libmedia
Binder IPC
พร็อกซี IPC ของ Binder ช่วยให้การสื่อสารข้ามขอบเขตของกระบวนการเป็นไปอย่างราบรื่น พร็อกซีจะอยู่ในframeworks/av/media/libmediaและขึ้นต้นด้วยตัวอักษร "I"
เซิร์ฟเวอร์สื่อ
เซิร์ฟเวอร์สื่อมีบริการเสียง ซึ่งเป็นโค้ดจริงที่ โต้ตอบกับการติดตั้งใช้งาน HAL เซิร์ฟเวอร์สื่ออยู่ใน frameworks/av/services/audioflinger
HAL
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