אני רוצה לנסות

בקטע הזה מפורט המידע הנדרש כדי להתחיל להשתמש בממשקי ה-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 ב-build שלך על ידי ציון Android.mk שמשמש כאחת קובצי makefile של מערכת ה-build של NDK. צריך להוסיף את השורה הבאה אל Android.mk:

LOCAL_LDLIBS += -lOpenSLES

לניפוי באגים יעיל, מומלץ לבדוק את הערך של SLresult שרוב החזרת ממשקי ה-API של OpenSL ES. אפשר להשתמש הצהרות או לוגיקה מתקדמת יותר של טיפול בשגיאות לניפוי באגים; אף אחת מהמוצרים יתרון מובנה לעבודה עם OpenSL ES, אם כי אחד מהשניים עשוי להתאים יותר לתרחיש לדוגמה נתון.

אנחנו משתמשים בהצהרות ב , כי הן עוזרות לזהות תנאים לא מציאותיים שמעידים על שגיאה בתכנות. רביעי השתמשו בטיפול מפורש בשגיאות בתנאים אחרים שיש סיכוי גבוה יותר שיתרחשו בסביבת הייצור.

שגיאות API רבות מובילות לרשומה ביומן, בנוסף לקוד תוצאה שאינו אפס. רשומות כאלה ביומן יכול לספק פרטים נוספים שמהווים הוכחות שימושיות במיוחד לממשקי API מורכבים יחסית, כמו Engine::CreateAudioPlayer

אפשר להציג את היומן משורת הפקודה או מ-Android Studio. כדי לבדוק את היומן מתוך בשורת הפקודה, הקלד את הפקודה הבאה:

$ adb logcat

כדי לבדוק את היומן ב-Android Studio, בוחרים באפשרות תצוגה > Windows בכלי > Logcat . מידע נוסף זמין במאמר כתיבה והצגה של יומנים באמצעות Logcat.

קוד לדוגמה

אנחנו ממליצים להשתמש בקוד לדוגמה נתמך ונבדק, שאפשר להשתמש בו כמודל משלכם שנמצא אודיו-הד וגם Native-audio של התיקיות android-ndk ב-GitHub של מאגר הנתונים.

זהירות: במפרט של OpenSL ES 1.0.1 יש קוד לדוגמה בנספחים (מידע נוסף זמין כאן: Khronos OpenSL ES Registry לקבלת פרטים נוספים). עם זאת, הדוגמאות שבנספח ב': קוד לדוגמה וגם נספח ג': קוד לדוגמה של תרחיש לדוגמה משתמש בתכונות שלא נתמכות ב-Android. במידה מסוימת שכוללות גם שגיאות טיפוגרפיות או שימוש בממשקי API שצפויים להשתנות. המשך עם יש להתייחס להנחיות האלה בזהירות. אבל יכול להיות שהקוד יעזור לכם להבין את תוכן ה-OpenSL המלא. אין להשתמש בו כפי שהוא ב-Android.

תוכן אודיו

בהמשך מפורטות כמה מהדרכים הרבות לארוז תוכן אודיו לאפליקציה שלכם:

  • משאבים: על ידי הצבת קובצי האודיו בתיקייה res/raw/, אפשר לגשת אליהם בקלות דרך ממשקי ה-API שמשויכים אליהם Resources אבל אין גישה ישירה למשאבים האלה, לכן צריך לכתוב ב-Java. את קוד שפת התכנות כדי להעתיק אותם לפני השימוש.
  • נכסים: לאחר הצבת קובצי האודיו בתיקייה assets/, הם נגישים ישירות באמצעות ממשקי ה-API של מנהל הנכסים המקורי של Android. הצגת קובצי הכותרות android/asset_manager.h וגם android/asset_manager_jni.h לקבלת מידע נוסף על אלה ממשקי API. הקוד לדוגמה שנמצא בשדה android-ndk במאגר של ASL ב-GitHub נעשה שימוש בממשקי ה-API המקוריים של מנהל הנכסים הדיגיטליים בשילוב עם קובץ ה-Android. ומתארך.
  • רשת: אפשר להשתמש במאתר הנתונים של URI כדי להפעיל תוכן אודיו באופן ישיר מהרשת. עם זאת, חשוב לקרוא אבטחה והרשאות.
  • מערכת קבצים מקומית: מאתר הנתונים של URI תומך בסכמה file: לקבצים מקומיים, בתנאי שהאפליקציה יכולה לגשת אליהם. שימו לב שאפליקציית Android מסגרת האבטחה מגבילה את הגישה לקבצים באמצעות המנגנונים של מזהי המשתמשים ומזהי הקבוצות של Linux.
  • מוקלט: האפליקציה יכולה להקליט נתוני אודיו מקלט המיקרופון, לאחסן את התוכן הזה ולהפעיל אותו שוב מאוחר יותר. הקוד לדוגמה משתמש בשיטה הזו עבור הפעלה של הקליפ.
  • מחובר ומקושר בתוך השורה: אפשר לקשר את תוכן האודיו ישירות אל בספרייה המשותפת, ואז מפעילים אותה באמצעות נגן אודיו עם מאתר נתונים בתור מאגר נתונים זמני. הזה הוא מתאים במיוחד לקליפים קצרים בפורמט PCM. הקוד לדוגמה משתמש בשיטה הזו עבור שלום וקליפים ל-Android. נתוני ה-PCM הומרו למחרוזות הקסדצימליות באמצעות הכלי bin2c (לא זמין).
  • סינתזה בזמן אמת: האפליקציה יכולה לחבר בין נתוני PCM בזמן אמת ואז מפעילים אותו באמצעות נגן אודיו עם מאתר הנתונים בתור מאגר נתונים זמני. זוהי גישה מתקדמת יחסית והפרטים של סינתזת אודיו לא נכללים במאמר הזה.

הערה: המאמר הזה לא כולל חיפוש או יצירה של תוכן אודיו מועיל לאפליקציה שלכם. אתם יכולים להשתמש במונחי חיפוש באינטרנט כמו אודיו אינטראקטיבי, אודיו במשחקים, צליל עיצוב ותכנות אודיו כדי לאתר מידע נוסף.

זהירות: באחריותכם. כדי להבטיח שיש לך הרשאה חוקית להשמיע או להקליט תוכן. יכול להיות ששמירה על פרטיות בהקלטת תוכן.

דוגמאות קוד

האפליקציות לדוגמה הבאות זמינות בדף שלנו ב-GitHub:

  • אודיו-הד יוצרת לולאה הלוך ושוב בין קלט לפלט.
  • Native-audio הוא מקליט אודיו/נגן אודיו פשוט.

יישום OpenSL ES ב-Android NDK שונה ממפרט העזר של OpenSL ES 1.0.1 כמה מובנים. ההבדלים האלה הם סיבה חשובה לכך שקוד לדוגמה ייתכן שתעתיק ישירות ממפרט ההפניה של OpenSL ES לא יפעל אפליקציה ל-Android.

לקבלת מידע נוסף על ההבדלים בין מפרט ההפניה ב-Android: OpenSL ES ל-Android.