我正在制作一个虚拟钢琴项目,并且我有一些转录的样本歌曲。我想知道我是否可以获得播放器打开的当前音符,以便可以在钢琴上直观地显示它。
编辑:我还在学习 Java,如果我需要比平时更多的解释,请提前道歉。
当 JFugue 播放音乐时,它是javax.sound.midi.Sequencer
用来播放 MIDI 的Sequence
。这意味着您可以使用Receiver
on same来监听 MIDI 事件本身MidiDevice
,并且由于 MIDI 是您计算机上的系统范围资源,您甚至可以在 Java 之外执行此操作。
您可以创建一个 ParserListener 来监听任何解析器正在解析的任何音乐事件。我已经调整了其中一个例子,以八度音阶打印出音符位置。您可以修改它以准确找出按下的音符:
public class ParserDemo {
public static void main(String[] args) throws InvalidMidiDataException, IOException {
MidiParser parser = new MidiParser(); // Remember, you can use any Parser!
MyParserListener listener = new MyParserListener();
parser.addParserListener(listener);
parser.parse(MidiSystem.getSequence(new File(PUT A MIDI FILE HERE)));
}
}
//Extend the ParserListenerAdapter and override the onNoteParsed event to find the current note
class MyParserListener extends ParserListenerAdapter {
@Override
public void onNoteParsed(Note note) {
//A "C" note is in the 0th position of an octave
System.out.println("Note pushed at position " + note.getPositionInOctave());
}
}