Java を使用してリアルタイム オーディオ ストリームをミキサーから MP3 に変換することは可能ですか?
- チャンクごとに変換する必要があります。そうしないと、メモリが使い果たされます。
- 録音方法はすでに知っていますが、wav や aiff などのロスレス形式のみです。
- 音声が入ってくるので変換が必要です。
標準の LAME API (LAME は MP3 エンコーダー) をラップする 100% Java API であるLAMEOnJを使用できるかもしれません。
ただし、「チャンクごと」にエンコードされるかどうかはわかりません...
それには Xuggler を使用します。これは無料でオープン ソース (LGPL) であり、内部では libmp3lame を使用しています。そして Xuggler のMediaTool APIは、それを使用する方法の多くの例を提供します:
Lame は確かに MP3 エンコーディングのデファクト スタンダードです。その理由の 1 つは、その高品質 (MP3 のエンコーディングを正しく行うのは困難であり、主観的な芸術である) と、法的な問題 (MP3 は特許取得済みの技術であり、知る限り、そのため、限られた数のサイトから Lame バイナリを入手できます。そのほとんどは、これらの法的問題があまり施行されていない (または施行されていない) 国にあります)。
VonC によって発見された LAMEOnJ プロジェクトは、非フリーの JNI 実装を使用しているようですが、特に正確なシステムを対象とする場合は、JNI または JNA を使用して独自のバインディングを行うことができると思います。
Java で新しいプロセスを作成し、ストリームをSoXなどのツールの stdin に書き込み、オーディオ データをその場で MP3 に変換します。
最初の質問について - それは可能ですか、私が見ることができる唯一の制限はプロセッサ速度です. 使用しているアルゴリズムとプロセッサの両方が十分に高速である場合、それが不可能になる理由はありません。
これが Java ソースではないことはわかっていますが、正しい軌道に乗ることができるかもしれません - Lame MP3 Encoderを見てみてください。
私の知る限り、すべての MP3 変換アルゴリズムはチャンクごとに動作します。変換を開始するために WAV ファイル全体を読み取る必要はありませんが、オンザフライで変換されます。
リング バッファを使用して生のオーディオ バッファをその場でエンコードしてみてください。