Академический Документы
Профессиональный Документы
Культура Документы
_372 _373
are based on simplistic interactive setups that work, OpenMusic, PWGL), are based upon the Lisp pro-
hinder the notion of interactivity. This fact gramming language. Although superficially similar to Max
does not degrade the artistic value of such from the point of view of the user interface (data and func-
works in any sense but underlies the lack of tions are represented by graphical elements connected by
momentum therein for serious considerations lines representing the flow of elaboration), the underlying
of interactivity among the second group. programming paradigm is radically different. Essentially,
the graphical program is indeed a representation of a Lisp
Of course, this dichotomy has already been addressed.
expression, with elements on the top of the patch corre-
Several interesting projects have been developed, linking
sponding to the deepest elements of the expression. The
real-time environments to graphical representations of both
user requests the evaluation of an operator, which in turn
classical and non-classical (and potentially non-musical)
will request evaluation of the operators above it, and so
scores, including OpenTimeLine4 [9] and INscore5 [7].
on. From a lower-level point of view, a call stack is built
In at least one case, namely MaxScore6 [6], this is aug- Figure 2. Semitonal, quartertonal and eighthtonal divi-
in this scenario as well; the difference is that all the func- Figure 1. Any notation object can be edited by both GUI
mented by a very sophisticated editing interface. A more sions are supported via the standard accidental symbols
tions in the stack have a return value, and the final return interaction and Max messages. In this case were clearing
general approach is FTMs [12], which provides a power- (upper example). All other microtonal divisions are sup-
value is returned to the user through a console. Of course, the bach.roll, and then adding two chords.
ful framework for data representation and processing with ported as well, but symbolic accidentals will be replaced
in some cases the side effects of the evaluation (e.g, a
a focus on musical structures, including some facilities for by labels with the explicit fractions of tone (lower exam-
change in an user interface widget, or the production of
graphical display of simple scores. quite advanced, as it allows multiple simultaneous time ple), or with cents differences from the diatonic note.
a MIDI stream) are more important then the result itself.
Resuming the ideas of [2, 3], with the library bach: signatures, tempi and agogics. Besides this fundamental
This paradigm applies a fortiori to textual Lisp-based en-
automatic composers helper we have tried to achieve a difference, the two objects offer a large set of common
vironments such as Common Music or Impromptu.
coherent system explicitly designed for computer-assisted features, among which: tools for working upon lllls, performing basic operations
The difference between the two paradigms is crucial:
composition. bach takes advantage of Maxs facilities for such as retrieval of individual elements, iteration, reversal,
if we assume that parameters are handled at the begin-
sound processing, real-time interaction and graphical pro- editing by both mouse and keyboard interface, and sorting, splicing, merging and so on (see Fig. 3). Some
ning of the process, a bottom-up process (like within the
gramming, combining interactive writing and algorithmic by Max messages (see Fig. 1); subsets of the library are applicable to lllls satisfying cer-
Patchwork paradigm) will ultimately be a non-real-time
control of symbolic musical material. tain given conditions: e.g., it is possible to perform mathe-
process, since parameter changes cannot immediately af- support for microtonal accidentals of arbitrary res- matical operations over lllls solely composed by numbers;
fect anything below them, unless some bottom-up oper- olution (see Fig. 2);
2. PROGRAMMING PARADIGMS a set of operators for matrix calculus only works with ap-
ation is requested on some lower elements. Moreover,
wide possibility of intervention over the graphical propriately structured lllls; and so on. It is important to
bach complies with the graphical data-flow programming the Max paradigm, not having to depend on return values,
parameters of musical notation; stress that all these operators are indeed Max objects, and
paradigm of Max, in which information is represented as easily allow for much more complexly structured patches:
while the kind of operations performed may bear some
a vertical, top-down flow. Data, typically coming from a single action can trigger multiple reactions in differ- ability to associate to each note various types of resemblance with Lisp, the actual implementation and in-
some user interaction, enter the program at its top, are ent operators (a function can call several other functions, meta-data, including text, numbers, files and break- terface are radically different, and as integrated as possi-
acted upon by a chain of specialized operators connected one after another has returned). The Patchwork paradigm, point functions (see Fig. 6); ble with the Max system. On the other hand, at least one
by lines called patch cords and exit the program at its on the other hand, has the advantage of allowing seam-
Common Lisp interpreter designed to run as Max objects
bottom. A simplified model of this mechanism, as seen less integration with textual coding, which can be an ex- variable-speed playback capability: both bach.score has been developed, Brad Gartons maxlispj [8]: it is ex-
from a lower-level point of view, might appear as follows: tremely useful resource whenever conceptually complex and bach.roll can be seen as advanced sequencers, tremely easy to exchange data with this object, in order
each operator is a function, usually written in C or C++, operations must be implemented. Moreover, representing and the whole set of data (such as pitch, velocity to take advantage of the expressive power of Lisp textual
and the data entering it are the arguments of the function musical notation (from single notes to an entire score) re- and duration information) and meta-data associated programming within a Max patch.
call. After performing its work upon the data it has re- quires sufficiently powerful and flexible data structures, to each note is output at the appropriate time during
ceived, each operator calls the function corresponding to which the Lisp lists certainly are. playback, thus making both objects extremely con-
venient for controlling synthesizers and other phys- 3.2. Music representation
the next operator in the chain, passing it the acted-upon
data. In this way a call stack is built, in which the oper- ical or virtual devices. At the intersection between the modules for musical nota-
3. THE BACH ENVIRONMENT
ator at the top of the graphical patch corresponds to the tion and the list operators is a family of objects performing
function at the base of the stack, and the operator at the As already stated, bach is a library of objects and patches operations upon lllls containing musical data.
3.1. Data types
bottom of the graphical patch corresponds to the function for the software Max, the distinction between objects and It is worth noting that different bach objects exchange
at the top of the stack. It is crucial to note that all these patches concerning more the implementation than the ac- bach also provides Max with two new data types: ra- musical scores in the form of specifically-structured lllls,
functions have no return value: the last operator of the tual usage of these modules. At the forefront of the system tional numbers and a nested list structure called llll, an whose contents is entirely readable and editable by the
chain simply passes the data to an arbitrary output device. are the bach.score and bach.roll objects. They both pro- acronym for Lisp-like linked list. Rational numbers are user; this is different from what happens e.g. in Open-
In this way, the perception on the users side is that the vide graphical interfaces for the representation of musical extremely important in music computation, as they ex- Music, where the exchange of musical data often involves
program essentially behaves like a musical instrument, in notation: bach.score expresses time in terms of traditional press traditional temporal units such as 1/2, 3/8 or 1/12 opaque objects.
which an action (e.g., pressing a piano key) triggers a se- musical units, and includes notions such as rests, mea- (that is, a triplet eight note) as well as harmonic ratios. This allows much easier and more transparent manip-
ries of reactions (levers moving, hammers striking) lead- sures, time signature and tempo; bach.roll expresses time The nested list has been chosen for both similarity with ulation of the musical data themselves. As a consequence,
ing, in a measurable but usually negligible time, to the in terms of absolute temporal units (namely milliseconds), the Lisp language, in a way to ease communication with strictly musical operations such as rhythmic quantization
production of a sensible result (sound). and as a consequence has no notion of traditional tempo- the major existing CAC environment, and the need to es- are just extremely specialized operations upon lllls, which
The major graphical computer-aided composition en- ral concepts: this is useful for representing non-measured tablish a data structure powerful enough to represent the of course can be performed only if the llll itself is struc-
vironments, that is the Patchwork family [10, 4] (Patch- music, and also provides a simple way to deal with pitch complexity of a musical score, but flexible enough to be a tured properly, and if its content is consistent from the
4 http://dh7.free.fr material whose temporal information is unknown or irrel- generic data container lending itself to arbitrary manipu- point of view of musical notation.
5 http://inscore.sourceforge.net evant. It should also be noted that the implementation of lations through a relatively small set of primitives. In fact, The structure of a llll representing a bach.score (Fig.
6 http://www.computermusicnotation.com traditional temporality concepts in bach.score is in fact the large majority of the modules of the bach library are 4) might appear quite complex at first sight, but the or-
_374 _375
are based on simplistic interactive setups that work, OpenMusic, PWGL), are based upon the Lisp pro-
hinder the notion of interactivity. This fact gramming language. Although superficially similar to Max
does not degrade the artistic value of such from the point of view of the user interface (data and func-
works in any sense but underlies the lack of tions are represented by graphical elements connected by
momentum therein for serious considerations lines representing the flow of elaboration), the underlying
of interactivity among the second group. programming paradigm is radically different. Essentially,
the graphical program is indeed a representation of a Lisp
Of course, this dichotomy has already been addressed.
expression, with elements on the top of the patch corre-
Several interesting projects have been developed, linking
sponding to the deepest elements of the expression. The
real-time environments to graphical representations of both
user requests the evaluation of an operator, which in turn
classical and non-classical (and potentially non-musical)
will request evaluation of the operators above it, and so
scores, including OpenTimeLine4 [9] and INscore5 [7].
on. From a lower-level point of view, a call stack is built
In at least one case, namely MaxScore6 [6], this is aug- Figure 2. Semitonal, quartertonal and eighthtonal divi-
in this scenario as well; the difference is that all the func- Figure 1. Any notation object can be edited by both GUI
mented by a very sophisticated editing interface. A more sions are supported via the standard accidental symbols
tions in the stack have a return value, and the final return interaction and Max messages. In this case were clearing
general approach is FTMs [12], which provides a power- (upper example). All other microtonal divisions are sup-
value is returned to the user through a console. Of course, the bach.roll, and then adding two chords.
ful framework for data representation and processing with ported as well, but symbolic accidentals will be replaced
in some cases the side effects of the evaluation (e.g, a
a focus on musical structures, including some facilities for by labels with the explicit fractions of tone (lower exam-
change in an user interface widget, or the production of
graphical display of simple scores. quite advanced, as it allows multiple simultaneous time ple), or with cents differences from the diatonic note.
a MIDI stream) are more important then the result itself.
Resuming the ideas of [2, 3], with the library bach: signatures, tempi and agogics. Besides this fundamental
This paradigm applies a fortiori to textual Lisp-based en-
automatic composers helper we have tried to achieve a difference, the two objects offer a large set of common
vironments such as Common Music or Impromptu.
coherent system explicitly designed for computer-assisted features, among which: tools for working upon lllls, performing basic operations
The difference between the two paradigms is crucial:
composition. bach takes advantage of Maxs facilities for such as retrieval of individual elements, iteration, reversal,
if we assume that parameters are handled at the begin-
sound processing, real-time interaction and graphical pro- editing by both mouse and keyboard interface, and sorting, splicing, merging and so on (see Fig. 3). Some
ning of the process, a bottom-up process (like within the
gramming, combining interactive writing and algorithmic by Max messages (see Fig. 1); subsets of the library are applicable to lllls satisfying cer-
Patchwork paradigm) will ultimately be a non-real-time
control of symbolic musical material. tain given conditions: e.g., it is possible to perform mathe-
process, since parameter changes cannot immediately af- support for microtonal accidentals of arbitrary res- matical operations over lllls solely composed by numbers;
fect anything below them, unless some bottom-up oper- olution (see Fig. 2);
2. PROGRAMMING PARADIGMS a set of operators for matrix calculus only works with ap-
ation is requested on some lower elements. Moreover,
wide possibility of intervention over the graphical propriately structured lllls; and so on. It is important to
bach complies with the graphical data-flow programming the Max paradigm, not having to depend on return values,
parameters of musical notation; stress that all these operators are indeed Max objects, and
paradigm of Max, in which information is represented as easily allow for much more complexly structured patches:
while the kind of operations performed may bear some
a vertical, top-down flow. Data, typically coming from a single action can trigger multiple reactions in differ- ability to associate to each note various types of resemblance with Lisp, the actual implementation and in-
some user interaction, enter the program at its top, are ent operators (a function can call several other functions, meta-data, including text, numbers, files and break- terface are radically different, and as integrated as possi-
acted upon by a chain of specialized operators connected one after another has returned). The Patchwork paradigm, point functions (see Fig. 6); ble with the Max system. On the other hand, at least one
by lines called patch cords and exit the program at its on the other hand, has the advantage of allowing seam-
Common Lisp interpreter designed to run as Max objects
bottom. A simplified model of this mechanism, as seen less integration with textual coding, which can be an ex- variable-speed playback capability: both bach.score has been developed, Brad Gartons maxlispj [8]: it is ex-
from a lower-level point of view, might appear as follows: tremely useful resource whenever conceptually complex and bach.roll can be seen as advanced sequencers, tremely easy to exchange data with this object, in order
each operator is a function, usually written in C or C++, operations must be implemented. Moreover, representing and the whole set of data (such as pitch, velocity to take advantage of the expressive power of Lisp textual
and the data entering it are the arguments of the function musical notation (from single notes to an entire score) re- and duration information) and meta-data associated programming within a Max patch.
call. After performing its work upon the data it has re- quires sufficiently powerful and flexible data structures, to each note is output at the appropriate time during
ceived, each operator calls the function corresponding to which the Lisp lists certainly are. playback, thus making both objects extremely con-
venient for controlling synthesizers and other phys- 3.2. Music representation
the next operator in the chain, passing it the acted-upon
data. In this way a call stack is built, in which the oper- ical or virtual devices. At the intersection between the modules for musical nota-
3. THE BACH ENVIRONMENT
ator at the top of the graphical patch corresponds to the tion and the list operators is a family of objects performing
function at the base of the stack, and the operator at the As already stated, bach is a library of objects and patches operations upon lllls containing musical data.
3.1. Data types
bottom of the graphical patch corresponds to the function for the software Max, the distinction between objects and It is worth noting that different bach objects exchange
at the top of the stack. It is crucial to note that all these patches concerning more the implementation than the ac- bach also provides Max with two new data types: ra- musical scores in the form of specifically-structured lllls,
functions have no return value: the last operator of the tual usage of these modules. At the forefront of the system tional numbers and a nested list structure called llll, an whose contents is entirely readable and editable by the
chain simply passes the data to an arbitrary output device. are the bach.score and bach.roll objects. They both pro- acronym for Lisp-like linked list. Rational numbers are user; this is different from what happens e.g. in Open-
In this way, the perception on the users side is that the vide graphical interfaces for the representation of musical extremely important in music computation, as they ex- Music, where the exchange of musical data often involves
program essentially behaves like a musical instrument, in notation: bach.score expresses time in terms of traditional press traditional temporal units such as 1/2, 3/8 or 1/12 opaque objects.
which an action (e.g., pressing a piano key) triggers a se- musical units, and includes notions such as rests, mea- (that is, a triplet eight note) as well as harmonic ratios. This allows much easier and more transparent manip-
ries of reactions (levers moving, hammers striking) lead- sures, time signature and tempo; bach.roll expresses time The nested list has been chosen for both similarity with ulation of the musical data themselves. As a consequence,
ing, in a measurable but usually negligible time, to the in terms of absolute temporal units (namely milliseconds), the Lisp language, in a way to ease communication with strictly musical operations such as rhythmic quantization
production of a sensible result (sound). and as a consequence has no notion of traditional tempo- the major existing CAC environment, and the need to es- are just extremely specialized operations upon lllls, which
The major graphical computer-aided composition en- ral concepts: this is useful for representing non-measured tablish a data structure powerful enough to represent the of course can be performed only if the llll itself is struc-
vironments, that is the Patchwork family [10, 4] (Patch- music, and also provides a simple way to deal with pitch complexity of a musical score, but flexible enough to be a tured properly, and if its content is consistent from the
4 http://dh7.free.fr material whose temporal information is unknown or irrel- generic data container lending itself to arbitrary manipu- point of view of musical notation.
5 http://inscore.sourceforge.net evant. It should also be noted that the implementation of lations through a relatively small set of primitives. In fact, The structure of a llll representing a bach.score (Fig.
6 http://www.computermusicnotation.com traditional temporality concepts in bach.score is in fact the large majority of the modules of the bach library are 4) might appear quite complex at first sight, but the or-
_374 _375
Support for import and export of MIDI, MusicXML
and SDIF files.
A solver for constraint satisfaction problems.
Notice that the software development situation might
have changed at the time of publication, and some or all
of the hereby proposed features might already be partly or
fully implemented.
5. REFERENCES
3.3. Data handling mechanism [7] Y. Fober, Y. Orlarey, and S. Letz, An Environment
At the time of writing, bach is in its alpha development
for the Design of Live Music Scores, in Proceed-
phase: although the system is usable, not all the intended
As the goal of bach is allowing real-time interaction, a ings of the Linux Audio Conference, 2012.
features have already been implemented. Some of the
great amount of work has been spent to improve the sta-
planned additions are: [8] B. Garton. (2011, Jan.) maxlispj. [Online]. Avail-
bility and efficiency of the system. All the operations in
Figure 4. The structure of a simple score in llll form, with bach are thread-safe in the context of the Max threading able: http://music.columbia.edu/brad/maxlispj/
Support for rhythmic tree representation, which will
branches for voices, measures, chords and notes. (The model, and the passing of lllls between objects happens by allow, for example, nested tuplets to be represented, [9] D. Henry, PTL, a new sequencer dedicated to
header, containing additional information such as clefs, reference, rather than by value, unless the user explicitly whereas now a triplet containing a quintuplet is rep- graphical scores, in Proceedings of the Interna-
keys, types of meta-data, has not been dumped). requests otherwise, which is the case whenever the con- resented as a flat 15-uplet. This feature is cur- tional Computer Music Conference, Miami, USA,
tents of a llll need to be passed to a non-bach Max object rently under development, together with an intuitive 2005, pp. 738741.
(that only accepts data passed by value). Thus, lllls are measure linear editing system for the note insertion.
ganization of its contents is meant to be extremely ra- copied only when strictly necessary, and in all the other The underlying challenge is to keep the tree and lin- [10] M. Laurson and J. Duthen, Patchwork, a graphical
tional: after a header section containing global informa- cases a reference counting mechanism is used to ensure ear representations of durations always compatible, language in preform, in Proceedings of the Inter-
tion such as the clefs or the types of meta-data appear- that the lifetime of data structures and the usage of mem- so that users should concretely deal with the tree national Computer Music Conference, Miami, USA,
ing in the score, we find a sub-tree whose branches cor- ory are correctly managed. On the other hand, all this is representation only when they explicitly ask to (e.g. 1989, pp. 172175.
respond to one voice each; each voice branch contains transparent to the user, who never needs to cope with the when they insert as rhythm a nested rhythmic struc- [11] M. Puckette, A divide between compositional and
branches for each measure; each measure branch contains cloning of lllls, or the distinction between destructive and ture), or when they perform hierarchical operations performative aspects of Pd, in Proceedings of
some measure-specific information (such as time signa- non-destructive operations - as, on the contrary, it is often (e.g. when they split a chord). Users will also be the First Internation Pd Convention, Graz, Austria,
ture) and branches for each chord; each chord branch con- the case with Lisp. able to rebuild a default rhythmic tree from the lin- 2004.
tains some chord-specific information (such as its dura- ear representation at any moment.
tion) and branches for each note; and each note branch 3.4. Practical applications [12] N. Schnell, R. Borghesi, D. Schwarz, F. Bevilacqua,
contains pitch and velocity leaves, as well as possible fur- Implementation of hierarchical structures within a and R. Muller, FTM - Complex Data Structures for
ther specifications, such as glissando lines, enharmonic Taking all this into account, it should be clear that bach is score, allowing the user to group elements by name, Max, in Proceedings of the International Computer
information, articulations and meta-data. The llll repre- somehow placed at the convergence of several categories where an element can be a chord, a note, a marker, Music Conference, 2005.
senting a whole bach.roll has essentially the same struc- of musical software. Its capabilities of graphical repre- or another group.
_376 _377
Support for import and export of MIDI, MusicXML
and SDIF files.
A solver for constraint satisfaction problems.
Notice that the software development situation might
have changed at the time of publication, and some or all
of the hereby proposed features might already be partly or
fully implemented.
5. REFERENCES
3.3. Data handling mechanism [7] Y. Fober, Y. Orlarey, and S. Letz, An Environment
At the time of writing, bach is in its alpha development
for the Design of Live Music Scores, in Proceed-
phase: although the system is usable, not all the intended
As the goal of bach is allowing real-time interaction, a ings of the Linux Audio Conference, 2012.
features have already been implemented. Some of the
great amount of work has been spent to improve the sta-
planned additions are: [8] B. Garton. (2011, Jan.) maxlispj. [Online]. Avail-
bility and efficiency of the system. All the operations in
Figure 4. The structure of a simple score in llll form, with bach are thread-safe in the context of the Max threading able: http://music.columbia.edu/brad/maxlispj/
Support for rhythmic tree representation, which will
branches for voices, measures, chords and notes. (The model, and the passing of lllls between objects happens by allow, for example, nested tuplets to be represented, [9] D. Henry, PTL, a new sequencer dedicated to
header, containing additional information such as clefs, reference, rather than by value, unless the user explicitly whereas now a triplet containing a quintuplet is rep- graphical scores, in Proceedings of the Interna-
keys, types of meta-data, has not been dumped). requests otherwise, which is the case whenever the con- resented as a flat 15-uplet. This feature is cur- tional Computer Music Conference, Miami, USA,
tents of a llll need to be passed to a non-bach Max object rently under development, together with an intuitive 2005, pp. 738741.
(that only accepts data passed by value). Thus, lllls are measure linear editing system for the note insertion.
ganization of its contents is meant to be extremely ra- copied only when strictly necessary, and in all the other The underlying challenge is to keep the tree and lin- [10] M. Laurson and J. Duthen, Patchwork, a graphical
tional: after a header section containing global informa- cases a reference counting mechanism is used to ensure ear representations of durations always compatible, language in preform, in Proceedings of the Inter-
tion such as the clefs or the types of meta-data appear- that the lifetime of data structures and the usage of mem- so that users should concretely deal with the tree national Computer Music Conference, Miami, USA,
ing in the score, we find a sub-tree whose branches cor- ory are correctly managed. On the other hand, all this is representation only when they explicitly ask to (e.g. 1989, pp. 172175.
respond to one voice each; each voice branch contains transparent to the user, who never needs to cope with the when they insert as rhythm a nested rhythmic struc- [11] M. Puckette, A divide between compositional and
branches for each measure; each measure branch contains cloning of lllls, or the distinction between destructive and ture), or when they perform hierarchical operations performative aspects of Pd, in Proceedings of
some measure-specific information (such as time signa- non-destructive operations - as, on the contrary, it is often (e.g. when they split a chord). Users will also be the First Internation Pd Convention, Graz, Austria,
ture) and branches for each chord; each chord branch con- the case with Lisp. able to rebuild a default rhythmic tree from the lin- 2004.
tains some chord-specific information (such as its dura- ear representation at any moment.
tion) and branches for each note; and each note branch 3.4. Practical applications [12] N. Schnell, R. Borghesi, D. Schwarz, F. Bevilacqua,
contains pitch and velocity leaves, as well as possible fur- Implementation of hierarchical structures within a and R. Muller, FTM - Complex Data Structures for
ther specifications, such as glissando lines, enharmonic Taking all this into account, it should be clear that bach is score, allowing the user to group elements by name, Max, in Proceedings of the International Computer
information, articulations and meta-data. The llll repre- somehow placed at the convergence of several categories where an element can be a chord, a note, a marker, Music Conference, 2005.
senting a whole bach.roll has essentially the same struc- of musical software. Its capabilities of graphical repre- or another group.
_376 _377
OSC-NETLOGO: A TOOL FOR EXPLORING THE SONIFICATION OF
COMPLEX SYSTEMS USING NETLOGO
_378 _379