我需要“连接”两个音序器:播放器和录音机。 玩家可能会收到来自不同来源的midi事件,录音机将负责将整个事件录制到文件中。连线midi音序器
下面的代码只是理解机制的示例,但它不能正常工作。它会创建一个文件,其大小和属性与原始文件非常相似,但无法正确播放。输出文件只有3秒的长度,并只产生垃圾声!
import javax.sound.midi.*;
import java.io.File;
public class test {
public static void main(String[] args) throws Exception {
Sequence play, record;
Sequencer player, recorder;
Transmitter t;
Receiver r;
try {
play = MidiSystem.getSequence(new File("input.mid"));
record = new Sequence(play.getDivisionType(), play.getResolution(), play.getTracks().length);
player = MidiSystem.getSequencer();
player.open();
player.setSequence(play);
recorder = MidiSystem.getSequencer();
recorder.open();
recorder.setSequence(record);
for (Track track : record.getTracks())
recorder.recordEnable(track, -1);
// Do some wiring
r = recorder.getReceiver();
t = player.getTransmitter();
t.setReceiver(r);
// let the show begin !
recorder.startRecording();
player.start();
Thread.sleep(play.getMicrosecondLength()/1000);
while (player.isRunning())
;
recorder.stopRecording();
MidiSystem.write(record, MidiSystem.getMidiFileTypes(record)[0], new File("output.mid"));
} catch(Exception e) {
e.printStackTrace();
System.exit(1);
}
System.exit(0);
}
}
任何人都可以指出问题吗? 谢谢。
感谢您的回答。即使将播放器和录音机放在不同的线程中也不能解决问题。 –