Отправить системное сообщение с помощью Java

Я хочу отправить Sysex-сообщение на MIDI-порт. К сожалению, когда я отправляю, ответа нет. Отправка обычных MIDI-сообщений (ShortMessage) работает нормально, но как только я заменяю ShortMessage на SysexMessage, все перестает работать.

MidiDevice midiIn = MidiSystem.getMidiDevice(midiDeviceList[NUMBER]);
Receiver rcvr = midiIn.getReceiver
byte[] clearMsg = {(byte) 0xf0, 0x47, 0x7f, 0x15, 0x1e, 0x00, 0x00, (byte) 0xf7 };

SysexMessage sysMsg = new SysexMessage();    
sysMsg.setMessage(clearMsg, clearMsg.length);

rcvr.send(sysMsg, -1);

Почему порт не получает сообщение или почему оно не отправляется?


person TomTom    schedule 13.07.2014    source источник
comment
Можете ли вы проверить с помощью петли, отправляется ли сообщение вообще?   -  person CL.    schedule 13.07.2014
comment
@КЛ. Как бы я это сделал? Я попробовал несколько входов MIDI и проверил все доступные входы и выходы, но ничего не произошло.   -  person TomTom    schedule 13.07.2014
comment
Подключите порт вывода к порту ввода, отправьте короткие сообщения и сообщения SysEx и проверьте (с помощью любого секвенсора), что вы можете записать со входа.   -  person CL.    schedule 14.07.2014
comment
@КЛ. Я пробовал все порты (Gervill, Real Time Sequencer, OSX IAC). Короткие сообщения работают, но не SysEx. Я предполагаю, что сообщение не отправлено, иначе я бы увидел его в своем приложении мониторинга MIDI.   -  person TomTom    schedule 14.07.2014


Ответы (2)


Причина, по которой сообщения SysEx не были отправлены, заключается в том, что OSX имеет сломанную систему MIDI. Он не может отправлять сообщения SysEx. MMJ кажется библиотекой для обхода этой проблемы.

person TomTom    schedule 14.07.2014
comment
Хотелось бы знать, верно ли это по-прежнему в 2018 году, поскольку MMJ устарел. - person Brian Bulkowski; 11.08.2018

Более свежее решение — https://github.com/DerekCook/CoreMidi4J, которое является еще одной зависимостью, которую вы add, который заставит Midi работать на OSX (и не причинит вреда другим платформам).

person Bart Schuller    schedule 18.08.2019