Java получает ввод с MIDI-клавиатуры

Я разработал свой собственный синтезатор на java и теперь хочу подключить его к миди-клавиатуре. Мой класс ниже просматривает все устройства midi, у которых есть передатчики. Он успешно находит мою миди-клавиатуру. Я добавляю свои приемники к каждому передатчику для каждого устройства, чтобы оно улавливало все возможное. Из чтения всех справочных документов и java-документов я знаю, что Transmitter отправляет MidiEvents на Receiver, который затем обрабатывает их с помощью метода send. Поэтому я написал свой собственный внутренний класс, реализующий Receiver, и просто использовал оператор println, чтобы проверить, не обнаружено ли вообще что-нибудь в методе send. Однако вообще ничего не подбирается. Кажется, что сделать такую ​​простую вещь очень мало, и я просмотрел все файлы справки, javadoc и форум. Я уверен, что это должно быть что-то действительно очевидное, что я как-то упустил.

Мой синтезатор не следует путать с интерфейсным Synthesizer, и это не миди-инструмент. Он использует алгоритм синтеза и имеет метод воспроизведения. По сути, мне просто нужно, чтобы MIDI-клавиатура отправляла заметку о событии, которое будет вызывать метод воспроизведения.

import javax.sound.midi.*;
import java.util.ArrayList;
import java.util.List;
import java.io.*;
public class MidiHandler
{
    //ArrayList of MidiDevices
    private ArrayList devices = new ArrayList();

    public MidiHandler()
    {
        MidiDevice device;
        MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
        for (int i = 0; i < infos.length; i++) {
            try {
                device = MidiSystem.getMidiDevice(infos[i]);
                //does the device have any transmitters?
                if (device.getTransmitters().size() > 0) {
                    //if it does, add it to the device list
                    System.out.println(infos[i] + ": " + device.getTransmitters().size());
                    devices.add(device);
                }
            } catch (MidiUnavailableException e) {}
        }
        //if any transmitting devices were found
        if(devices.size()>0) {
            //for each device
            for(int i = 0; i transmitters = devices.get(i).getTransmitters();
                    //and for each transmitter
                    for(int j = 0; j

ПРИМЕЧАНИЕ: Я уже видел это: Java MIDI - получение данных с фортепиано? .

и это: http://www.jsresources.org/examples/MidiInDump.html

interface Sequencer выглядело слишком сложным для того, что я тоже хочу.

11
задан Community 23 May 2017 в 12:16
поделиться