web-dev-qa-db-fra.com

Comment encoder un WAV en mp3 sur un appareil Android

J'ai simplifié ma question et offert une prime: Quelles sont les options pour compresser les données audio PCM brutes en mp3 sur un Android appareil.

Mon article d'origine: Je crée un synthétiseur sur mon Android, et j'ai généré des données PCM à envoyer aux haut-parleurs. Maintenant, je me demande si je peux encoder ces données PCM sous forme de mp3 à enregistrer sur la carte SD. L'objet MediaRecorder peut encoder l'audio provenant du microphone dans différents formats, mais ne le fait pas n'autorisez pas l'encodage à partir de données audio générées par programme.

Ma question est donc la suivante: existe-t-il une API standard Android pour l'encodage audio? Sinon, quelles sont les solutions pures Java ou NDK)? Et pouvez-vous recommander n'importe lequel d'entre eux?

À défaut, je devrai simplement enregistrer mon audio généré sous forme de fichier WAV, ce que je peux facilement faire.

40
bramp

Java pur
Regardez dans la mise en œuvre de javasound en salle blanche de Tritonus qui offre Encodeur MP3 plugin ici: http://www.tritonus.org/plugins.html
Deuxièmement, je suggérerais de regarder dans les bibliothèques de jzoom JLayer ou JLayerME: http://www.javazoom.net/javalayer/javalayer.html (cela peut seulement être décodé, pas sûr)
Si ceux-ci ne répondent pas à vos besoins, vous pouvez consulter cet article de 2000 sur l'ajout de fonctionnalités MP3 à J2SE (avec source): http://www.javaworld.com /javaworld/jw-11-2000/jw-1103-mp3.html

Route native
Si vous voulez des performances "natives", je regarderais un port FFmpeg ou Lame pour Android. Lame: http://lame.sourceforge.net/

31
Paul Gregoire

Autant que je sache, vous ne pouvez pas le faire en utilisant uniquement les outils du SDK. Selon le guide du développeur officiel, il n'y a pas d'encodeur MP3 sur la plate-forme ( Android Supported Media Formats ), vous devez donc porter un encodeur par vous-même à l'aide du NDK, puis écrire du code wrapper dans recevoir les échantillons audio via JNI.

Je travaille actuellement sur le portage de décodeurs audio du projet Rockbox pour mon propre lecteur de musique, et il peut enregistrer de l'audio en MP3, alors vous devriez peut-être essayer de regarder sa source et trouver la bibliothèque d'encodeurs. La plupart des décodeurs ont des optimisations ARM qui accélèrent les choses notables, donc je suppose que certains des encodeurs ont également cet ajout.

9
NagyI

L'encodeur Mp3 n'est pas disponible dans Android.vous devez compiler libav avec mp3 lame boiteux, vous pouvez trouver le code à partir de http://libavandroid.wordpress.com

1
Mohit Chauhan