我正在尝试编写一个使用 MIDI 的 Java 程序,因此该程序必须排列:notes(包含我想要播放的所有音符)和另一个数组时间(指定何时播放音符)notes 和时间一次分组三个,所以我可以有多个和弦,问题是程序只播放一个非常简短的音符然后它就停止了,我做错了什么?下面是代码,我使用的是 Java 16。
package application;
import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.ShortMessage;
public class App {
public static void main(String[] args)
throws MidiUnavailableException, InvalidMidiDataException, InterruptedException {
var receiver = MidiSystem.getReceiver();
int[] notes = { 60, 64, 67, 60, 65, 67, 55, 59, 62, 55, 60, 62, 53, 57, 60, 53, 58, 60 };
int[] times = { 0, 0, 0, 1000, 1000, 1000, 2000, 2000, 2000, 3000, 3000, 3000, 4000, 4000, 4000, 5000, 5000,
5000 };
for (int i = 0; i < notes.length; i++) {
int note = notes[i];
int time = times[i];
System.out.println(note + ":" + time);
receiver.send(new ShortMessage(ShortMessage.NOTE_ON, 0, note, 127), time * 1000);
receiver.send(new ShortMessage(ShortMessage.NOTE_OFF, 0, note, 127), (time + 1000) * 1000);
}
Thread.sleep(7000);
}
}
我认为它与 ShortMessage.NOTE_OFF 有关,但我不确定,我无法弄清楚。