Как получить ответ на запрос дампа массовой настройки MIDI?
Я использую MIDI Tuning Standard, чтобы изменить настройку с концертной высоты A4 = 440 Гц на произвольные частоты настройки. Это хорошо работает на моей машине с Windows 7 и JDK 1.8.0. Но я хочу проверить раньше, доступен ли Tuning Standard.
Synthesizer synthesizer = MidiSystem.getSynthesizer();
System.out.println(synthesizer.getDeviceInfo().getName());
Распечатывает Gervill
и, как описано на домашней странице Gervills, он поддерживает стандарт настройки.
Является ли синтезатор Gervill частью текущих JRE на всех платформах (Windows, Linux, Mac)? И если да, будет ли это частью надолго?
Если Gervill будет заменен другим синтезатором, который не поддерживает MIDI Tuning Standard, я хочу проверить, доступен ли он или нет.
Как проверить, доступен ли стандарт MIDI-настройки?
Моя идея состоит в том, чтобы отправить ЗАПРОС НА ОБЪЕМ ТЮНИНГА, и если я получу ответ, я уверен, что он доступен, иначе нет.
//@formatter:off
final byte[] data = new byte[] {
(byte) 0xf0, // SysEx Header
(byte) 0x7e, // Non-Realtime
(byte) 0x7f, // Target Device = All Devices
(byte) 0x08, // MIDI Tuning
(byte) 0x00, // Bulk Tuning Dump Request
(byte) 0x00, // preset = 0
(byte) 0xf7, // EOX
};
//@formatter:on
SysexMessage dumpRequest = new SysexMessage(data, data.length);
Так что в спецификации сказано:
Принимающий прибор должен ответить, отправив сообщение дампа массовой настройки, описанное в следующем разделе, для указанного номера настройки.
Но мой вопрос, как я могу получить этот ответ?
Для воспроизведения нот и отправки повторной настройки я использую MIDI следующим образом:
final int PPQN = 16; // Pulses/Ticks per quarter note
Sequence sequence = new Sequence(Sequence.PPQ, PPQN);
final Track track = sequence.createTrack();
// Send dump request
track.add(new MidiEvent(dumpRequest, 0));
// How to receive the response of the request?
final Sequencer sequencer = MidiSystem.getSequencer();
sequencer.setSequence(sequence);
sequencer.open();
sequencer.start();
// ...
1 ответ
Как видно из диаграммы реализации MIDI, Gervill (как и почти любой другой программный синтезатор) не отправляет MIDI-сообщения.
Вы не можете проверить функции синтезатора по умолчанию из вашего кода.
Если вы хотите использовать определенный синтезатор, вам придется создать его вручную.
(Класс Гервилла будет com.sun.media.sound.SoftSynthesizer
.)