Ich habe meine Frage vereinfacht und eine Prämie 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, die ich an die Lautsprecher senden kann. 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 vom Mikrofon in verschiedene Formate codieren, erlaubt aber nicht Kodierung 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?
Wenn dies nicht gelingt, muss ich mein generiertes Audio einfach als WAV-Datei speichern, was ich einfach tun kann.
Pures Java
Sehen Sie sich Tritonus 'Reinraum-Implementierung von javasound an, die ein MP3 encoder Plugin hier anbietet: Ссылка
Zweitens würde ich vorschlagen, in jzooms Bibliotheken JLayer oder JLayerME zu suchen: Ссылка (dies 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-Funktionen zu J2SE (mit Quelle) ansehen: Ссылка
Native Route
Wenn Sie "native" Leistung wünschen, würde ich einen FFmpeg oder Lame Port für Android betrachten.
Lame: Ссылка
Soweit ich weiß, können Sie das nicht nur mit den Tools im SDK tun. Laut dem offiziellen Entwicklerhandbuch gibt es keinen MP3-Encoder in der Plattform ( unterstützte Android-Medienformate ), so dass Sie einen Encoder mit dem NDK selbst portieren müssen und dann einen Wrapper-Code schreiben müssen, um die Audio-Samples über JNI zu erhalten.
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 spürbar erhöht, daher denke ich, dass einige der Encoder auch diesen Zusatz haben.
Mp3-Encoder ist nicht in android verfügbar. Sie müssen libav mit mp3 lame lib kompilieren, wo Sie Code finden können Ссылка