~Proceedings ICMCISMCI2014 14-20 September 2014, Athens, Greece
large corpora. Further, the control change representation
of transformation parameters means they are dissociated
from the grains they act upon, as well as lose precision,
being mapped and quantized to 7 bit integers.
Instead the present implementation relies on two of
the most exciting packages recently developed for MAX:
CATART and BACH.
2.1 CATART
Corpus-based concatenative synthesis (CBCS) is based on
segmentation and description of the timbral characteristics
of the sounds in a database or corpus, and synthesis by
selection of sound segments from the database matching
sound characteristics given by the user. It allows one to
explore a corpus of sounds interactively or by composing
paths in the descriptor space, and to recreate novel timbral evolutions. CBCS can also be seen as a content-based
extension of granular synthesis, providing direct access to
specific sound characteristics.
It has been implemented in various systems and environments (see overviews of past [8] and presenti approaches
to CBCS) and notably in the interactive sound synthesis
system CATART [6].
The CATART software system for MAX realizes corpusbased concatenative synthesis in real-time. It is a modular system based on the freely available FTM&Co extensions 2 [9], providing optimized data structures and operators in a real-time object system. CATART is released as
free open source software. 3 There is also a standalone
application version of CATART available, 4 and a new version based on the MuBU library 5 for MAX [10].
In addition to its capabilities for real-time synthesis,
CATART has been used effectively for real- and deferredtime audio mosaicing and computer-assisted composition [11]. In both cases, a live or recorded audio input
target is analyzed and compared to a preloaded corpus according to descriptors chosen and weighted by the user.
This process may be termed "Corpus-Based Transcription"
and the goal is to create a mosaic of samples form the corpus that best approximates one or more audio features of
the target.
2.2 BACH
BACH is a library for MAX intended to bring CAC into
the real-time world [4, 5]. The basic idea behind BACH
is that symbolic score generation and modification is not
necessarily an out-of-time activity: it can follow the composer's discovery process in real-time and adapt accordingly. BACH's hierarchic representation of data is directly
inspired by the most common Lisp-based CAC environments such as OPENMUSIC [2] or PWGL [3]. BACH's
nested lists, where hierarchies are defined via levels of
parentheses, are indeed called lllls, an acronym for Lisplike linked lists; see Figure 1 for an example. At the same
1 http://imtr.ircam.fr/imtr/Corpus-BasedSoundSynthesisSurvey
2 http://ftm.ircam.fr
3 http://ismm.ircam.fr/catart
4 http://forumnet.ircam.fr/product/catart-standalone
5 http://ismm.ircam.fr/mubu/
time, BACH's approach to CAC takes direct inspiration
from a digital signal processing model and applies such
ideas to notes, chords, scores, and symbols in general.
At the center of the BACH environment are two score editors, bach.roll and bach.score, which provide flexible interfaces for the representation and modification of musical
content. bach. roll expresses time in terms of absolute temporal units (namely milliseconds), while bach.score expresses time in terms of traditional musical units, and includes notions such as rests, measures, time signature and
tempo. Each notation editor is equipped with advanced
representation features such as support for microtonal accidentals of arbitrary resolution, variable play rate, and the
possibility to associate custom meta-data to notes (see section 3.3). Moreover, editing can be performed both through
the interface and with messages, which makes bach. roll
and bach.score suitable for advanced real-time score handling.
3. ADVANCED RECOMBINATION OF MODULES
In order efficiently to implement CBCS with CATART and
BACH, high-level capabilities of each system must be leveraged for the best performance.
3.1 Real-time BACH Usage
BACH is distinguished from other CAC tools by its realtime capabilities, therefore efficiency and cost are primary
concerns. However as bach.roll and bach.score also support the flexibility of a user-friendly interface, they are
not the most efficient by default. When real-time performance is a priority, several parameters can be disabled for
optimization-undo, redraw during playback, and display
of mouse-over legends-by setting the respective parameters maxundosteps, highlightplay, and legend to 0.
3.2 Lambda Loops
In computer programming it is often useful to combine two
functions, operators, or objects in order to represent a specific sub-class of a wider process. Different programming
languages offer different constructs to do this, and Lisp's
lambda functions are probably among the most specific,
powerful, and elegant. They are particularly relevant in the
field of CAC because of the use of Lisp-based programming systems. MAX does not explicitly include such a
concept; however its underlying callback-based structure
easily allows the addition of a similar functionality to externals as well as abstractions. Several BACH modules, especially those implementing iteration-based operations, return single elements (proposals) from their rightmost outlet or outlets and expect an immediate return value for that
proposal in their rightmost inlet. For example, an object
filtering out elements from a list will propose elements one
by one, and for each of them expect a return value expressing acceptance or refusal; an object sorting a list will
propose pairs of elements, and for each pair expect a return value stating whether the pair is in the desired order
or not. Return values are not always booleans: for example, the bach. mapelem abstraction proposes list elements
- 1038 -