Wie man einen WAV zu einem MP3 auf einem Android-Gerät kodiert

Ich habe meine Frage vereinfacht und ein Kopfgeld angeboten: Welche Möglichkeiten gibt es, rohe PCM-Audiodaten zu einem MP3 auf einem Android-Gerät zu komprimieren.

Mein ursprünglicher Beitrag: Ich erstelle einen Synthesizer auf meinem Android-Handy, und ich habe PCM-Daten erzeugt, um sie an die Lautsprecher zu senden. Jetzt frage ich mich, ob ich diese PCM-Daten als mp3 kodieren kann, um sie auf der SD-Karte zu speichern. Das MediaRecorder- Objekt kann Audio, das von dem Mikrofon kommt, in verschiedene Formate codieren, erlaubt jedoch nicht die Codierung von programmatisch erzeugten Audiodaten.

Also meine Frage ist, gibt es eine Standard-Android-API für die Codierung von Audio? Wenn nicht, welche reinen Java oder NDK basierten Lösungen gibt es? Und können Sie irgendwelche von ihnen empfehlen?

Andernfalls muss ich meine generierten Audiodateien einfach als WAV-Datei speichern, was ich problemlos tun kann.

    Reine Java
    Schauen Sie sich Tritonus ‘Reinraum-Implementierung von javasound an, die ein MP3-Encoder- Plugin hier anbietet: http://www.tritonus.org/plugins.html
    Zweitens würde ich vorschlagen, in Jzooms Bibliotheken JLayer oder JLayerME zu schauen: http://www.javazoom.net/javalayer/javalayer.html (das kann nur entschlüsselt werden, nicht sicher)
    Wenn diese nicht Ihren Anforderungen entsprechen, können Sie sich diesen Artikel aus dem Jahr 2000 über das Hinzufügen von MP3-functionen zu J2SE (mit Quelle) ansehen: http://www.javaworld.com/javaworld/jw-11-2000/jw-1103-mp3 .html

    Einheimische Route
    Wenn Sie “native” performance wünschen, würde ich einen FFmpeg oder Lame Port für Android betrachten. Lame: http://lame.sourceforge.net/

    Soweit ich weiß, können Sie dies nicht nur mit den Tools im SDK tun. Laut dem offiziellen Entwicklerhandbuch gibt es keinen MP3-Encoder in der Plattform ( Android Supported Media Formats ), daher müssen Sie einen Encoder selbst mit dem NDK portieren und dann einen Wrapper-Code schreiben, um die Audio-Samples über JNI zu empfangen.

    Ich arbeite gerade daran, einige Audio-Decoder aus dem Rockbox-Projekt für meinen eigenen Musik-Player zu portieren, und es kann Audio in MP3 aufnehmen, also solltest du vielleicht versuchen, in seine Quelle zu schauen und die Encoder-Bibliothek zu finden. Die meisten Decoder haben ARM-Optimierungen, was die Geschwindigkeit merklich erhöht, also nehme ich an, dass einige der Encoder auch diesen Zusatz haben.

    MP3-Encoder ist nicht verfügbar in android.Sie müssen libav mit mp3 lame lib kompilieren können Sie Code von http://libavandroid.wordpress.com finden