>

시퀀서를 생성하고, 시퀀스를 만들고, 시퀀스에 새로운 트랙을주고, 트랙에 MidiEvents를 작성한 다음, sequencer.start ()를 호출 할 때 시퀀스를 재생하려고하는 다음 코드가 있습니다. 내가 뭘 잘못하고 있니?

public static void main(String args[]) {
    try {
      Sequencer sequencer = MidiSystem.getSequencer();
      sequencer.setTempoInBPM(96);
      sequencer.setTickPosition(0);
      Sequence seq = new Sequence(Sequence.PPQ, 5);
      sequencer.setSequence(seq);
      sequencer.open();
      Track mainTrack = seq.createTrack();
      sequencer.recordEnable(mainTrack, 0);
      sequencer.startRecording();
      ShortMessage msg = new ShortMessage();
      ShortMessage msg2 = new ShortMessage();
      msg.setMessage(ShortMessage.NOTE_ON, 0, 60, 100);
      msg2.setMessage(ShortMessage.NOTE_OFF, 0, 60, 100);
      mainTrack.add(new MidiEvent(msg, 0));s
      mainTrack.add(new MidiEvent(msg2, 400));
      Thread.sleep(5000);
      sequencer.stopRecording();
      sequencer.start();
      Thread.sleep(5000);
      sequencer.close();
    } catch (MidiUnavailableException | InvalidMidiDataException | 
      InterruptedException e) {
      System.err.println(e.getMessage());
    }
}

  • 답변 # 1

    <올>

    재생하려는 시퀀스를 명시 적으로 정의하므로 녹음 할 필요가 없습니다.

    먼저 트랙과 이벤트로 시퀀스를 만들어야합니다. 그런 다음이 시퀀스를 시퀀서에 추가하고 시퀀서를 시작하십시오.

    추가로 : 신시사이저가 필요한 것을 듣고 시퀀서에 연결하십시오.

    <시간>

    public static void main(String args[]) {
    try {
      Sequencer sequencer = MidiSystem.getSequencer();
      sequencer.setTempoInBPM(96);
      sequencer.setTickPosition(0);
      Sequence seq = new Sequence(Sequence.PPQ, 5);
      // sequencer.setSequence(seq);
      sequencer.open();
      Track mainTrack = seq.createTrack();
      // sequencer.recordEnable(mainTrack, 0);
      // sequencer.startRecording();
      ShortMessage msg = new ShortMessage();
      ShortMessage msg2 = new ShortMessage();
      msg.setMessage(ShortMessage.NOTE_ON, 0, 60, 100);
      msg2.setMessage(ShortMessage.NOTE_OFF, 0, 60, 100);
      mainTrack.add(new MidiEvent(msg, 0));
      mainTrack.add(new MidiEvent(msg2, 4000));
      // Thread.sleep(5000);
      // sequencer.stopRecording();
      sequencer.setSequence(seq);
      Synthesizer synth = MidiSystem.getSynthesizer();
      sequencer.getTransmitter().setReceiver(synth.getReceiver());
      synth.open();
      sequencer.start();
      Thread.sleep(5000);
      sequencer.close();
    } catch (MidiUnavailableException | InvalidMidiDataException | InterruptedException e) {
      System.err.println(e.getMessage());
    }
    }
    
    

  • 이전 vhdl - 부호없는 것과 std_logic_vector의 차이점
  • 다음 c# - mvc net ADO> NET 공급자가 등록되지 않았거나로드 할 수 없습니다