100 までの同期オーディオ トラックを、トラックごとにライブ制御可能なボリュームで再生する予定です。オーディオはwav
ファイルから取得されます。
Javaでこれを達成するためのライブラリ/ベストプラクティスはありますか?
Praxis と JAudioLibs を見ることをお勧めします。ニール・スミスは彼のことを知っています。
一度に 30 ~ 50 個の wav を再生しましたが、私のライブラリは確かに最も効率的ではありません。そして、それらの wav ファイルのボリュームやパンを変更していませんでした。これらのサウンドの一部がメモリに保存できるほど短い場合 (サウンド エフェクトのバンクなど)、多数のトラックを作成することに成功する可能性が少し高くなります。一度に 100 個の短いクリップを実行しました (カスタム メイドのクリップを使用しましたが、トリガー値以外のボリュームやパンは追加されていません)。
Java のリアルタイムの問題に関する優れた記事があります。問題は現実的ですが、克服できないわけではありません。javax.audio.sampled ライブラリーが提供する最低レベルのツールを使い続ければ、Java はかなり低レベルで高速です。
http://quod.lib.umich.edu/cgi/p/pod/dod-idx?c=icmc;idno=bbp2372.2007.131
ボリュームをリアルタイムで制御するのは困難です。非常に小さなバッファーが必要であるか、フレームごとに計算を実行する手段が必要であり、そうしないとジッパーやクリックなどの効果が発生するリスクがあります。マウスモーションリスナーの出力にタイムスタンプを付けて中間ボリュームを計算すると、リアルタイムのボリューム変更である程度成功しました。しかし、それを一度に複数のチャネルに適用しようとしたことはありません。(それは仮想テルミン プロジェクトでした)。
ただし、非常に効率的なエンベロープの選択を事前に作成し、これらのエンベロープのメニューから選択してボリュームを制御する方法があるかもしれません。うーん。
これは難しい問題であり、私の DAW (Cakewalk Sonar、何らかの C 言語で書かれています) でさえこれを処理できるかどうかはわかりません。