Что я хочу сделать, так это написать простую программу, в которой всякий раз, когда я нажимаю клавиши на моем внешнем миди-контроллере, внутренний приемник принимает примечание к сообщениям и каким-то образом позволяет их печатать в виде байтовой информации. Я настроил ресивер, который настроен на передатчик моего внешнего аппаратного миди-контроллера. Я не уверен, как получить доступ к миди-информации из ресивера после того, как она туда поступила. Что касается исследования, которое я провел по этому вопросу, я читал оракулы midi и просматривал различные примеры на StackOverFlow. В статье Oracle объясняется, как подключить приемник и передатчик и как отправить эту информацию на синтезатор, но не рассказывается, как получить доступ к коротким сообщениям Midi с самого приемника без синтезатора или секвенсора. В примерах StackOverFlow есть соответствующая информация, но я не видел ничего, что объясняло бы, как получить информацию из самого получателя. Если бы кто-то написал пример кода и написал подробное объяснение, я думаю, это было бы отличной услугой для начинающих, таких как я, потому что это показало бы, как сделать первый шаг в написании кода, совместимого с midi, т.е. как получить midi-данные на Java, а затем первые шаги по их использованию. Вот пример кода того, что я уже пробовал.
package receivemidiattempt;
import javax.sound.midi.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ReceiveMidiAttempt {
public static void main(String[] args) {
// My internal receiver which I set up with my own MidiReceiver class which implements
// Receiver
Receiver r = new MidiReceiver ();
//My Transmitter
Transmitter trans = null;
try {
//Setting up transmitter with the external midi controller
trans= MidiSystem.getTransmitter();
}
catch(MidiUnavailableException e)
{
System.out.println("No Midi port Detected");
}
//contecting the transmitter to my internal receiver
trans.setReceiver(r);
}
}
Я подключил передатчик и приемник, но не знаю, что делать дальше, чтобы извлечь миди-информацию из приемника, чтобы распечатать ее. Интерфейс получателя имеет только два метода: close и send, где close закрывает получатель, а Send отправляет сообщение самому получателю. Надеюсь, я смогу найти какой-нибудь способ взять миди-информацию, поступающую на приемник, и сохранить ее в байтовой переменной с именем midiInfo, которую я затем смогу распечатать.
Хорошо, я возился с Java в течение последнего часа, и я почти понял это. Я думаю, что меня смущает то, как методы работают в классе, когда объект этого класса был создан. Например, просто поместив println(msg) в метод Send() из класса, который я создал, который реализует приемник, без вызова метода, каждый раз, когда я нажимаю клавишу на моем контроллере, печатается странное сообщение, которое выглядит как @787fd и меняется каждый раз. Если я использую msg.getLength, я вижу, что каждый раз, когда я нажимаю клавишу, печатается число 3. Это имеет смысл, учитывая, что короткое сообщение состоит из трех байтов: байт состояния, байт высоты тона и байт скорости. Чего я до сих пор не могу понять, так это того, как заставить java печатать фактические байты. Хотя почти там!