Я разработал свой собственный синтезатор на 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 выглядело слишком сложным для того, что я тоже хочу.