package com.frinika.tootX; import java.util.Vector; import javax.sound.midi.MidiDevice; import javax.sound.midi.MidiSystem; import javax.sound.midi.MidiUnavailableException; import javax.sound.midi.MidiDevice.Info; import com.frinika.midi.MidiDebugDevice; //import com.sun.media.sound.RealTimeSequencer; /** * <p>Title: </p> * * <p>Description: </p> * * <p>Copyright: Copyright (c) 2005</p> * * <p>Company: </p> * * @author pjl * @version 1.0 * * @deprecated * */ public class MidiHub { static MidiDeviceHandle[] recvHandle; static MidiDeviceHandle[] transHandle; static { MidiDevice[] recvList; MidiDevice[] transList; Info info[] = MidiSystem.getMidiDeviceInfo(); Vector<MidiDevice> recV = new Vector<MidiDevice>(); Vector<MidiDevice> transV = new Vector<MidiDevice>(); for (int i = 0; i < info.length; i++) { // System.out.println("---------------------------------------------"); MidiDevice dev = null; try { dev = MidiSystem.getMidiDevice(info[i]); } catch (MidiUnavailableException ex1) { ex1.printStackTrace(); } // TODO: Why do you want to exclude these two? This also excludes RasmusDSP // At one point they did not work with frinika. Do they now? The javvasound synth ? (PJL) //if (dev instanceof javax.sound.midi.Synthesizer) continue; //if (dev instanceof javax.sound.midi.Sequencer) continue; if (dev.getMaxReceivers() != 0) { recV.add(dev); } if (dev.getMaxTransmitters() != 0) { transV.add(dev); } } MidiDebugDevice filt= new MidiDebugDevice(); recV.add(filt); recvList = new MidiDevice[recV.size()]; recV.toArray(recvList); recvHandle = makeHandles(recvList); transV.add(filt); transList = new MidiDevice[transV.size()]; transV.toArray(transList); transHandle = makeHandles(transList); System.out.println(" Trans devices ------------------------------ "); for (int i = 0; i < transList.length; i++) { System.out.println(transList[i].getDeviceInfo()); } System.out.println(" Recv devices ------------------------------- "); for (int i = 0; i < recvList.length; i++) { System.out.println(recvList[i].getDeviceInfo()); } } static public MidiDeviceHandle[] getMidiOutHandles() { return recvHandle; } static public MidiDeviceHandle[] getMidiInHandles() { return transHandle; } static public MidiDeviceHandle getMidiInHandleOf(MidiDevice dev) { for (MidiDeviceHandle h : transHandle) { // System.out.println(dev + " " + h.getMidiDevice()); if (dev == h.getMidiDevice()) { return h; } } System.err.println(" Device not in list " + dev); return null; } static public MidiDeviceHandle getMidiOutHandleOf(MidiDevice dev) { for (MidiDeviceHandle h : recvHandle) { if (dev == h.getMidiDevice()) { return h; } } System.err.println(" Device not in list " + dev); return null; } public static MidiDevice getMidiOutDeviceByName(String name) { for (MidiDeviceHandle handle:recvHandle) { if (handle.toString().equals(name)) return handle.getMidiDevice(); } return null; } public static MidiDevice getMidiInDeviceByName(String name) { for (MidiDeviceHandle handle:transHandle) { if (handle.toString().equals(name)) return handle.getMidiDevice(); } return null; } static MidiDeviceHandle[] makeHandles(MidiDevice[] l) { MidiDeviceHandle[] ret = new MidiDeviceHandle[l.length + 1]; ret[0] = new MidiDeviceHandle(null); for (int i = 0; i < l.length; i++) { ret[i + 1] = new MidiDeviceHandle(l[i]); } return ret; } }