我正在使用MIDI 调音标准将调音从音乐会音高 A4 = 440 Hz 更改为任意调音频率。它在我的装有 Windows 7 和 JDK 1.8.0 的机器上运行良好。但我想先检查一下,如果调整标准可用。
Synthesizer synthesizer = MidiSystem.getSynthesizer();
System.out.println(synthesizer.getDeviceInfo().getName());
打印出来Gervill
,如Gervills 主页所述,它支持调优标准。
Gervill 合成器是所有平台(Windows、Linux、Mac)上当前 JRE 的一部分吗?如果是的话,它会长期存在吗?
如果 Gervill 将被另一个不支持 MIDI 调音标准的合成器取代,我想测试它是否可用。
如果 MIDI 调音标准可用,如何测试?
我的想法是发送一个BULK TUNING DUMP REQUEST,如果我收到回复,我确信它可用,否则不可用。
//@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();
// ...