2013-09-20 59 views
3

我有一個循環剪輯,以及我改變,像這樣的體積:Java - 無縫地更改循環剪輯的音量?

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

問題:在重新啓動剪輯時,它不是在同一幀扮演它結束;循環中有一個可聽見的跳躍。

如果我不沖洗夾子,這個問題就會消失,但是直到緩衝數據已經耗盡,體積纔會變化,這更糟糕。

我試圖獲取和重置幀的位置,但似乎沒有改變任何東西。

有什麼辦法可以在停止播放的地方繼續播放? (不需要精確...)有沒有什麼方法可以測量將被刷新的數據量並基於此設置框架?

回答

2

解決我自己的問題......杜。

用於循環音頻的getFramePosition可以返回音頻文件總幀長的倍數。當設置的幀位置大於總幀數時,它會從頭開始重新開始剪輯。

因此,解決辦法是:

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