The Improv Library contains C++ classes which primarily control the logical flow of MIDI communication. The library is accessed by including any necessary headerfiles from the include directory . Typically you would include one of the improv interfaces found in the include/improv directory . A program using the library should then be linked to the pre-compiled library file in the lib directory , although you can view the source code for the library in the src directory. Example programs which use the improv library are given in the examples directory.
The set of classes for the Improv library are mostly from the sigControl set of classes which are used to control MIDI input/output as well as other os-specific I/O and timing.
The library for improv programs consists of the classes listed below with brief descriptions. Click on the name of the class in the table below for detailed information about the class.
|CircularBuffer||Used for storing incoming MIDI input into a buffer of MidiMessages. Messages can be extracted one by one, or they can be accessed like an array relative to the newest message in the buffer.|
|FileIO||A support class used for easy endian control when writing/reading Standard MIDI files.|
|MidiMessage||Data structure for MIDI input -- stores a MIDI message and a timestamp.|
|SigTimer||Timing class for Improv library and programs. Currently works only with Pentium CPUs (although it works any operating system on the Pentium chip).|
|EventBuffer||very high-level access to MIDI output connection. Store MIDI events and other types of events associated with a time stamp for playing at a future time. See the Event classes further below.|
|MidiInPort||Low-level access to MIDI hardware connection. Organizes the hardware MIDI input ports and defines what happens when a MIDI messages arrives.|
|MidiInput||Mid-level access to MIDI hardware connection. Almost identical to the MidiInPort class, but can be disconnected from the default MIDI input buffers (since MIDI input buffers cannot be shared between objects).|
|MidiOutPort||Low-level access to MIDI hardware connection. Organizes the hardware MIDI output ports and defines a basic output command for sending MIDI message bytes.|
|MidiOutput||Mid-level access to MIDI hardware connection. Defines typical MIDI commands for playing notes, controllers, pitch wheel, etc. This is the class to use for controlling a MIDI synthesizer from a program.|
|MidiPort||Combination of MidiInPort and MidiOutPort classes. This class has no apparent use yet, but was created for elegance.|
|RadioBaton||High-level MIDI in/out class for communication with Max Mathews' Radio Baton MIDI controller.|
|Synthesizer||High-level MIDI in/out class for communication with a generic MIDI synthesizer. Note that if you don't need communication from an external MIDI synthesizer keyboard, then you should be using the MidiOutput class instead. This class is intended for two way communication between the synthesizer keyboard and a computer program.|
|Voice||High-level MIDI output class for monophonic lines of music. Automatically sends a note-off command before playing a new note.|
Here is a schematic of the inheritance for the MIDI communication classes in the Improv library:
The Event control classes are used to play events in the future using the EventBuffer class. An EventBuffer object stores events inside of itself, and the user polls the EventBuffer object periodically to see if it is time to play any of the stored events.
|Event||Virtual base class for all events which are used in the EventBuffer class. There are three event classes which inherit this class: OneStageEvent, TwoStageEvent, and MultiStageEvent.|
|FunctionEvent||Useful for note generation algorithms which output notes in time-sorted order (e.g., a glissando).|
|MidiEvent||An instantiation of the OneStageEvent class. Can be used to transmit a single MIDI message to MIDI output.|
|MidiFileEvent||For playing a MIDI file (type 0 or 1).|
|MultiStageEvent||A Virtual class designed for inheritance by classes which consist of multiple events, such as a list of notes to play in sequence, or a note generating function which generates notes in sequence.|
|NoteEvent||An instantiation of the TwoStageEvent class. Can be used to play a note which contains the MIDI messages for a note-on and a note-off.|
|OneStageEvent||A Virtual class designed for inheritance by classes which consist of a single event.|
|SortedEvent||Useful for time-sorted single-stage type events.|
|TwoStageEvent||A Virtual class designed for inheritance by classes which consist of a dual event, such as a note which consists of a MIDI note-on message and a MIDI note-off message as a single logical unit.|
Here is a schematic of the inheritance for the event classes in the Improv library:
Below you will find an index to information about each class in the Improv library. This documentation is also browsable in the doc/class directory.