Java отправляет MIDI-сообщение на устройство - PullRequest
0 голосов
/ 18 мая 2018

У меня есть APC40 MkII, подключенный к Raspberry Pi.На пи у меня работает java.С пакетом java.sound.midi я могу без проблем установить соединение с APC и получить его MIDI-сообщения.Но после долгих исследований я почему-то все еще не понимаю, как я могу отправлять миди-сообщения на APC.

Вот код, который у меня есть:

package lightorgansandbox;

import javax.sound.midi.*;
import java.util.List;


public class MidiHandler {

public MidiHandler() {
    MidiDevice device;
    MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();

    for (MidiDevice.Info info : infos) {

        System.out.println("Info: '" + info.toString() + "'");

        try {
            device = MidiSystem.getMidiDevice(info);

            List<Transmitter> transmitters = device.getTransmitters();

            for(int j = 0; j<transmitters.size();j++) {
                transmitters.get(j).setReceiver(new MidiInputReceiver(device.getDeviceInfo().toString()));
            }  

            Transmitter trans = device.getTransmitter();
            trans.setReceiver(new MidiInputReceiver(device.getDeviceInfo().toString()));

            device.open();

        }catch (MidiUnavailableException e) {}
    }
}

public class MidiInputReceiver implements Receiver {

    public String name;

    public MidiInputReceiver(String name) {
        this.name = name;
    }

    public void send(MidiMessage msg, long timeStamp) {

        if (msg instanceof ShortMessage) {
            ShortMessage shortMessage = (ShortMessage) msg;

            int channel = shortMessage.getChannel();
            int pitch = shortMessage.getData1();
            int vel = shortMessage.getData2();
            System.out.println("Channel: " + channel);
            System.out.println("Pitch: " + pitch);
            System.out.println("vel: " + vel);

        }

    }

    public void close() {}

}

}

Это все работаеттак, как я хочу.Но где при этом я могу отправить сообщение обратно на устройство?

1 Ответ

0 голосов
/ 18 мая 2018

Просто отправьте сообщение получателю устройства.Из документации :

  Receiver rcvr = MidiSystem.getReceiver();  /* or device.getReceiver() */

  ShortMessage myMsg = new ShortMessage();
  myMsg.setMessage(ShortMessage.NOTE_ON, 0, 60, 93);
  long timeStamp = -1;
  rcvr.send(myMsg, timeStamp);
...