android android-asynctask mp3 audiotrack jlayer

android - Use AudioTrack con decodificador JLayer



android-asynctask mp3 (1)

¿Ha intentado sincronizar las funciones de decodificación y audioTrack.write para ver qué está demorando su tarea Async? No creo que audioTrack.write sea el problema.

Mi experiencia con JLayer es que puede ser demasiado lenta para la decodificación en tiempo real, especialmente si está trabajando con audio con calidad de CD (estéreo, frecuencia de muestreo de 44.1kHz).

Si puede aumentar su SDK base, Media Codec podría ser una buena forma de hacerlo: http://developer.android.com/reference/android/media/MediaCodec.html

También puedes ver cómo implementar tu audio usando openSL es. Esta publicación trata sobre algunos de los desafíos y soluciones para la programación de audio de Android : pesadilla de programación de audio de Android : Soundpool, Audiotrack arrghh?

Estoy trabajando en la aplicación Android que está utilizando la biblioteca JLayer para decodificar archivos MP3 (necesito acceso a muestras de audio) y el objeto AudioTrack para reproducirlo. Tengo algo como esto:

int timeMarker = 0; int timeStep = 5000; while (!isCancelled()) { outSignalBuffer = decode(fileToPlay.getPath(), timeMarker, timeStep, bufferSize); audioTrack.write(outSignalBuffer, 0, outSignalBuffer.length); //publishProgress(outSignalBuffer); timeMarker += timeStep; }

Este código se coloca en mi reproductor personalizado creado como AsyncTask. En general, mi método de decodificación y escritura funciona bien porque escucho el archivo de sonido. El problema es que mi sonido suena cada 5 segundos (timeStep = 5000 ms). Como veo, audioTrack.write (...) bloquea mi tarea asíncrona, por lo que la corta pausa después de cada vez Pasos es causada por la espera del método de decodificación.

¿Tiene algún consejo sobre cuál es el mejor enfoque para entregar correctamente a SignalBuffer el método de escritura desde el decodificador para obtener un reproductor de audio track sin problemas?