オーディオの単純な(しかし比較的時間精度の高い)キャプチャ/レンダリングのために既存のjavax.sound.sampledライブラリを設計するためにかなりの時間を費やした後、私は本当にネイティブオーディオに到達する必要があると結論付けていますAPI。私が見つけた問題は、サウンドのフレーム位置(SourceDataLineに書き込むことによってレンダリングしている)を20または50ミリ秒の増分で、1または2ミリ秒の精度で取得できる必要があることです。つまり、いくつかのグラフィカルイベントを、再生中のオーディオに同期させたいと考えています。ビデオフレームレートは20〜50 fpsで、ジッターは1〜2ミリ秒以下です。これには、JavaSoundの実装がハードウェアから遠すぎるようです(プラットフォームの独立性に支払う代償はありますか?)。SDL / TDLバッファサイズ、オーディオ形式、SDLのサイズを何度も「いじくり回した」後。
[さらに明確にする:システムクロックに基づいて固定レートでグラフィカルレンダリングを実行させることができます。これは、私のニーズに十分に正確です。ただし、これをオーディオトラックと同期させる場合は、通常のオーディオトラック(たとえば5分)が終了に近づくまでに、わずかな時間差でもオーディオとグラフィックスの間に顕著な時間差が蓄積されます。毎秒(または2または5)同期をチェックすることを考えましたが、報告されたオーディオフレーム位置からの「ジッター」により、修正が行われ、それが目立つようになります。]
私は、どのライブラリがすでに利用可能であるかを調査してきました。既存のパッケージの多くは、ゲーム開発コミュニティをサポートすることを目的としているようです。ただし、3Dオーディオ、エフェクトのハードウェアアクセラレーション、合成、処理は必要ありません。一貫したレイテンシーで聞こえているもののフレーム位置を読み取る方法だけです。レイテンシーが100ミリ秒にもなるが一貫している場合は、それを中心に設計できます。
このタイプの機能を提供するJavaライブラリの推奨事項をいただければ幸いです。ネイティブオーディオAPIのJNIラッパーになると思います。この時点でサポートする必要があるのはWindows7だけです。OpenAL(Vistaではサポートされなくなったため、オーディオのハードウェアアクセラレーションをサポートするCreativeの「オープン」な方法のようです。ゲーム指向で必要以上のものです)、JSyn(合成、MIDIに焦点を当てており、単純なサンプルではありません)インターフェイス)およびJAsioHost(これまでで最も有望)。
JavaSound APIで指摘した制限を回避する方法があれば、それでも問題ありませんが、1週間の努力の末に諦めました。
ありがとう。