blob: 7e403d8d6860f5cb107e7f6d97ef5aa5356d6079 [file] [log] [blame]
/* 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();
}
}