短いバージョン: MP3 (および理想的には AAC/Ogg/WMA) でエンコードされたデータを、後で操作できる Java 配列または ByteBuffer に取得する最良の方法は何ですか?
機能の 1 つとしてサウンド ファイルの速度を上げたり下げたりするプログラムを作成しています。これは、ヘッダーとスピーカーに送信する必要がある正確なバイナリ データである WAV ファイルに対しては正常に機能し、MP3 に対しても実装する必要があります (理想的には、これは AAC、Ogg、および WMA もサポートしますが、これらはあまり一般的でない形式であり、これは必須ではありません)。Android では、MP3 を再生せずにデコードするためのインターフェイスが公開されていないため、そのインターフェイスを作成する必要があります。
私は他の人にも開かれていますが、3つのオプションが提示されます。
1) 独自のデコーダーを作成します。オプション (3) で使用したいと思っていた機能的なフレーム検出器が既にあり、ハフマン デコード テーブルを実装するだけで済みます。
2) JLayer または同等の Java ライブラリを使用して、デコードを処理します。ここでのライセンスの影響が何であるかについては、完全にはわかりません。
3) libmedia ライブラリ/MediaPlayerService に接続します。これが SoundPool の機能であり、そのサービスの使用量を考えると、正式には不安定ですが、その実装はどこにも行かないと私は信じています. これは、サービスに接続するための JNI コードを作成することを意味しますが、それは深いうさぎの穴であることがわかりました。表面的には、sp<> テンプレートに問題があります。