package org.herac.tuxguitar.midiinput; import java.util.ArrayList; import java.util.List; import javax.sound.midi.MidiDevice; import javax.sound.midi.MidiSystem; import javax.sound.midi.MidiUnavailableException; import javax.sound.midi.Sequencer; import org.herac.tuxguitar.gui.TuxGuitar; public class MiPortProvider { public static MidiDevice getDevice(String inDeviceName) throws MiException { MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo(); for (int i = 0; i < infos.length; i++) { if (infos[i].getName().equals(inDeviceName)) { try { MidiDevice device = MidiSystem.getMidiDevice(infos[i]); if (device.getMaxTransmitters() == 0 || device instanceof Sequencer) continue; return (device); } catch (MidiUnavailableException mue) { throw new MiException(TuxGuitar .getProperty("midiinput.error.midi.unavailable"), mue); } } } return (null); } public static List<String> listPortsNames() throws MiException { try { List<String> portsNames = new ArrayList<String>(); MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo(); for (int i = 0; i < infos.length; i++) { try { boolean exists = false; for (final String name : portsNames) { if (name.equals(infos[i].getName())) { exists = true; break; } } if (!exists) { MidiDevice device = MidiSystem.getMidiDevice(infos[i]); if (device.getMaxTransmitters() == 0 || device instanceof Sequencer) continue; portsNames.add(infos[i].getName()); } } catch (MidiUnavailableException mue) { throw new MiException(TuxGuitar .getProperty("midiinput.error.midi.unavailable"), mue); } } return portsNames; } catch (Throwable t) { throw new MiException(TuxGuitar.getProperty("midiinput.error.unknown"), t); } } }