두 개의 시퀀서 : 플레이어와 레코더를 "연결"해야합니다. 플레이어는 여러 소스에서 미디 이벤트를 수신 할 수 있으며 레코더는 모든 것을 파일로 레코딩하는 역할을 담당합니다.미디 시퀀서 연결
다음 코드는 메커니즘을 이해하기위한 샘플 일 뿐이지 만 제대로 작동하지 않습니다. 원본과 크기 및 속성이 매우 비슷하지만 올바르게 재생되지 않는 파일이 생성됩니다. 출력 파일의 길이는 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);
}
}
누구든지 문제를 정확하게 지적 할 수 있습니까? 감사합니다. .
감사합니다. 플레이어와 레코더를 다른 스레드에 배치한다고해서 문제가 해결되지는 않습니다. –