/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.frinika.codeexamples; import java.io.File; import java.lang.reflect.Method; import java.util.logging.Level; import java.util.logging.Logger; import javax.sound.midi.Instrument; import javax.sound.midi.MidiDevice; import javax.sound.midi.MidiSystem; import javax.sound.midi.Soundbank; import javax.sound.midi.Synthesizer; /** * * @author pjl */ public class ListKeyNames { public static void main(String args[]) { try { for (MidiDevice.Info inf : MidiSystem.getMidiDeviceInfo()) { if (inf.getName().equals("Gervill")) { Synthesizer dev = (Synthesizer) MidiSystem.getMidiDevice(inf); dev.open(); // String sf = "/home/pjl/frinika/soundfonts/Club.SF2"; // String sf = "/home/pjl/frinika/soundfonts/8MBGMSFX.SF2"; String sf="/home/pjl/frinika/soundfonts/ChoriumRevA.SF2"; Soundbank sbk; sbk = MidiSystem.getSoundbank(new File(sf)); dev.loadAllInstruments(sbk); Instrument insts[] = dev.getLoadedInstruments(); // Instrument insts[] = dev.getAvailableInstruments(); for (Instrument ins : insts) { System.out.print("\n ***************** INST :" + ins); System.out.println(ins.getName() + " " + ins.getPatch().getBank() + " " + ins.getPatch().getProgram() + " "); Method getChannels = ins.getClass().getMethod( "getChannels"); boolean[] channels = null; if (getChannels != null) { channels = (boolean[]) getChannels.invoke(ins, (Object[]) null); if (channels[9]) { Method getKeys = ins.getClass().getMethod( "getKeys"); if (getKeys != null) { String[] keyNames = (String[]) getKeys.invoke(ins, (Object[]) null); int i = 0; for (String keyname : keyNames) { if (keyname != null) System.out.println((i++) + ":" + keyname); } } } } } } } System.out.println(" HIT cntrl-C "); Thread.sleep(100000); } catch (Exception ex) { try { Thread.sleep(1000); } catch (InterruptedException ex1) { Logger.getLogger(ListKeyNames.class.getName()).log(Level.SEVERE, null, ex1); } ex.printStackTrace(); } } }