2010-08-09 15 views
10

Estoy buscando algún modo en Android para reproducir audio en memoria de una manera análoga a la familia de métodos waveOutOpen en la programación de Windows.API de audio de bajo nivel para Android

Los métodos waveOut... esencialmente permiten a una aplicación crear matrices de valores de muestra (como archivos WAV en memoria sin los encabezados) y volcarlos en una cola para la reproducción secuencial. Windows transiciones sin problemas de una matriz a la siguiente, por lo que siempre que la aplicación siga volcando matrices en la cola antes de la reproducción, el programa puede crear y reproducir audio continuo de cualquier longitud arbitraria. La API de Windows también incorpora un mecanismo de devolución de llamada que la aplicación puede usar para indicar el progreso y cargar búferes adicionales.

Por lo que puedo decir, la API de audio de Android permite que una aplicación reproduzca un archivo de almacenamiento local o una URL, o de una secuencia de memoria. ¿Hay alguna manera de hacer que Android "haga cola" MediaPlayer.start() llamadas para que un jugador transiciones (sin fallos) en el siguiente al finalizar la reproducción? Parece que Jet hace algo como esto, pero solo con su propio motor de síntesis interno.

¿Hay alguna otra forma de acceder al audio de Android en una forma waveOutOpen?

Respuesta

9
android.media.AudioTrack 

... es la clase que probablemente esté buscando.

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

después de crearlo simplemente alimenta con datos binarios con formato determinado utilizando el método siguiente:

AudioTrack.writeTo(...) 
+0

Gracias, que se parece exactamente lo que estaba buscando. ¿Sabes si esto funciona en el emulador? En Windows Mobile, los métodos waveOutWrite solo funcionaron en el emulador (muchas pausas y tartamudeos) mientras funcionaba bien en los dispositivos reales. – MusiGenesis

+0

No lo probé personalmente, pero lo encontré cuando estaba buscando una forma de reproducir un contenido de MP3 de una transmisión. Usar MediaPlayer en el emulador funciona bien a menos que tengas un debueger conectado. Puede ser similar con AudioTrack. – plugmind

+0

Estoy bastante seguro de que tanto MediaPlayer como SoundPool (conozco este caso de hecho, lo estaba viendo hoy) usan AudioTrack internamente, así que diría que definitivamente se ejecutará (especialmente viendo cómo se puede ejecutar) mi código nativo también). –

Cuestiones relacionadas