2014-08-29 40 views
0

我使用MIDI Tuning Standard将Concert间距A4 = 440 Hz的调谐改为任意调谐频率。它适用于Windows 7和JDK 1.8.0的机器。 但是如果调整标准可用,我想在之前检查。如何接收MIDI批量调整转储请求的响应?

Synthesizer synthesizer = MidiSystem.getSynthesizer(); 
System.out.println(synthesizer.getDeviceInfo().getName()); 

打印出Gervill并作为对Gervills Homepage所描述的,它支持的调谐标准。

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(); 
// ... 

回答

0

,你可以在MIDI执行图表中看到,Gervill(像几乎任何其他软件合成器)不发送任何MIDI信息。

您无法从代码中检查默认合成器的功能。

如果您想使用特定的合成器,则必须手动创建它。 (Gervill的班级将是com.sun.media.sound.SoftSynthesizer。)

+0

谢谢!也许我会测试Gervill,如果不存在,我会弹出一条消息,说明重新调整可能不可用。这是否意味着_Universal SysEx,MIDI Tuning(是/否)传输/导出:No_?在MIDI实施图表中,合成器不发送任何MIDI信息? – Vertex 2014-08-29 11:09:52