com.softsynth.jmsl.midi
Class MidiInstrument

java.lang.Object
  extended by com.softsynth.jmsl.InstrumentAdapter
      extended by com.softsynth.jmsl.midi.MidiInstrument
All Implemented Interfaces:
Instrument, Namable, NoteOnOff, OutputProvider, Transposable
Direct Known Subclasses:
MidiScoreInstrument

public class MidiInstrument
extends InstrumentAdapter
implements NoteOnOff

An Instrument that outputs MIDI. The default Interpreter for a MidiInstrument is a NoteInterpreter. The default Mixer classname is "com.softsynth.jmsl.midi.MidiMixer"

Author:
Phil Burk and Nick Didkovsky
See Also:
NoteInterpreter, MidiMixer

Constructor Summary
MidiInstrument()
          Default constructor with channel set to 1
MidiInstrument(int ch)
          construct a Midi Instrument that uses specified channel
MidiInstrument(int ch, int program)
          construct a Midi Instrument that uses specified channel and send specified programChange when it is open()'ed
 
Method Summary
 double close(double playTime)
           
 int getChannel()
           
 MusicDevice getMusicDevice()
          Get the MusicDevice associated with this Instrument
 int getNumOutputs()
           
 java.lang.Object getOutput()
          get this output (SynthOutput in the case of a JSyn Instrument, for example
 java.lang.Object getOutput(int partNum)
           
 int getProgram()
           
static void main(java.lang.String[] args)
          play marimba and accordion with MusicShapes with Midi Instruments
 double noteOff(double playTime, double pitch, double vel)
          Turn off a MIDI note.
 double noteOn(double playTime, double pitch, double vel)
          Turn on a MIDI note.
 java.lang.Object off(double playTime, double timeStretch, double[] dar)
          Calls noteOff(playTime, dar[1], dar[2]);
 java.lang.Object on(double playTime, double timeStretch, double[] dar)
          calls noteOn(playTime, dar[1], dar[2]);
 double open(double playTime)
           
 void print()
           
 void setChannel(int ch)
          set the midi channel to be used by this instrument
 void setProgram(int p)
          When this instrument is open()'ed, a program change will be called on the program value set here.
 
Methods inherited from class com.softsynth.jmsl.InstrumentAdapter
getDimensionNameSpace, getInterpreter, getMixerClassName, getName, getTransposition, noteOnFor, play, setDimensionNameSpace, setInterpreter, setMixerClassName, setMusicDevice, setName, setTransposition, toString, update
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface com.softsynth.jmsl.NoteOnOff
noteOnFor
 

Constructor Detail

MidiInstrument

public MidiInstrument()
Default constructor with channel set to 1


MidiInstrument

public MidiInstrument(int ch)
construct a Midi Instrument that uses specified channel


MidiInstrument

public MidiInstrument(int ch,
                      int program)
construct a Midi Instrument that uses specified channel and send specified programChange when it is open()'ed

Method Detail

open

public double open(double playTime)
            throws java.lang.InterruptedException
Specified by:
open in interface Instrument
Overrides:
open in class InstrumentAdapter
Throws:
java.lang.InterruptedException

setProgram

public void setProgram(int p)
When this instrument is open()'ed, a program change will be called on the program value set here. To ignore, setProgram(-1) which is the default Recall the instruments are open()'ed automatically when a MusicShape launches Other situations may call for an explicit call to open()


getProgram

public int getProgram()

close

public double close(double playTime)
             throws java.lang.InterruptedException
Specified by:
close in interface Instrument
Overrides:
close in class InstrumentAdapter
Throws:
java.lang.InterruptedException

getOutput

public java.lang.Object getOutput()
Description copied from interface: OutputProvider
get this output (SynthOutput in the case of a JSyn Instrument, for example

Specified by:
getOutput in interface OutputProvider
Overrides:
getOutput in class InstrumentAdapter
Returns:
this Instrument in case you need some reference to it. Otherwise getOutput() is not meaningful for MidiInstrument.

getOutput

public java.lang.Object getOutput(int partNum)
Specified by:
getOutput in interface OutputProvider
Overrides:
getOutput in class InstrumentAdapter
Returns:
null

getNumOutputs

public int getNumOutputs()
Specified by:
getNumOutputs in interface OutputProvider
Overrides:
getNumOutputs in class InstrumentAdapter
Returns:
1 so Mixer will create a fader for it.

getMusicDevice

public MusicDevice getMusicDevice()
Description copied from interface: Instrument
Get the MusicDevice associated with this Instrument

Specified by:
getMusicDevice in interface Instrument
Overrides:
getMusicDevice in class InstrumentAdapter

getChannel

public int getChannel()
Returns:
midi channel

setChannel

public void setChannel(int ch)
set the midi channel to be used by this instrument


on

public java.lang.Object on(double playTime,
                           double timeStretch,
                           double[] dar)
calls noteOn(playTime, dar[1], dar[2]);

Specified by:
on in interface Instrument
Overrides:
on in class InstrumentAdapter
Returns:
null
See Also:
Instrument.on(double, double, double[])

off

public java.lang.Object off(double playTime,
                            double timeStretch,
                            double[] dar)
Calls noteOff(playTime, dar[1], dar[2]);

Specified by:
off in interface Instrument
Overrides:
off in class InstrumentAdapter
Returns:
null
See Also:
com.softsynth.jmsl.Instrument#off(double, Object)

noteOn

public double noteOn(double playTime,
                     double pitch,
                     double vel)
Turn on a MIDI note.

Specified by:
noteOn in interface NoteOnOff
Overrides:
noteOn in class InstrumentAdapter

noteOff

public double noteOff(double playTime,
                      double pitch,
                      double vel)
Turn off a MIDI note.

Specified by:
noteOff in interface NoteOnOff
Overrides:
noteOff in class InstrumentAdapter

print

public void print()

main

public static void main(java.lang.String[] args)
play marimba and accordion with MusicShapes with Midi Instruments
 public static void main(String args[]) {
        System.out.println("Java version: " + System.getProperty("java.version"));
        JMSL.setViewFactory(new ViewFactorySwing());

        PVFrame f = new PVFrameAdapter("close to exit");
        f.addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent e) {
                JMSL.closeMusicDevices();
                System.exit(0);
            }
        });

        JMSL.midi = MidiIO_JavaSound.instance();
        JMSL.midi.edit((Frame)f.getComponent());
        JMSL.midi.open();

        MidiInstrument m1 = new MidiInstrument(1, 13); // set up instrument on
                                                   // channel 1, program 13
        m1.setName("Marimba");
        m1.print();

        MusicShape s = new MusicShape(4);

        s.add(1.0, 84, 64, 1.0);
        s.add(1.0, 52, 64, 1.5);
        s.add(1.0, 74, 64, 0.8);
        s.add(1.0, 46, 80, 0.8);
        s.setInstrument(m1);
        s.setRepeats(100);
        s.setTimeStretch(0.5);

        MidiInstrument m2 = new MidiInstrument(2, 22); // set up instrument on
                                                   // channel 2, program 22
        m2.setName("Accordion");
        MusicShape s2 = new MusicShape(4);

        s2.add(0.0, 86, 64, 2.0);
        s2.add(0.0, 40, 64, 1.5);
        s2.add(1.0, 72, 64, 0.8);
        s2.add(1.0, 44, 80, 0.8);
        s2.setInstrument(m2);
        s2.setRepeats(50);
        s2.setTimeStretch(2.2);

        JMSLMixerContainer mixer = new JMSLMixerContainer();
        mixer.start();
        mixer.addInstrument(m1, 0, 0.5);
        mixer.addInstrument(m2, 1, 0.5);
        f.add(mixer.getPanAmpControlPanel());
        f.pack();
        f.setVisible(true);

        ParallelCollection p = new ParallelCollection(s, s2);
        double when = JMSL.now() + 1;
        p.launch(when);
    }