在Java中从接收器获取midi消息

在Java中从接收器获取midi消息,java,audio,midi,receiver,Java,Audio,Midi,Receiver,我试图使用一个接收器,这样我可以提取midi事件信息,因为它正在播放。我想听听演奏的音符,并将它们同步,这是一件大事。我已经阅读了文档,不知道如何实际使用发射机/接收机。如果有人能帮我指出正确的方向,我如何从接收器中抓取midi事件,我将非常感激 编辑:下面提供的可能的副本并没有解释接收器实际上是如何工作的。它提供了实现的源代码,但作为初学者,源代码太高级了,我无法理解 import javax.sound.midi.*; import java.io.File; import java.io.

我试图使用一个接收器,这样我可以提取midi事件信息,因为它正在播放。我想听听演奏的音符,并将它们同步,这是一件大事。我已经阅读了文档,不知道如何实际使用发射机/接收机。如果有人能帮我指出正确的方向,我如何从接收器中抓取midi事件,我将非常感激

编辑:下面提供的可能的副本并没有解释接收器实际上是如何工作的。它提供了实现的源代码,但作为初学者,源代码太高级了,我无法理解

import javax.sound.midi.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

public class Main {

    public static Sequencer sequencer;
    public static Sequence sequence;
    public static Receiver synthRcvr;
    public static Transmitter seqTrans;

    public static void main(String[] args) {

        try {
            sequencer = MidiSystem.getSequencer();
            sequence = MidiSystem.getSequence(new File("test.midi"));

            seqTrans = sequencer.getTransmitter();
            synthRcvr = sequencer.getReceiver();
            seqTrans.setReceiver(synthRcvr);

            sequencer.open(); 
            sequencer.setSequence(sequence);

            sequencer.start();
        } catch (IOException | MidiUnavailableException | InvalidMidiDataException e) {
            System.out.println(e);
        }
    }

这是监听所有midi消息的解决方案

import javax.sound.midi.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

public class Main {

public static Receiver synthRcvr = new CustomReceiver();
public static Transmitter seqTrans;
public static Synthesizer synth;

public static void main(String[] args) {

    try {
        sequencer = MidiSystem.getSequencer();
        sequence = MidiSystem.getSequence(new File("test.midi"));

        Sequencer sequencer = MidiSystem.getSequencer();
        seqTrans = sequencer.getTransmitter();
        seqTrans.setReceiver(synthRcvr);

        sequencer.open(); 
        sequencer.setSequence(sequence);

        sequencer.start();
    } catch (IOException | MidiUnavailableException | InvalidMidiDataException e) {
        System.out.println(e);
    }
}
这是实现接收器的类:

import javax.sound.midi.MidiMessage;
import javax.sound.midi.Receiver;

public class CustomReceiver implements Receiver {

    public CustomReceiver() {

    }

    @Override
    public void send(MidiMessage message, long timeStamp) {
        // Process midi messages here
    }

    @Override
    public void close() {

    }
}

这是监听所有midi消息的解决方案

import javax.sound.midi.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

public class Main {

public static Receiver synthRcvr = new CustomReceiver();
public static Transmitter seqTrans;
public static Synthesizer synth;

public static void main(String[] args) {

    try {
        sequencer = MidiSystem.getSequencer();
        sequence = MidiSystem.getSequence(new File("test.midi"));

        Sequencer sequencer = MidiSystem.getSequencer();
        seqTrans = sequencer.getTransmitter();
        seqTrans.setReceiver(synthRcvr);

        sequencer.open(); 
        sequencer.setSequence(sequence);

        sequencer.start();
    } catch (IOException | MidiUnavailableException | InvalidMidiDataException e) {
        System.out.println(e);
    }
}
这是实现接收器的类:

import javax.sound.midi.MidiMessage;
import javax.sound.midi.Receiver;

public class CustomReceiver implements Receiver {

    public CustomReceiver() {

    }

    @Override
    public void send(MidiMessage message, long timeStamp) {
        // Process midi messages here
    }

    @Override
    public void close() {

    }
}

可能是我读过的答案的副本。其中一个链接告诉我如何使用发射机/接收机,但没有任何关于实现它或它如何工作的细节。另一个给出了显示接收器转储的源代码,但源代码对我来说非常高级,我在连接接收器实际使用方式的点时遇到困难。您自己的对象必须实现
接收器
接口。谢谢,我成功地使其工作。我读到了答案的可能重复。其中一个链接告诉我如何使用发射机/接收机,但没有任何关于实现它或它如何工作的细节。另一个给出了显示接收器转储的源代码,但源代码对我来说非常高级,我在连接接收器实际使用方式的点时遇到了困难。您自己的对象必须实现
接收器
接口。谢谢,我成功地使其工作。