JFugue:有没有办法获得播放器打开的当前音符?

问题描述

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

编辑:我仍在学习 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());
    }
}

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

,

当 JFugue 播放音乐时,它使用 javax.sound.midi.Sequencer 播放 MIDI Sequence。这意味着您可以在同一个 Receiver 上使用 MidiDevice 自己收听 MIDI 事件,而且由于 MIDI 是您计算机上的系统范围资源,您甚至可以在 Java 之外执行此操作。>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...