1

我正在制作一个虚拟钢琴项目,并且我有一些转录的样本歌曲。我想知道我是否可以获得播放器打开的当前音符,以便可以在钢琴上直观地显示它。

编辑:我还在学习 Java,如果我需要比平时更多的解释,请提前道歉。

4

2 回答 2

1

当 JFugue 播放音乐时,它是javax.sound.midi.Sequencer用来播放 MIDI 的Sequence。这意味着您可以使用Receiveron same来监听 MIDI 事件本身MidiDevice,并且由于 MIDI 是您计算机上的系统范围资源,您甚至可以在 Java 之外执行此操作。

于 2021-04-28T18:18:01.440 回答
1

您可以创建一个 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());
    }
}

来源:http ://www.jfugue.org/examples.html

于 2021-04-27T23:52:25.167 回答