我有一个循环剪辑,我像这样改变音量:
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);
问题:当剪辑重新启动时,它不会在结束时的同一帧上播放;循环中有可听见的跳跃声。
如果我不刷新剪辑,这个问题就会消失,但音量不会改变,直到缓冲的数据耗尽,这更糟糕。
我尝试获取并重置框架位置,但这似乎没有改变任何东西。
有什么办法可以从中断处继续播放吗? (不需要精确...)有什么方法可以测量将要刷新的数据量并据此设置框架?
解决我自己的问题...呃。
用于循环音频的 getFramePosition 可以返回音频文件总帧长度的倍数。当设置的帧位置大于总帧数时,它会从头开始重新开始剪辑。
所以解决办法是:
loop.setFramePosition(old_pos % loop.getFrameLength());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)