我正在使用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调优标准可用?
我的想法是发送一个批量调优转储请求,如果我得到一个响应,我确信它是可用的,否则是不可用的。
//@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();
// ...发布于 2014-08-29 10:49:34
正如您在MIDI实现图中所看到的那样,Gervill (和几乎任何其他软件合成器一样)不发送任何MIDI消息。
无法从代码中检查默认合成器的功能。
如果您想使用特定的合成器,则必须手动创建它。(Gervill的班级是com.sun.media.sound.SoftSynthesizer。)
https://stackoverflow.com/questions/25565639
复制相似问题