| /* Demo.java -- And example of MIDI support |
| Copyright (C) 2005 Free Software Foundation, Inc. |
| |
| This file is part of GNU Classpath examples. |
| |
| GNU Classpath is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| |
| GNU Classpath is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU Classpath; see the file COPYING. If not, write to the |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
| 02110-1301 USA. */ |
| |
| package gnu.classpath.examples.midi; |
| |
| import java.awt.*; |
| import java.awt.event.*; |
| import java.util.*; |
| import javax.sound.midi.*; |
| |
| /** |
| * An example how javax.sound.midi facilities work. |
| */ |
| public class Demo extends Frame implements ItemListener |
| { |
| Choice midiInChoice = new Choice(); |
| Choice midiOutChoice = new Choice(); |
| |
| MidiDevice inDevice = null; |
| MidiDevice outDevice = null; |
| |
| ArrayList inDevices = new ArrayList(); |
| ArrayList outDevices = new ArrayList(); |
| |
| public Demo () throws Exception |
| { |
| MenuBar mb = new MenuBar (); |
| Menu menu = new Menu ("File"); |
| MenuItem quit = new MenuItem("Quit", new MenuShortcut('Q')); |
| quit.addActionListener(new ActionListener() |
| { |
| public void actionPerformed(ActionEvent e) |
| { |
| System.exit(0); |
| } |
| }); |
| menu.add (quit); |
| mb.add(menu); |
| |
| setTitle("synthcity: the GNU Classpath MIDI Demo"); |
| setLayout(new FlowLayout()); |
| |
| MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo(); |
| |
| for (int i = 0; i < infos.length; i++) |
| { |
| MidiDevice device = MidiSystem.getMidiDevice(infos[i]); |
| if (device.getMaxReceivers() > 0) |
| { |
| midiOutChoice.addItem(infos[i].getDescription()); |
| outDevices.add(device); |
| } |
| if (device.getMaxTransmitters() > 0) |
| { |
| midiInChoice.addItem(infos[i].getDescription()); |
| inDevices.add(device); |
| } |
| } |
| |
| setMenuBar (mb); |
| add(new Label("MIDI IN: ")); |
| add(midiInChoice); |
| add(new Label(" MIDI OUT: ")); |
| add(midiOutChoice); |
| |
| midiInChoice.addItemListener(this); |
| midiOutChoice.addItemListener(this); |
| |
| pack(); |
| show(); |
| } |
| |
| public void itemStateChanged (ItemEvent e) |
| { |
| try |
| { |
| if (e.getItemSelectable() == midiInChoice) |
| { |
| if (inDevice != null) |
| inDevice.close(); |
| inDevice = (MidiDevice) |
| inDevices.get(midiInChoice.getSelectedIndex()); |
| } |
| |
| if (e.getItemSelectable() == midiOutChoice) |
| { |
| if (outDevice != null) |
| outDevice.close(); |
| outDevice = (MidiDevice) |
| outDevices.get(midiOutChoice.getSelectedIndex()); |
| } |
| |
| if (inDevice != null && outDevice != null) |
| { |
| if (! inDevice.isOpen()) |
| inDevice.open(); |
| if (! outDevice.isOpen()) |
| outDevice.open(); |
| Transmitter t = inDevice.getTransmitter(); |
| if (t == null) |
| System.err.println (inDevice + ".getTransmitter() == null"); |
| Receiver r = outDevice.getReceiver(); |
| if (r == null) |
| System.err.println (outDevice + ".getReceiver() == null"); |
| |
| if (t != null && r != null) |
| t.setReceiver (r); |
| } |
| } |
| catch (Exception ex) |
| { |
| ex.printStackTrace(); |
| } |
| } |
| |
| public static void main (String args[]) throws Exception |
| { |
| new Demo(); |
| } |
| } |