[英]Unable to play sound with java.midi.sequencer
I have the following code, where I create a Sequencer, give it a Sequence, give the Sequence a new Track, write MidiEvents to the Track, and then try to play the Sequence when I call sequencer.start(). 我有以下代码,在其中创建一个Sequencer,给它一个Sequence,给Sequence一个新的Track,将MidiEvents写入Track,然后在我调用sequencer.start()时尝试播放Sequence。 What am I doing wrong?
我究竟做错了什么?
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());
}
}
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());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.