5

私のアプリでは、mp3 ファイルを pcm バッファにデコードする必要があります。これは大量のデータなので、読み込んでデコードするときにモノラル 22050Hz にダウンサンプリングします。

現時点では、javazoom jlayer デコーダを使用しています http://www.javazoom.net/javalayer/javalayer.html

動作しますが、実行モードで3分の曲をデコードするのに30秒かかり、デバッグモードで古くなります。libmpg を使用している私の Windows マシンでは、約 1 秒で実行できます。

誰もが確実に知っているより速い方法はありますか?大幅に高速でない場合、別の方法を実装するのに時間を無駄にしたくありません。ありがとう。

ちなみに、私のアプリでは、すべてをメモリ内の pcm バッファにダウンロードする必要があるため、単に mp3 ファイルを再生するものには興味がありません。

4

2 に答える 2

1

JLayer は、元の Fraunhoffer mp3 C コードの変換です。悲しいことに、それを変換した人は、何が起こっているのかをよく理解していなかったので、コード全体に広範囲の不必要なバッファ コピーを散らしてしまいました (問題ではありませんが、これらのことは起こります)。しかし、その結果、非常に遅い mp3 デコーダーになります。最終的に、すべての不要なバッファ コピーの削除を開始し、JLayer ソースに正確なシーク機能を追加しました。リポジトリとその使用方法に関するデモは、http: //bpmdj.yellowcouch.org/credits.html のセクション JLayer1.0.1 にあります。その結果、オリジナルよりも約 2.5 倍速くなりました。

于 2016-01-11T15:45:51.300 に答える
1

Androidでネイティブになった瞬間です!

- NDK を使用し、高速な C/C++ ライブラリを見つけます (それらは jlayer よりも 20 倍高速です。たとえば、18 秒で 9 分です)。

-便利なライブラリがいくつかあります:

http://www.mpg123.de/

www underbit.com/products/mad/

www oracle.com/technetwork/java/javase/download-137625.html (これが MP3toPCM をサポートしているかどうかは不明)

lame.sourceforge.net/about.php (これは github に android オープンソース プロジェクトがあり、あなたにとって非常に役立つことを願っています! https://github.com/intervigilium/liblame )

于 2013-07-17T10:36:43.687 に答える