3

我有一个循环剪辑,我像这样改变音量:

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);

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

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

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

有什么办法可以从中断的地方恢复播放吗?(不需要精确......)有没有办法测量将被刷新的数据量并根据它设置框架?

4

1 回答 1

2

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

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

所以解决方案是:

loop.setFramePosition(old_pos % loop.getFrameLength());
于 2013-09-20T23:16:03.943 回答