ส่วนนี้จะให้ข้อมูลที่จำเป็นในการเริ่มต้นใช้งาน API ของ OpenSL ES
เพิ่ม OpenSL ES ลงในแอป
คุณสามารถเรียกใช้ OpenSL ES จากทั้งโค้ด C และ C++ วิธีเพิ่ม OpenSL ES หลัก
ที่ตั้งค่าฟีเจอร์ให้กับแอปของคุณ ให้รวมไฟล์ส่วนหัว OpenSLES.h
ดังนี้
#include <SLES/OpenSLES.h>
วิธีเพิ่มส่วนขยาย Android สำหรับ OpenSL ES
ให้รวมไฟล์ส่วนหัว OpenSLES_Android.h
ด้วย ดังนี้
#include <SLES/OpenSLES_Android.h>
เมื่อรวมไฟล์ส่วนหัว OpenSLES_Android.h
ระบบจะรวมส่วนหัวต่อไปนี้ด้วย
โดยอัตโนมัติ:
#include <SLES/OpenSLES_AndroidConfiguration.h> #include <SLES/OpenSLES_AndroidMetadata.h>
หมายเหตุ: ส่วนหัวเหล่านี้ไม่จำเป็นแต่จะแสดงเป็นตัวช่วยในการเรียนรู้ API
สร้างและแก้ไขข้อบกพร่อง
คุณสามารถรวม OpenSL ES ไว้ในบิลด์ด้วยการระบุใน
Android.mk
ที่ทำหน้าที่เป็นหนึ่งใน
NDK จะสร้างไฟล์ Manifest ของระบบ เพิ่มบรรทัดต่อไปนี้ใน
Android.mk
:
LOCAL_LDLIBS += -lOpenSLES
เพื่อการแก้ไขข้อบกพร่องอย่างมีประสิทธิภาพ เราขอแนะนำให้คุณตรวจสอบค่า SLresult
ที่
OpenSL ES API คุณสามารถใช้
ยืนยัน
หรือตรรกะการจัดการข้อผิดพลาดขั้นสูงขึ้นไปสำหรับการแก้ไขข้อบกพร่อง ไม่มีข้อเสนอใด
ข้อได้เปรียบโดยธรรมชาติสำหรับการทำงานกับ OpenSL ES แม้ว่าอย่างใดอย่างหนึ่งอาจเหมาะสมกว่า
สำหรับกรณีการใช้งานหนึ่งๆ
เราใช้การยืนยันใน ตัวอย่าง เนื่องจากช่วยตรวจจับเงื่อนไขที่ไม่สมจริงซึ่งระบุข้อผิดพลาดในการเขียนโค้ด พ ใช้การจัดการข้อผิดพลาดที่ชัดเจนสำหรับเงื่อนไขอื่นๆ ที่มีแนวโน้มสูงว่าจะเกิดในเวอร์ชันที่ใช้งานจริง
ข้อผิดพลาด API จำนวนมากทำให้เกิดรายการบันทึก นอกเหนือจากโค้ดผลลัพธ์ที่ไม่ใช่ 0 รายการบันทึกดังกล่าว
สามารถให้รายละเอียดเพิ่มเติมซึ่งพิสูจน์แล้วว่ามีประโยชน์เป็นพิเศษสำหรับ API ที่ค่อนข้างซับซ้อน เช่น
Engine::CreateAudioPlayer
คุณจะดูบันทึกได้จากบรรทัดคำสั่งหรือจาก Android Studio หากต้องการตรวจสอบบันทึกจาก บรรทัดคำสั่ง ให้พิมพ์ดังนี้
$ adb logcat
หากต้องการตรวจสอบบันทึกจาก Android Studio ให้เลือกดู > หน้าต่างเครื่องมือ > Logcat โปรดดูข้อมูลเพิ่มเติมที่หัวข้อเขียนและดูบันทึกด้วย Logcat
โค้ดตัวอย่าง
เราขอแนะนำให้ใช้โค้ดตัวอย่างที่รองรับและทดสอบซึ่งสามารถใช้เป็นโมเดลสำหรับตัวคุณเอง ซึ่งอยู่ใน เสียงสะท้อน และ เสียงเนทีฟ ของ GitHub android-ndk ที่เก็บได้
ข้อควรระวัง: ข้อกำหนด OpenSL ES 1.0.1 มีโค้ดตัวอย่างในภาคผนวก (โปรดดู รีจิสทรี Khronos OpenSL ES เพื่อดูรายละเอียดเพิ่มเติม) แต่ตัวอย่างในภาคผนวก B: โค้ดตัวอย่าง และ ภาคผนวก C: โค้ดตัวอย่างของ Use Case ใช้ฟีเจอร์ที่ Android ไม่รองรับ ใช้บ้าง เช่น มีข้อผิดพลาดเกี่ยวกับการพิมพ์ หรือใช้ API ที่มีแนวโน้มจะเปลี่ยนแปลง ดำเนินการต่อด้วย ข้อควรระวังเมื่อกล่าวถึงรายการเหล่านี้ แม้ว่าโค้ดอาจมีประโยชน์ในการทำความเข้าใจ OpenSL ES ฉบับเต็ม มาตรฐานนี้ ซึ่งไม่ควรนำมาใช้ ตามที่เป็นใน Android
เนื้อหาเสียง
วิธีการต่างๆ ในการจัดแพ็กเกจเนื้อหาเสียงสำหรับแอปพลิเคชันของคุณมีดังนี้
- แหล่งข้อมูล: เมื่อวางไฟล์เสียงลงในโฟลเดอร์
res/raw/
คุณสามารถเข้าถึงรายการดังกล่าวได้อย่างง่ายดายโดย API ที่เชื่อมโยงสำหรับResources
อย่างไรก็ตาม ไม่มีการเข้าถึงโดยตรงไปยังทรัพยากรโดยตรง คุณจึงต้องเขียน Java โค้ดภาษาโปรแกรมสำหรับคัดลอก ก่อนใช้งาน - เนื้อหา: การวางไฟล์เสียงลงในโฟลเดอร์
assets/
จะทำให้ไฟล์เหล่านั้น จะเข้าถึงได้โดยตรงโดย API โปรแกรมจัดการเนื้อหาในเครื่อง Android ดูไฟล์ส่วนหัวandroid/asset_manager.h
และandroid/asset_manager_jni.h
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องเหล่านี้ API โค้ดตัวอย่างที่อยู่ใน Android-ndk ที่เก็บ GitHub ใช้ API โปรแกรมจัดการเนื้อหาแบบเนทีฟเหล่านี้ร่วมกับไฟล์ Android Data Loscriptor Data Locator - เครือข่าย: คุณใช้ตัวระบุตำแหน่งข้อมูล URI เพื่อเล่นเนื้อหาเสียงได้โดยตรง จากเครือข่าย แต่โปรดอ่าน ความปลอดภัยและสิทธิ์
- ระบบไฟล์ในเครื่อง: ตัวระบุตำแหน่งข้อมูล URI รองรับชุดรูปแบบ
file:
สำหรับไฟล์ในตัวเครื่อง หากไฟล์สามารถเข้าถึงได้โดยแอปพลิเคชัน โปรดทราบว่า Android เฟรมเวิร์กความปลอดภัยจะจำกัดการเข้าถึงไฟล์ผ่านกลไก User ID และ Group ID ใน Linux - บันทึกเสียง: แอปพลิเคชันสามารถบันทึกข้อมูลเสียงจากอินพุตไมโครโฟน เก็บเนื้อหานี้แล้วเล่นอีกครั้งในภายหลัง โค้ดตัวอย่างใช้วิธีนี้สำหรับแท็ก เล่นคลิป
- คอมไพล์และลิงก์แบบอินไลน์: คุณสามารถลิงก์เนื้อหาเสียงลงใน
ไลบรารีที่ใช้ร่วมกัน แล้วเล่นโดยใช้โปรแกรมเล่นเสียงที่มีตัวระบุตำแหน่งข้อมูลคิวบัฟเฟอร์ ช่วงเวลานี้
เหมาะที่สุดสำหรับคลิปรูปแบบ PCM สั้นๆ โค้ดตัวอย่างใช้เทคนิคนี้สำหรับแท็ก
สวัสดีและคลิป Android ข้อมูล PCM ถูกแปลงเป็นสตริงฐานสิบหกโดยใช้
เครื่องมือ
bin2c
(ไม่ได้ให้ไว้) - การสังเคราะห์แบบเรียลไทม์: แอปพลิเคชันของคุณสามารถสังเคราะห์ข้อมูล PCM ได้ทันทีและ จากนั้นเล่นโดยใช้โปรแกรมเล่นเสียงที่มีตัวระบุตำแหน่งข้อมูลคิวบัฟเฟอร์ ขั้นตอนนี้เป็นขั้นตอนขั้นสูง และรายละเอียดของการสังเคราะห์เสียงนั้นอยู่นอกเหนือขอบเขตของบทความนี้
หมายเหตุ: การค้นหาหรือการสร้างเนื้อหาเสียงที่เป็นประโยชน์สำหรับแอปพลิเคชันของคุณอยู่นอกเหนือขอบเขตของบทความนี้ คุณใช้ข้อความค้นหาเว็บ เช่น เสียงแบบโต้ตอบ เสียงในเกม เสียงได้ การออกแบบ และการเขียนโปรแกรมเสียงเพื่อค้นหาข้อมูลเพิ่มเติม
ข้อควรระวัง: เป็นความรับผิดชอบของคุณ เพื่อให้แน่ใจว่าคุณได้รับอนุญาตตามกฎหมายให้เล่นหรือบันทึกเนื้อหา อาจมีความเป็นส่วนตัว ข้อควรพิจารณาสำหรับการบันทึกเนื้อหา
ตัวอย่างโค้ด
ตัวอย่างแอปเหล่านี้มีอยู่ในหน้า GitHub ของเรา
- เสียงสะท้อน จะสร้างลูปการวนรอบอินพุตและเอาต์พุต
- เสียงเนทีฟ คือโปรแกรมอัดเสียง/โปรแกรมเล่นเสียงที่เรียบง่าย
การใช้งาน Android NDK ของ OpenSL ES แตกต่างกัน จากข้อกำหนดอ้างอิงสำหรับ OpenSL ES 1.0.1 ในหลายๆ ด้าน ความแตกต่างเหล่านี้คือสาเหตุสำคัญที่ทำให้โค้ดตัวอย่าง ที่คุณคัดลอกโดยตรงจากข้อกำหนดการอ้างอิง OpenSL ES อาจไม่ทำงานใน แอปสำหรับ Android
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างข้อกำหนดข้อมูลอ้างอิงและ การใช้งาน Android โปรดดู OpenSL ES สำหรับ Android