簡體   English   中英

如何截獲MIDI信息?

[英]How can I intercept MIDI messages?

我正在編寫一個應用程序來控制Novation的啟動板設備(對於那些熟悉的人)。 啟動板安裝了兩個MIDI設備:一個用於輸入(按下按鈕),另一個用於輸出(控制LED)。

我的想法是,從啟動板收到消息后,我要發送一系列其他消息。 最好的方法是什么?

現在,我將輸入設備的發送器鏈接到輸出設備的接收器,以便將接收到的每條消息直接發送回啟動板:

Transmitter lpTransmitter = inputDevice.getTransmitter();
lpTransmitter.setReceiver(outputDevice.getReceiver());

javax.sound.midi包具有一個接口,該接口由要接收事件的代碼實現。 它稱為Receiver

在獲取變送器之前,請小心打開設備

我設法自己找到了解決方案。 我所做的是使用自己的Transmitter和Receiver實現將設備鏈接在一起。 據我了解,MIDI消息是這樣的:

啟動板輸入-> inputDevice的接收器-> inputDevice的發送器->我自己的接收器->(我的計算)->我自己的發送器-> outputDevice的接收器-> outputDevice的發送器-> launchpad輸出。

現在請耐心等待,因為我不知道這是否是正確的方法 ,但是我的代碼如下:

// main
// get launchpad devices, open them

MyMidiDevice myDevice = new MyMidiDevice();

inputDevice.getTransmitter().setReceiver(myDevice);
myDevice.setReceiver(outputDevice.getReceiver());

MyMidiDevice類的代碼:

public class MyMidiDevice implements Transmitter, Receiver
{

    private Receiver receiver;

    @Override
    public Receiver getReceiver()
    {
        return this.receiver;
    }

    @Override
    public void setReceiver(Receiver receiver)
    {
        this.receiver = receiver;
    }

    @Override
    public void close()
    {
    }

    @Override
    public void send(MidiMessage message, long timeStamp)
    {
        System.out.println(message); // computations
        this.getReceiver().send(message, timeStamp);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM