0

クリップをループし、その場でバッファを更新することで、ダイナミック オーディオを生成してきました。

Java アップデート 7 25 (2013 年 6 月 18 日) により、クリップはバッファに加えられた変更を再生しなくなり、元のコンテンツをループするだけです。以下のクリップでは、test==0 の場合はホワイト ノイズが再生されますが、test==1 の場合は再生されません。以前は両方の方法でノイズを再生していましたが、ローカル アプレットの代わりにコンソール アプリとして実行すると、ノイズが再生されます。

クリップが開いた後、そのバッファを更新する必要があります。いくつかのソフトウェアが突然無音になります。それを行う別の(または正しい)方法はありますか?前もって感謝します。

    AudioFormat.Encoding enc = new AudioFormat.Encoding("PCM_SIGNED");

    AudioFormat frmt = new AudioFormat(enc, 22050, 16, 2, 4, 22050, false);

    DataLine.Info info = new DataLine.Info(Clip.class, frmt);

    Clip loop_clip;

    int size = 8192;

    byte[] sound_buf = new byte[size];

    for (int i = 0; i < size; i++)
        sound_buf[i] = 0;

    int test = 1;

    if (test == 0)
        for (int i = 0; i < size; i++)
            sound_buf[i] = (byte) (Math.random() * 256);

    try {
        loop_clip = (Clip) AudioSystem.getLine(info);

        loop_clip.open(frmt, sound_buf, 0, size);

    } catch (LineUnavailableException e) {
        e.printStackTrace();
        return;
    }

    if (test == 1)
        for (int i = 0; i < size; i++)
            sound_buf[i] = (byte) (Math.random() * 256);

    loop_clip.setLoopPoints(0, -1);

    loop_clip.loop(999);
4

1 に答える 1

0

クリップを開いた後にクリップ バッファにアクセスできるようにする解決策は見つかりませんでしたが、SourceDataLine とフィード バッファを使用してクリップをシミュレートしました。確かに CPU 集中型ですが、少なくともローカル アプレットでテストできます。

于 2013-07-03T17:07:47.980 に答える