我需要“连接”两个音序器:播放器和录音机。播放器可能会收到来自不同来源的 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);
}
}
任何人都可以查明问题吗?谢谢。