[英]Looping a MIDI sequence in Java
我正在嘗試在我正在制作的java游戲中循環MIDI序列,我遇到了一些問題。
我當前的代碼確實重復了序列,但序列結束和重啟之間存在很大的延遲。 我怎么能消除這個?
這是我的代碼:
try
{
// From file
final Sequence sequence = MidiSystem.getSequence(new File("main menu.mid"));
sequencer = MidiSystem.getSequencer();
sequencer.open();
sequencer.addMetaEventListener(new MetaEventListener() {
public void meta(MetaMessage msg) {
if (msg.getType() == 47) { // End of track
sequencer.setTickPosition(0);
try
{
sequencer.setSequence(sequence);
} catch(InvalidMidiDataException e) {e.printStackTrace();}
sequencer.start();
}
}
});
sequencer.setSequence(sequence);
// Start playing
sequencer.start();
} catch (IOException e) {e.printStackTrace();}
catch (MidiUnavailableException e) {e.printStackTrace();}
catch (InvalidMidiDataException e) {e.printStackTrace();}
這個來自Java Sound標簽Wiki的源播放MIDI而沒有循環之間的“長時間延遲”,這告訴我你聽到的延遲是現有音軌的靜音前奏/外音的一部分。
import javax.sound.midi.*;
import javax.swing.JOptionPane;
import java.net.URL;
class LoopMidi {
public static void main(String[] args) throws Exception {
URL url = new URL("http://pscode.org/media/EverLove.mid");
Sequence sequence = MidiSystem.getSequence(url);
Sequencer sequencer = MidiSystem.getSequencer();
sequencer.open();
sequencer.setSequence(sequence);
//sequencer.setLoopStartPoint(2000);
//sequencer.setLoopEndPoint(4000);
sequencer.setLoopCount(5);
sequencer.start();
JOptionPane.showMessageDialog(null, "Everlasting Love");
}
}
解決方案在於:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.