Java - 无缝更改循环剪辑的音量?
Posted
技术标签:
【中文标题】Java - 无缝更改循环剪辑的音量?【英文标题】:Java - Changing volume of a looping Clip seamlessly? 【发布时间】:2013-09-20 22:59:56 【问题描述】:我有一个循环剪辑,我像这样改变音量:
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】:解决我自己的问题...呵呵。
getFramePosition 用于循环音频可以返回音频文件总帧长度的倍数。当设置的帧位置大于总帧数时,它会从头开始重新开始剪辑。
所以解决办法是:
loop.setFramePosition(old_pos % loop.getFrameLength());
【讨论】:
以上是关于Java - 无缝更改循环剪辑的音量?的主要内容,如果未能解决你的问题,请参考以下文章