1

私のシステムには、フォーマット 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つの部分があります。

  1. Java がハードウェアから取得するサポートされている形式のリストを取得するにはどうすればよいですか? この場合、独自の DirectAudioDevice を作成できます。

  2. Java からのより高いサンプルレートを管理するために、標準の Java サウンドに代わるものはありますか? たとえば、Tritonus ですが、非常に古く、サポートされていないようです。

私は Windows でテストを行ったので、Oracle JRE 以外を使用して Linux でもテストを繰り返す予定です。ただし、とにかくポータブルなソリューションを見つける必要があります。

4

2 に答える 2

1

FLAC、APE、および Wavpack 形式で Java を使用して 24/96Khz および 24/192Khz 録音を聞くことができるように、いくつかの解決策を見つけました。Java サウンドでデバッグを行った後、何らかの理由で Java ランタイムがビット深度を 16 ビットに制限しているにもかかわらず、96Khz および 192KHz の高いサンプル レートを受け入れていることがわかりました。そこで、MediaChest からダウン サンプリング ソリューションを借りました。また、FLAC ファイルを 24/192 サポートする JustFLAC も入手しました。ハードウェアを介して直接 24/192 をサポートすることは、Java ランタイム ネイティブ ライブラリを更新することなしには不可能のようです。

編集:最新の更新は次のとおりです:ネイティブJavaランタイムを調べたところ、次のことがわかりました:

 static INT32 bitsArray[] = { 8, 16};
 ....
 #define BITS_COUNT sizeof(bitsArray)/sizeof(INT32)
 ....
     for (rateIndex = 0; rateIndex < SAMPLERATE_COUNT; rateIndex++) {
    for (channelIndex = 0; channelIndex < CHANNELS_COUNT; channelIndex++) {
        for (bitIndex = 0; bitIndex < BITS_COUNT; bitIndex++) {
            DAUDIO_AddAudioFormat(creator, bitsArray[bitIndex],

ご覧のとおり、8 ビットと 16 ビットはハードコードされており、サポートされている形式のマトリックス生成で使用されています。2 つの定数を追加するだけで簡単に修正できるように見えますが、Java ランタイムの独自のコピーを作成することになり、受け入れられません。そのため、コミュニティ プロセスを開始して、私の推奨事項が受け入れられ、次の Java ランタイムの更新に含まれるようにする必要があるようです。

編集:もう1つの更新。Linux サウンドのネイティブ実装の方が優れているようです。24 ビットのサンプル サイズに制限があります。したがって、アンダーライン サウンド システム (ALSA) がサンプル深度を許可する場合、Java は 24 ビット/192,000 フォーマットを再生できます。最新の Raspbian と JDK 8 EA を使用して、Raspberry Pi でテストしました。残念ながら、最新の Arch と Pidora でさえ ALSA の改善はありません。

于 2013-06-11T07:08:48.413 に答える