2014-08-29 73 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