Inizia

Questa sezione fornisce le informazioni necessarie per iniziare a utilizzare le API OpenSL ES.

Aggiungi OpenSL ES alla tua app

Puoi chiamare OpenSL ES sia dal codice C che dal codice C++. Aggiungere l'OpenSL ES principale di funzionalità per la tua app, includi il file di intestazione OpenSLES.h:

#include <SLES/OpenSLES.h>

Per aggiungere le estensioni Android OpenSL ES: includi anche il file di intestazione OpenSLES_Android.h:

#include <SLES/OpenSLES_Android.h>

Quando includi il file di intestazione OpenSLES_Android.h, vengono incluse le seguenti intestazioni automaticamente:

#include <SLES/OpenSLES_AndroidConfiguration.h>
#include <SLES/OpenSLES_AndroidMetadata.h>

Nota: Queste intestazioni non sono obbligatorie, ma vengono mostrate come ausilio per l'apprendimento dell'API.

Creazione e debug

Puoi incorporare OpenSL ES nella tua build specificandolo nel Android.mk che funge da file Makefile del sistema di compilazione NDK. Aggiungi la seguente riga a Android.mk:

LOCAL_LDLIBS += -lOpenSLES

Per un debug efficace, ti consigliamo di esaminare il valore SLresult che la maggior parte delle le API OpenSL ES. Puoi utilizzare asserzioni o una logica di gestione degli errori più avanzata per il debug; nessuna delle due offerte un vantaggio intrinseco nel lavorare con OpenSL ES, anche se uno dei due potrebbe essere più adatto per un determinato caso d'uso.

Usiamo le asserzioni nei nostri esempi, perché permettono di rilevare condizioni non realistiche che potrebbero indicare un errore di programmazione. Me hanno utilizzato una gestione esplicita degli errori per altre condizioni che hanno maggiori probabilità di verificarsi in produzione.

Molti errori dell'API generano una voce di log, oltre a un codice risultato diverso da zero. Queste voci di log può fornire ulteriori dettagli che si rivelano particolarmente utili per API relativamente complesse come Engine::CreateAudioPlayer.

Puoi visualizzare il log dalla riga di comando o da Android Studio. Per esaminare il log nella riga di comando, digita quanto segue:

$ adb logcat

Per esaminare il log da Android Studio, seleziona Visualizza > Finestre degli strumenti > Logcat. Per ulteriori informazioni, consulta Scrivere e visualizzare i log con Logcat.

Codice di esempio

Ti consigliamo di utilizzare codice di esempio supportato e testato che possa essere utilizzato come modello codice, che si trova eco-audio e audio nativo delle cartelle GitHub android-ndk repository Git.

Attenzione: La specifica OpenSL ES 1.0.1 contiene codice di esempio nelle appendici (vedi Registro Khronos OpenSL ES per ulteriori informazioni). Tuttavia, gli esempi nell'Appendice B: Codice di esempio e L'Appendice C: codice di esempio del caso d'uso utilizza funzionalità non supportate da Android. Alcune contengono anche errori tipografici o utilizzano API che potrebbero cambiare. Procedi con attenzione quando ci si riferisce a questi argomenti: sebbene il codice possa essere utile per comprendere l'intero OpenSL ES standard, non deve essere usato così com'è con Android.

Contenuti audio

Di seguito sono riportati alcuni dei molti modi per pacchettizzare i contenuti audio per la tua applicazione:

  • Risorse. Inserendo i file audio nella cartella res/raw/, sono facilmente accessibili dalle API associate Resources. Tuttavia, non esiste un accesso nativo diretto alle risorse, quindi devi scrivere codice Java codice del linguaggio di programmazione per copiarli prima dell'uso.
  • Asset. Se i file audio vengono inseriti nella cartella assets/, vengono sono accessibili direttamente dalle API native Asset Manager di Android. Visualizzare i file di intestazione android/asset_manager.h e android/asset_manager_jni.h per ulteriori informazioni al riguardo su quelle di livello inferiore. Il codice di esempio che si trova android-ndk Il repository GitHub utilizza queste API native di gestione degli asset insieme al file Android Descriptor Data locator.
  • Rete: puoi utilizzare il data locator dell'URI per riprodurre direttamente i contenuti audio dalla rete. In ogni caso, leggi l'articolo Sicurezza e autorizzazioni.
  • File system locale: il localizzatore dei dati dell'URI supporta lo schema file:. per i file locali, a condizione che i file siano accessibili all'applicazione. Tieni presente che l'app Android il framework di sicurezza limita l'accesso ai file tramite i meccanismi Linux User-ID e Group ID.
  • Registrato. L'applicazione può registrare dati audio dall'ingresso del microfono. archiviare questi contenuti e riprodurli in un secondo momento. Il codice di esempio utilizza questo metodo per Clip di riproduzione.
  • Compilato e collegato in linea: puoi collegare i tuoi contenuti audio direttamente la libreria condivisa per poi riprodurla utilizzando un lettore audio con un localizzatore di dati a coda di buffer. Questo è più adatta per brevi clip in formato PCM. Il codice di esempio utilizza questa tecnica per Clip Hello e Android. I dati PCM sono stati convertiti in stringhe esadecimali utilizzando un Strumento bin2c (non in dotazione).
  • Sintesi in tempo reale: la tua applicazione può sintetizzare i dati PCM in tempo reale e quindi riproducilo utilizzando un lettore audio con un localizzatore di dati della coda di buffer. Si tratta di un approccio relativamente avanzato e i dettagli della sintesi audio esulano dall'ambito di questo articolo.

Nota: Trovare o creare contenuti audio utili per la tua applicazione esula dall'ambito di questo articolo. Puoi usare termini di ricerca web come audio interattivo, audio dei giochi, suono design e programmazione audio per trovare ulteriori informazioni.

Attenzione:è tua responsabilità per assicurarti di disporre dell'autorizzazione legale per riprodurre o registrare contenuti. Potrebbe esserci privacy considerazioni per la registrazione di contenuti.

Esempi di codice

Queste app di esempio sono disponibili nella nostra pagina GitHub:

  • eco-audio crea un loop di round trip da input a output.
  • audio nativo è un semplice registratore/player audio.

L'implementazione Android NDK di OpenSL ES è diversa dalla specifica di riferimento per OpenSL ES 1.0.1 sotto numerosi aspetti. Queste differenze sono un motivo importante per cui il codice campione che copi direttamente dalla specifica di riferimento OpenSL ES potrebbe non funzionare nel tuo App per Android.

Per ulteriori informazioni sulle differenze tra la specifica di riferimento e per l'implementazione di Android, consulta OpenSL ES per Android.