Because of the severe latency of the Java MIDI Sound Synthesizer (>70ms), I would like to try to replace it with the system midi synthesizer which is called Microsoft GS Wavetable Synth on my Windows 7/32 bit system with Sound Max motherboard sound. Does anyone know if this would reduce latency, and if so, specifically how to do this?
My system uses the following to list the Midi providers
private void open() throws MidiUnavailableException {
synth = MidiSystem.getSynthesizer();
MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
MidiDevice.Info msInfo = null;
StringBuilder sb = new StringBuilder();
sb.append("Available MidiDevice are\n");
for (MidiDevice.Info i : infos) {
if (i.toString().contains("Microsoft GS Wavetable Synth")) {
msInfo = i;
sb.append(" *****");
}
sb.append("\t" +i.toString()+ ": " +i.getDescription()+ '\n');
}
MidiDevice msDevice = MidiSystem.getMidiDevice(msInfo);
synth.open();
sb.append("synth=" +synth.getDeviceInfo().toString()+ " with default soundbank " +synth.getDefaultSoundbank().getDescription()+ '\n');
sb.append("max synthesizer latency =" +synth.getLatency()+ " us\n");
log.info(sb.toString());
channels = synth.getChannels();
channel = channels[PERCUSSION_CHANNEL];
}
and it prints the following
INFO: Available MidiDevice are
Microsoft MIDI Mapper: Windows MIDI_MAPPER
***** Microsoft GS Wavetable Synth: Internal software synthesizer
Real Time Sequencer: Software sequencer
Java Sound Synthesizer: Software wavetable synthesizer and receiver
synth=Java Sound Synthesizer with default soundbank Soundbank for use with Java Sound Audio Engine
max synthesizer latency =69660 us
I cannot figure out how to replace the Java Sound Synthesizer with the Microsoft (Roland) synthesizer. I've tried getTransmitter().setReceiver() etc but nothing seems to work.