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 associateResources
. 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 intestazioneandroid/asset_manager.h
eandroid/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.