ï~~cnil hose a file m
/tk r f e e 4 -O~es A folder -1e.
chao3se betwe
the otLher roc ss
racess
A number of OM functions allow to process and convert
musical objects and MIDI structures. Eventually the MIDI
events sequences can also be stored and saved as MIDI files.
Wide ranges of algorithms for the processing and generation
of complex MIDI event sequences can therefore be implemented graphically and interactively, using all the available
features of the visual programming language.
The function get-midievents, for instance, receives an
object (e.g. a MIDI file, one of the aforementioned MIDI
classes, or traditional musical objects like chords, voices,
etc.) and returns a list of MIDI events (instances of the class
MIDIEvent) corresponding to this object or to its closest
description using MIDI events. The higher-order programming features can be used here again and allow for a
personalized processing: An optional input parameter of
get-midievents allows one to specify a function designed to
process MIDIEvents and determine whether they should be
considered or not in the conversion or transfer. That is, the
behaviour of get-midievents can be let as default or specialized by the user. A set of predefined filtering functions are
provided, e.g. test-date, test-type, test-channel etc., which
will allow to select events in a given time interval or, respectively, of a given type or a given channel, but more complex
filtering processes can be defined by the user as well (in Lisp
or as visual programs-see Figure 4).
~-~ \ push the butt n...................... va uamte tlhe patch
Figure 3. Example of use of some dialog-item boxes in
OM patches: pop-up-menu (top-used to select a file among
the contents of a directory), check-box (middle), button
(bottom-triggers the evaluation of the sound box and the
global visual program execution).
5. STANDARD FORMATS TOOLKITS
In the next sections we describe specialized toolkits
dedicated to the manipulation of musical data using standard
formats, and how they can be used for devising processing
algorithms on this data.
5.1. MIDI
Although several new formats tend to propose more
complete representations, MIDI is still one of the most widespread platform for the interchange and storage of
"symbolic" musical data. A significant amount of information can be stored in MIDI files or transferred through MIDI
streams, such as program changes, continuous controllers,
tempo, textual data, and so forth.
In OM, MIDI data can be manipulated thanks to a complete toolkit of classes and specialized functions, allowing
users to personalize its processing and transfers in particular situations. The primitive in this toolkit is the class
MidiEvent, whose slots represent the type, date, channels
and values of a MIDI event. An instance of this class constitutes a symbolic object which can be represented in OM
patches and take part to processing algorithms. Starting
from this primitive object, other classes have been defined,
representing more complex and structured data such as event
sequences, continuous controllers, etc.......................................................................
Assam
MBEEM
4m
N eOf MIDIEVENT
key eOt i OR
Figure 4. Filtering MIDI events by user-defined process...........
The patch midi-event-filter is used as the test function for
get-midievents.
5.2. SDIF
SDIF is a standard data format for the codification, storage
and transfer of sound descriptions. This format is currently
used by an increasing number of composition and sound
processing tools and software for varied purposes and data
types [6]. An SDIF file basically describes the evolution
of data sets of predefined or user-defined types, stored as
matrices and embedded in time-tagged frames.
548