java - Cómo codificar un WAV a un mp3 en un dispositivo Android
encoding (3)
El codificador Mp3 no está disponible en android. Debes compilar libav con mp3 lame lib y puedes encontrar el código de http://libavandroid.wordpress.com
He simplificado mi pregunta y he ofrecido una recompensa: ¿qué opciones hay para comprimir datos de audio PCM en bruto a un mp3 en un dispositivo Android?
Mi publicación original: estoy creando un sintetizador en mi teléfono Android, y he estado generando datos de PCM para enviar a los altavoces. Ahora me pregunto si puedo codificar estos datos PCM como un mp3 para guardarlos en la tarjeta SD. El objeto MediaRecorder puede codificar audio proveniente del micrófono en varios formatos, pero no permite la codificación a partir de datos de audio generados mediante programación.
Entonces mi pregunta es, ¿hay una API estándar de Android para codificar audio? Si no, ¿qué soluciones basadas en Java puro o NDK existen? ¿Y puedes recomendar alguno de ellos?
De lo contrario, tendré que guardar mi audio generado como un archivo WAV, lo cual puedo hacer fácilmente.
Por lo que sé, no puedes hacer esto usando solo las herramientas del SDK. Según la guía oficial del desarrollador, no hay un codificador de MP3 en la plataforma ( formatos de medios admitidos por Android ), por lo que debe portar un codificador por su cuenta utilizando el NDK, luego escriba un código de envoltura para recibir las muestras de audio a través de JNI.
Actualmente estoy trabajando en portar algunos decodificadores de audio del proyecto Rockbox para mi propio reproductor de música, y puede grabar audio en MP3, así que tal vez deberías tratar de ver su fuente y encontrar la biblioteca del codificador. La mayoría de los decodificadores tienen optimizaciones de ARM que acelera cosas notables, así que supongo que algunos de los codificadores también tienen esta adición.
Pure Java
Mire en la implementación de la sala blanca de Tritonus de javasound que ofrece un complemento de codificador de MP3 aquí: http://www.tritonus.org/plugins.html
En segundo lugar, sugeriría buscar en las bibliotecas de jzoom JLayer o JLayerME: http://www.javazoom.net/javalayer/javalayer.html (esto puede ser solo una decodificación, no estoy seguro)
Si esos no se ajustan a sus necesidades, puede consultar este artículo de 2000 sobre cómo agregar capacidades de MP3 a J2SE (con fuente): http://www.javaworld.com/javaworld/jw-11-2000/jw-1103-mp3.html
Ruta nativa
Si quieres un rendimiento "nativo" miraría un puerto FFmpeg o Lame para Android. Lame: http://lame.sourceforge.net/