私のシステムには、フォーマット 24/96 および 24/192 を再生できる USB DAC がありますが、Java を使用してそれらを再生しようとすると、回線を使用できないという例外が発生します。したがって、Java サウンドのドキュメントによると、Java はサンプル レートとビット レートに制限をもたらしません。だから私は例外がどこから来たのかを追跡し、それはネイティブ関数のように見えます
private static native void nGetFormats(int mixerIndex, int deviceID,
boolean isSource, Vector formats);
16/48 を超える対応する行情報でフォーマットを埋めません。ここでソースを調べました。
ただし、関数が実際に必要な形式を返さないか、わずかに異なる形式を返すだけであることを証明するには、実際の形式のリストを確認する必要があります。しかし、私はそれに到達する方法を理解できません。DirectDL のメソッドは非公開です。
private AudioFormat[] getHardwareFormats() {
return hardwareFormats;
}
したがって、私の質問には2つの部分があります。
Java がハードウェアから取得するサポートされている形式のリストを取得するにはどうすればよいですか? この場合、独自の DirectAudioDevice を作成できます。
Java からのより高いサンプルレートを管理するために、標準の Java サウンドに代わるものはありますか? たとえば、Tritonus ですが、非常に古く、サポートされていないようです。
私は Windows でテストを行ったので、Oracle JRE 以外を使用して Linux でもテストを繰り返す予定です。ただし、とにかくポータブルなソリューションを見つける必要があります。