2010-08-09 28 views
10

Sto cercando un modo in Android per riprodurre l'audio in memoria in un modo analogo alla famiglia di metodi waveOutOpen nella programmazione di Windows.API audio di basso livello per Android

I metodi waveOut... essenzialmente consentono a un'applicazione di creare matrici di valori di esempio (come i file WAV in memoria senza le intestazioni) e di riversarli in una coda per la riproduzione sequenziale. Le transizioni di Windows passano da una matrice all'altra, quindi finché l'applicazione continua a scaricare gli array nella coda prima della riproduzione, il programma può creare e riprodurre audio continuo di qualsiasi lunghezza arbitraria. L'API di Windows incorpora inoltre un meccanismo di callback che l'applicazione può utilizzare per indicare lo stato di avanzamento e caricare buffer aggiuntivi.

Per quanto posso dire, l'API audio di Android consente a un'applicazione di riprodurre un file dalla memoria locale o da un URL o da un flusso di memoria. Esiste un modo per fare in modo che Android esegua la "innesca" delle chiamate MediaPlayer.start() in modo che un giocatore effettui le transizioni (senza glitch) nel prossimo al termine del gioco? Sembra che Jet faccia qualcosa del genere, ma solo con il proprio motore di sintesi interno.

C'è un altro modo per accedere all'audio Android in un modo waveOutOpen?

risposta

9
android.media.AudioTrack 

... è la classe che stai probabilmente cercando.

http://developer.android.com/reference/android/media/AudioTrack.html#AudioTrack%28int,%20int,%20int,%20int,%20int,%20int%29

Dopo la creazione di esso è sufficiente alimentarlo con i dati binari con dato formato utilizzando seguente metodo:

AudioTrack.writeTo(...) 
+0

Grazie, che sembra esattamente quello che stavo cercando. Sai se questo funziona nell'emulatore? In Windows Mobile, i metodi waveOutWrite funzionano solo nell'emulatore (molte pause e balbuzie) mentre funzionano correttamente nei dispositivi reali. – MusiGenesis

+0

Non l'ho provato personalmente ma l'ho trovato quando stavo cercando un modo per riprodurre un contenuto MP3 da uno streaming. L'uso di MediaPlayer in emulatore funziona correttamente, a meno che tu non abbia connesso il debuger. Potrebbe essere simile con AudioTrack. – plugmind

+0

Sono abbastanza sicuro che sia MediaPlayer che SoundPool (lo so per certo, lo stavo guardando oggi) utilizzano AudioTrack internamente, quindi direi che funzionerà sicuramente (specialmente vedere come può funzionare anche il mio codice nativo). –

Problemi correlati