プレーヤーとレコーダーの 2 つのシーケンサーを「配線」する必要があります。プレーヤーはさまざまなソースから 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);
}
}
誰でも問題を特定できますか? ありがとう。