เริ่มเลย

ส่วนนี้จะให้ข้อมูลที่จำเป็นในการเริ่มต้นใช้งาน 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