我一直在通过循环剪辑并动态更新它的缓冲区来生成动态音频。
随着 java update 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);