ï~~Proceedings of the International Computer Music Conference (ICMC 2009), Montreal, Canada August 16-21, 2009 2.1. Implementation Details Each track of MuBu is implemented as a contiguous memory array containing the data over time and allowing for vectorised access. Similar to the SDIF standard, numerical data is represented as a sequence of two-dimensional matrices of floating-point values (often reduced to vectors and scalars). The time axis of a MuBu track can be represented either by a time-tag for each element or by a constant sampling rate defined for the whole track. Thus, uniformly sampled data streams of multiple rates and non-uniformly sampled data streams can be represented aligned to each other. In addition to a reference time-tag, a track can optionally define a start and end time for each of its elements giving the possibility to associate data not just to an instant but also to a period of time. A track can define a name tag for each column of the contained data matrices or vectors that may refer to the type or semantic of the data in a particular column. The rows of the matrix are simply indexed and typically represent one or multiple instances of the structure defined by the columns. As an example, vectors of different descriptors stored in a track would be represented as elements of one row with column names referring to the different descriptors such as loundness, pitch and brilliance. Similarly, a MIDI note would be represented as a single row with columns corresponding to pitch, velocity and channel with the option of representing chords as multiple lines of notes within in the same element of the track. Following the same logic, spectral coefficients would be represented as a single column (e.g. named MFCC or MEL). Since the matrix data is stored in a contiguous memory space, the capacity of a track in terms of the maximum number of elements as well as the matrix size for each track element has to be defined in advance whenever possible. This choice has been taken with respect to previous experiences with similar approaches showing that the vast majority of the envisaged applications can easily cope with this restriction while the implementation of the data structure and the access to the data can be enormously simplified and easily optimised in this way. If in a particular data stream the elements of a track can have a variable number of rows (e.g. chords of notes or harmonics), the maximum number of rows must be defined and an additional vector is created within the track giving the actual number of rows for each element of the stream. For non-numerical data or for handling predefined data structures that can not be expressed with two-dimensional matrices, a track can define an additional optional vector of user data handles for each element requiring customised access methods. A MuBu track can have a type tag such as AudioSamples, Harmonics or MidiNotes. This type tag can be used by an application or a particular set of software modules to co herently identify and process the stored data. We have started to provide a few predefined type tags and specified an API for user defined types. The type tag of the track also specifies the data type for the user data handles if used. For the association of meta-data to a track, each track includes a name/value table. This table also allows to completely represent the most important file formats with one or multiple MuBu tracks and to enable the regeneration of identical or modified files from the stored data. 2.2. Display and Graphical Interaction In parallel to the SampleOrchestrator project we have worked on a portable library for the display and editing of data streams such as those represented by MuBu. The library has been implemented based on the Juce framework2 and provides a set of graphical displays and editors that remain independent from any data structure by providing interfaces for the access to the data. The first integration of these editors has been implemented for the FTM library in Max/MSP. Figure 1. The IMTR Editor graphical component displaying multiple superposed data streams In summary, the current version of the IMTR editor library provides the following features already fitting the needs of a graphical interface for MuBu: * Editable graphical interfaces for time-tagged scalars (e.g. bpfs), arrays of sampled values (e.g. waveforms) * Non-editable displays for sonogram and trace (e.g. harmonics with pitch and amplitude developing over time) representations * Various display styles for each interface (e.g. bpf, steps or peaks for time-tagged values) * Superposition or juxtapositon of horizontally aligned displays with controllable opacity * Scrolling, zooming, selection and cursor tools 2http: / /www. rawmaterialsoftware. com/juce/ 424
Top of page Top of page