ï~~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
Top of page Top of page