Java - 无缝地改变循环Clip的音量?

时间:2013-09-20 22:59:56

标签: java audio clip

我有一个循环Clip,我改变音量如下:

clip.stop();
clip.flush();
FloatControl fc = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
fc.setValue(new_volume);
clip.loop(javax.sound.midi.Sequencer.LOOP_CONTINUOUSLY);

问题:当剪辑重新启动时,它不会在结束时播放相同的帧;循环中有一个可听见的跳跃。

如果我没有刷新剪辑,这个问题就会消失,但是在缓冲数据耗尽之前音量不会改变,这更糟糕。

我尝试获取并重置帧位置,但这似乎没有改变任何东西。

有没有办法在停止播放的地方恢复播放? (不一定要精确......)有没有办法测量将要刷新的数据量并根据它设置帧?

1 个答案:

答案 0 :(得分:2)

解决我自己的问题......呃。

用于循环音频的 getFramePosition可以返回音频文件的总帧长度的倍数。当帧位置设置为大于总帧数时,它会从头开始重新开始剪辑。

所以解决方案是:

loop.setFramePosition(old_pos % loop.getFrameLength());