Java 7更新25:动态音频不再在本地小程序中运行。有替代方法吗?

时间:2013-06-21 22:56:59

标签: java audio applet local clip

我一直在通过循环剪辑生成动态音频 并在运行中更新它的缓冲区。

使用java update 7 25(2013年6月18日),剪辑不再播放 对其缓冲区所做的更改,但仅仅循环其原始内容。 在下面的剪辑中,如果test == 0,则播放白噪声,但如果是,则不播放 测试== 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);

1 个答案:

答案 0 :(得分:0)

我没有找到一个解决方案,可以在剪辑打开后访问剪辑缓冲区,但我使用SourceDataLine和Feed缓冲区模拟剪辑。它肯定会占用更多CPU,但至少可以在本地applet中进行测试。