Introduction to Improv

    
    
         Improv is a C++ environment for writing 
    programs that enable musician/computer interaction using MIDI instruments.
    Improv programs can be written in special pre-defined 
    environments, or
    they can be written from scratch using just the basic MIDI 
    input and 
    output classes.
    
    

    Example programs are provided which demonstrate how to use the Improv library. The programs range from simple programs such as one which switches the key number and attack velocity parameters of a MIDI message (switch1) to more complicated programs such as one which statistically analyzes the input notes to estimate the musical key of the performance (keyan).

    The example programs are sorted according to their use of MIDI I/O connections. Each group of examples share a common programming interface called an environment. There are two primary interactive environments: one for MIDI keyboard interaction, called synthImprov; and another called batonImprov to allow interaction with a radio baton MIDI controller. Also, there are example programs which do not need a pre-defined environment because they do not even use MIDI I/O, or they use it in a simple manner. These example are collected in the improv examples directory. Example programs in this category include cinmidi which is a MIDI input scope, and midimixup which smears the timing information in a standard MIDI file and does not use MIDI I/O.

    Compiled versions of some of the example programs can be downloaded: [ Linux | MS windows ]

    More information about Improv can be found on the Documentation page, and keyword searches can be made on the Improv website from the Improv search page.

Components

    Improv consists of two major components which can be downloaded from the download page.

    1. A library of C++ classes primarily consisting of generalized MIDI I/O communication functions which can be used to create programs for performance of interactive computer music. Currently works with Windows 95 and Linux computers. The library is described on the library overview page.

    2. An example program set which demonstrates how to use the library. There are two primary programming environments: one for MIDI keyboard controllers, and one for Max Mathews' Radio Drum. Also, you can create your own environment without too much effort or use just the basic MIDI input/output functions to write useful or non-interactive programs which need only basic MIDI input/output. The example programs are described on the examples documentation page, and source code for the examples can be seen in examples directory.

Portability

    Currently, programs using the Improv library run in the Windows 95/NT and Linux operating systems with Intel 75 MHz Pentium CPU's or better. A compile-time definition is used to specify which operating system is being used. For example, the symbol LINUX is defined when compiling for Linux operating systems, and VISUAL is used when compiling for Windows 95/NT systems using Microsoft Visual C++.

    The Improv programming environment is designed to be portable to different computer operating systems. Porting Improv to other computer systems would involve:

    1. writing a MIDI input class definition, named MidiInPort_xxx, where xxx is the system type. This class is inherited privately by the class MidiInPort. Example class definitions include: MidiInPort_visual, MidiInPort_linux, and MidiInPort_unsupported.

    2. writing a MIDI output class definition, named MidiOutPort_xxx, where xxx is the system type. This class is inherited privately by the MidiOutPort class. Example os-specific class definitions include: MidiOutPort_visual, MidiOutPort_linux, and MidiOutPort_unsupported.

    3. rewriting the SigTimer class to get access to the computer's clock cycle count. Currently this class is only usable on Pentium-based CPU's.

    4. There is also a KeyboardInput class which handles single key presses from the computer keyboard. This class is used to handle Windows 95/NT and Unix operating system computer keyboard events in a uniform manner.
    
    





Current library version of Improv is 2.2.7, released 27 April 2000.