2010-05-04 2 views
5

Sembra che questa domanda sia già stata fatta prima, vorrei solo sapere se c'è un aggiornamento in Android.Audio a basso ritardo su Android via NDK

Ho in programma di scrivere un'applicazione audio che coinvolge I/O audio a ritardo ridotto (circa < 10 ms). Sembra non essere possibile sulla base dei metodi proposti dall'SDK, quindi c'è - nel frattempo - un modo per raggiungere questo obiettivo utilizzando l'NDK?

risposta

4

attualmente non ci sono librerie nel NDK per accedere al sistema audio Android, almeno nessuno che è considerato sicuro da usare (sono stabili).

Avete eseguito test con la classe AudioTrack? È la più bassa opzione di latenza disponibile al momento.

+0

Il problema è il vincolo di buffer minimo della classe AudioTrack. Questa dimensione è significativamente troppo grande per realizzare un audio a basso ritardo. E su dispositivi reali (Motorola Droid), il buffersize mostrato è persino più alto che con l'emulatore. – user332530

+0

@hkhauke Le dimensioni del buffer AudioTrack non influiscono sulla latenza della riproduzione audio. Per dirla in altro modo non devi riempire il buffer AudioTrack per avviare la riproduzione se hai impostato MODE_STREAM. La vera domanda sarà la velocità con cui il sistema audio sottostante in Android si comporta e la velocità con cui l'hardware audio stesso è. – Mark

+0

Grazie per questo suggerimento, metterò alla prova quella modalità! – user332530

0

Attualmente 2 API principali sono esposte in NDK per l'audio: OpenSL (da Android 2.3 livello Api 9) OpenMAX AL (da Android 4.0 Livello Api 14)

Un buon punto di partenza per conoscere l'API OpenSL in Android è nel codice di esempio dell'NDK: guarda l'esempio "nativo-audio".

misura sulle prestazioni sono state fatte in questo blog: http://audioprograming.wordpress.com/

Come sintesi delle migliori latenze ottenuti sono stati di circa 100-200ms, lontano dalla vostra destinazione. Ma, dalla documentazione Android NDK, l'interfaccia OpenSL è quella che in futuro beneficerà maggiormente dell'accelerazione HW per andare verso bassa latenza.