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 - 无缝更改循环剪辑的音量?的主要内容,如果未能解决你的问题,请参考以下文章

swift中的音频播放器没有获得音量和音高的价值

按下音量按钮时更改音量滑块位置

音量未更改时检测硬件音量按钮按下

iPhone 音量更改事件的音量已经达到最大值

如何在使用 UISlider 更改音量时隐藏 Iphone 音量框?

更改 Android 中的媒体音量?