Professional Documents
Culture Documents
Adrien Ycart
Rfrents :
Auteur :
Jean Bresson
Adrien Ycart
Florent Jacquemard
31 juillet 2015
Rsum
La quantification rythmique est laction de transformer un flux temporel, par exemple une
squence de notes, en une partition, connaissant le tempo. Cette squence de notes peut provenir
de la captation du jeu dun musicien ou tre gnre par un processus compositionnel : cest ce
deuxime cas qui nous intressera. Ltape de transcription faisant partie du processus cratif,
nous cherchons dvelopper un outil permettant aux compositeurs de transcrire comme ils le
souhaitent leurs oeuvres en partitions. Pour cela, nous avons interrog des compositeurs et nous
avons dvelopp un algorithme proposant un ensemble de transcriptions possibles dune squence
de notes, classes selon un critre prenant en compte la prcision de la notation ( quel point la
sortie est fidle lentre) et sa complexit ( quel point la notation est lisible). Nous prsentons
des rsultats de cet algorithme et les comparons ceux de loutil actuel de quantification de
lenvironnement de composition assiste par ordinateur OpenMusic. Nous proposons diffrentes
pistes damlioration pour des travaux futurs.
Abstract
Rhythm quantization is the act of transforming a temporal stream, for example a sequence
of notes, into a music sheet, given the tempo. This sequence of notes can be taken from the
performance of a musician, or generated with computer-assisted composition tools : we will consider
the latter case in this work. Transcription is a part of the creation process, thus we aim to develop
a tool allowing the composers to transcribe their works into music sheets the way they want. To
do so, we interviewed composers and we developed an algorithm that returns a set of possible
transcriptions of a sequence of notes, ranked according to a criterion that takes into account
the precision of the notation (how close the output is from the input) and its complexity (how
readable it is). We present some results of this algorithm and compare them to those returned by
the quantization tool currently used in the computer-assisted composition environment OpenMusic.
We suggest various possible improvements for future work.
Remerciements
Je remercie mes deux encadrants, Jean Bresson et Florent Jacquemard
pour leur aide prcieuse tout au long de ce stage, depuis la dfinition des
thmatiques de recherche jusqu la rdaction de ce rapport. Que ce soit
par leur aide dans la comprhension des concepts manipuls, dans limpl-
mentation des algorithmes dvelopps, ou dans la restitution des travaux
effectus, leur recul et leur soutien mont t indispensables pour mener
bien ce travail de recherche, et je leur en suis extrmement reconnaissant.
1 La quantification rythmique 1
1.1 Description du problme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Explication pralable sur le rythme . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 Le problme de la quantification rythmique . . . . . . . . . . . . . . . . . . 2
1.1.3 Deux approches pour la quantification . . . . . . . . . . . . . . . . . . . . . 3
1.2 Reprsentation du rythme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.1 Arbres de rythme dOpenMusic . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2 Arbres de rythme symboliques . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Etat de lart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1
3.2 Principe de lalgorithme dnumration des meilleures solutions : lalgorithme k-best 19
3.2.1 Entres et sorties de lalgorithme . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.2 Construction de lautomate . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.2.1 Reprsentation interne des arbres . . . . . . . . . . . . . . . . . . 20
3.2.2.2 Format de lautomate . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.3 Droulement de lalgorithme . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.3.1 Une tape de lalgorithme . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.3.2 Ajout des candidats suivants la liste des candidats . . . . . . . . 22
3.2.4 Un exemple simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3 Choix des mesures de poids . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5 Bilan et perspectives 44
5.1 Bilan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.2 Perspectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2.1 Critres de choix des arbres . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2.1.1 Choix des mesures de distance . . . . . . . . . . . . . . . . . . . . 45
5.2.1.2 Choix des mesures de complexit . . . . . . . . . . . . . . . . . . . 45
5.2.1.3 Choix de la fonction de poids . . . . . . . . . . . . . . . . . . . . . 46
5.2.2 Sur les automates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.2.2.1 Stockage en mmoire des automates . . . . . . . . . . . . . . . . . 46
5.2.2.2 Choisir un autre automate . . . . . . . . . . . . . . . . . . . . . . 46
5.2.3 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.2.3.1 Prciser les paramtres significatifs . . . . . . . . . . . . . . . . . . 47
5.2.3.2 Editeur de schmas de subdivision . . . . . . . . . . . . . . . . . . 48
5.2.4 Apprentissage des prfrences de lutilisateur . . . . . . . . . . . . . . . . . 48
Chapitre 1
La quantification rythmique
La quantification est laction de convertir des donnes valeurs continues (ou discrtes ap-
partenant un grand ensemble de valeurs) en donnes valeurs discrtes appartenant un petit
ensemble de valeurs. Ce problme se pose en particulier lorsque lon souhaite numriser des donnes
analogiques, telles que par exemple un signal acoustique en un fichier audio, ou un signal lumineux
en une image numrique, ou encore lorsque lon souhaite compresser des donnes. Cela se fait
le plus souvent au prix dapproximations, que lon souhaite les moins sensibles possible. Dans le
domaine de la musique, on se confronte au problme de la quantification lors de la transcription
dune performance, dun enregistrement, ou de donnes musicales non quantifies, en partition.
On doit dune part quantifier les hauteurs, cest dire obtenir partir de la donne physique de
la frquence fondamentale la notes de la gamme laquelle elle correspond, dautre part, on doit
quantifier les dures, cest dire transformer la suite des instants de dbut et de fin des notes en
rythmes crits en notation occidentale. Ce stage porte sur ce deuxime problme.
Dans cette section, nous poserons le problme de la quantification, puis nous dcrirons quelques
formalismes darbres de rythme, et enfin, nous ferons un tat de lart des mthodes de transcription
rythmique existantes.
1
cas dun rythme ternaire, elle est divise en trois. Dautres divisions moins courantes, appeles
irrationnelles, existent galement. Le rythme est ensuite donn par lassemblage de ces figures de
notes. Les rythmes sont ensuite regroups en mesures, dont la dure est donne par la signature
rythmique, afin dtre manipuls plus facilement en units cohrentes.
Figure 1.1 Division successive des dures : une ronde vaut deux blanches, une blanche vaut deux
noires...
Dures
Quantification Infrence de
rythmique tempo
Figures de
Tempo
Interprtation notes
Figure 1.2 Une reprsentation de la triple dpendance entre dures, tempo et figures de notes, et des
trois problmes quelle dfinit.
2
Figure 1.3 On quantifie deux fois la suite de notes en haut, au milieu sans prciser de tempo ni de
signature, en bas en prcisant les changements de tempo et la signature. On obtient dans le deuxime cas
une notation beaucoup plus intelligible.
a)
b)
c)
Figure 1.4 Figure extraite de [8] : a) Squence quantifier. b) Une notation prcise, mais complexe de
la squence. c) Une autre notation de la mme squence, moins prcise mais moins complexe.
3
dun musicien (enregistrement MIDI), et on veut en retrouver la notation rythmique.
Approche CAO 2 Les donnes temporelles ont t gnres par un processus compositionnel
ou bien dictes par le compositeur sur un clavier, et on veut en faire une partition destine
tre joue par des interprtes.
La posture adopter est lgrement diffrente dans les deux cas. En effet, dans le premier
cas, on peut supposer quil existe une partition de rfrence, laquelle comparer le rsultat de la
quantification. Dans le deuxime cas, il ny a pas une seule bonne partition que lalgorithme doit
donner. En effet, de mme quune ide peut tre crite de diffrentes faons, un mme rythme peut
avoir de nombreuses notations diffrentes, chacune induisant un sens particulier, une interprtation
particulire. Choisir celle qui correspond ce que le compositeur souhaite transmettre est une
tape importante du processus de composition, puisquelle conditionne la faon dont les interprtes
joueront loeuvre et donc le rendu final. Lobjectif ici nest donc pas de trouver la meilleure notation,
mais plutt de fournir au compositeur des outils pour lui permettre dobtenir la partition quil
souhaite, parmi un ensemble de partitions possibles choisies selon des paramtres porteurs de sens
musical.
(D(Subdivisions))
D correspond la dure du noeud, et (Subdivisions) est une liste, ventuellement vide lorsque
le noeud est une feuille, contenant des sous-arbres. La dure D dun noeud est dfinie en proportions
par rapport aux dures de ses cousins. Ainsi, larbre de rythme (1 (1 2 1)) est quivalent (1 (2 4 2)),
et donne le rythme si la dure de base choisie vaut une blanche. Lorsquune dure est ngative,
elle correspond un silence, et lorsquil sagit dun flottant et non dun entier, sa valeur est lie
la prcdente.
2. CAO = Composition Assiste par Ordinateur
4
1.2.2 Arbres de rythme symboliques
Les arbres de rythme symboliques [13], contrairement aux arbres dOpenMusic, ne contiennent
aucune valeur numrique. Les noeuds internes nont pas dtiquettes (ou ventuellement une ti-
quette correspondant larit du noeud, et donc redondante avec la structure de larbre). Les
feuilles sont tiquetes avec 4 symboles. Une feuille tiquete avec le symbole n correspondra une
note, le symbole r donne un silence, le symbole s lie la note avec la prcdente, et le symbole 1+
permet de sommer des dures. La dure de chaque feuille est dfinies par sa position dans larbre :
la dure dun noeud est gale celle de son parent divise par larit du parent, laquelle on ajoute
la dure du cousin de gauche si ce dernier est tiquet avec le symbole 1+.
La figure 1.5 montre la notation dun mme rythme avec chacun des deux formalismes.
Partition rythmique
Figure 1.5 Un rythme et ses quivalents dans les deux formalismes darbres de rythme dcrits
5
Le principe de fonctionnement de lalgorithme de quantification actuel dOpenMusic, omquantify
[18], est dcrit dans [1]. Il se base sur un dcoupage en sous tches de la squence quantifier.
La squence est dabord dcoupe en archi-mesures, puis en mesures, qui correspondent des
segments sur lesquels le tempo est suppos constant. Le tempo peut tre dtermin sur chaque
segment comme tant un pgcd approxim des dures lintrieur du segment. Chaque temps est
divis en n parties gales, avec n allant du nombre de notes dans le temps 32, et les instants de
dbut des notes sont recals sur la subdivision la plus proche. Le rythme choisi est celui obtenu
laide de la valeur de n, cest dire de la grille de quantification offrant le meilleur compromis
entre la prcision (caractrise par la distance entre le rythme original et le rythme quantifi) et la
complexit (les subdivisions du temps sont classes de la moins complexe la plus complexe : 1,
2, 4, 3, 6, 5, 8, 7...). La fonction renvoie une structure rythmique, reprsente sous la forme dun
arbre de rythme OpenMusic.
Cet outil fonctionne, il est trs utilis par lensemble des utilisateurs dOpenMusic, mais il a
plusieurs dfauts. Tout dabord, la grille de quantification est uniforme sur chaque temps, ce qui
signifie quon ne peut pas quantifier plus finement certaines parties du temps plus denses en notes
que dautres parties de temps qui en contiennent moins. Dautre part, lorsque des contraintes ne
peuvent pas tre rsolues, cest dire lorsque deux notes sont recales sur le mme point de la
grille, lune des deux est limine, ce qui nest videmment pas souhaitable. Il serait prfrable
dadopter la notation de grace note (appogiature), cest dire considrer lune des deux comme
un ornement de lautre. Enfin, les silences, ne sont pas grs par lalgorithme, qui prend en entre
une suite de dures et considre que toutes les notes sont conscutives. Pour pouvoir quantifier des
silences, il faut les noter explicitement dans la suite des dures dentre. Des entretiens avec les
utilisateurs de cet outil ont t raliss au cours de ce stage, dont un compte rendu est donn au
chapitre 2, et ont permi de mettre en vidences certains problmes rencontrs par les utilisateurs
de cet outil.
Une autre approche pour la quantification base sur les arbres de rythme a t propose [9] et
implmente dans OpenMusic sous forme dune bibliothque appele OMrewrite, sappuyant sur
la notion de rgles de rcriture [13], cest--dire des transformations darbres dfinies par filtrage
par motif (pattern matching). Ces rgles permettent dobtenir diffrentes notations quivalentes
dun mme rythme (cest--dire de la mme suite de dures), par exemple pour laisser le choix
lutilisateur entre diffrentes notations. Certaines sont conservatives (les dures ne sont pas modi-
fies), et dautres non. A partir dun ensemble de rgles de rcriture, on peut proposer un systme
de quantification, qui commence par gnrer un arbre de profondeur maximale correspondant
lentre, puis applique ces rgles pour le simplifier, comme prsent Figure 1.6.
Figure 1.6 Des rgles de rcriture sont appliques larbre complet gnr partir des dures (arbre
de gauche). On obtient finalement le rythme croche demi-soupir.
Ici, la structure arborescente du rythme est bien exploite, mais le succs de la quantification
dpend grandement des rgles de rcriture utilises et de leur application. En effet, le choix de
lordre dans lequel on applique ces rgles nest pas anodin et peut tre dterminant (en dautres
6
termes, la proprit de confluence nest pas forcment vrifie). Pour avoir un systme efficace, il
faut choisir une stratgie de rcriture, par exemple de la racine vers les feuilles ou linverse. De
nombreuses stratgies de rcriture de termes existent [4], la recherche et limplantation de rgles
et de stratgies de rcriture pertinentes est un problme de recherche compliqu, qui dpasse le
cadre de ce stage. De plus, la structure de larbre de profondeur maximale est dterminante pour le
rsultat final, et elle est fige, on ne peut pas en essayer plusieurs moins de relancer lalgorithme
avec dautres paramtres.
7
Chapitre 2
Dans le cadre de ce stage, nous avons rencontr quatre utilisateurs de lenvironnement Open-
Music. Nous les avons interrogs sur leurs travaux, ainsi que la place quy prennent les outils de
quantification et de manipulation de rythmes. Nous avons galement discut des problmes quils
ont rencontrs, et des perspectives damlioration qui pourraient rendre ces outils plus efficaces
la fois pour les utilisateurs interrogs et, dans un cadre plus gnral, pour lensemble de la commu-
naut OpenMusic. Nous ne nommerons pas les utilisateurs, nous les dsignerons simplement par
leurs initiales.
2.1 Utilisateur 1 : AR
2.1.1 Description de ses travaux
AR est un compositeur italien qui travaille sur il canto in ottava rima, une forme de chant
traditionnel italien. Il sagit de chants improviss sur des textes potiques. Les performances sar-
ticulaient sous forme de joutes verbales codifies, avec des changes, de appels, auxquels corres-
pondaient certaines formules mlodiques et rythmiques. Il souhaiterait obtenir des partitions de
ces chants, qui font partie de la tradition orale italienne et nont donc jamais t crites, afin dy
puiser des ides et enrichir son propre vocabulaire musical.
8
On fixe les dures en secondes des vnements MIDI, et on dcale la souris les pulsations
pour les faire concider avec des dbuts de notes MIDI. Dans cette tape, on ne recale
que les notes qui correspondent des temps forts. Par exemple, pour une longue phrase,
on ne recalera que le dbut et la fin de la phrase, le milieu sera laiss tel quel. On obtient
ainsi une piste avec des notes de dures inchanges, mais avec un tempo variable.
On fixe ensuite les dures des notes non plus par rapport au temps physique 1 , mais par
rapport la mesure, puis on rend le tempo constant. Cette tape conserve les conci-
dences entre les notes et la pulsation, mais modifie les dures en secondes des notes. On
obtient ainsi un fichier MIDI tempo constant, o les temps forts de la musique sont
recals sur les pulsations.
La Figure 2.2 dtaille cette tape.
Quantification dans OpenMusic : AR charge le fichier MIDI ajust dans OpenMusic, puis
il place ventuellement les sparateurs juste avant les temps forts de la musique (cette tape
nest pas forcment obligatoire, puisque ces temps forts sont en gnral dj recals sur des
dbuts de mesure. Il quantifie ensuite les segments laide domquantify, en prenant comme
tempo celui utilis lors du rajustement du fichier MIDI. Les autres paramtres sont ajusts
la main, en visualisant le rsultat des diffrentes modifications.
Les diffrentes tapes de ce processus sont rsumes dans le diagramme Figure 2.1
Barres de
Tempo mesure
a) b) c)
Piano roll Piano roll Piano roll
Figure 2.2 Etape dajustement du tempo. a) Dures non ajustes, tempo constant. Les barres verticales
correspondent aux pulsations. b) Les dures ne sont pas modifies, le tempo nest plus constant. Les barres
rouges correspondent aux pulsations dcales manuellement. c) On rend le tempo constant. Les dures sont
modifies, les coincidences entre les notes et la pulsation sont conserves.
1. On distingue le temps absolu, physique, qui correspond des dures en secondes, et le temps relatif, musical,
qui est li la pulsation et dpend du tempo.
9
2.1.3 Problmatiques
On voit que diffrents moments, le compositeur est amen faire des choix dans le processus
de quantification (par exemple pour choisir quels sont les notes recaler sur des pulsations, quelles
notes laisser libres, comment regrouper les notes en mesures). Ces choix ne sont pas anodins, il
sagit de gestes cratifs forts, qui donnent un sens particulier la musique qui est crite. Une
phrase musicale naura pas le mme sens, ne sera pas interprte de la mme faon en fonction
de la position des temps forts, dfinis par le compositeur lors de lcriture de la partition. Mme
si on pourrait imaginer des algorithmes permettant de rpondre certaines de ces question, par
exemple des algorithmes permettant de maximiser les concidences entre la grille et les notes, ce
nest pas souhaitable, car cest au compositeur quil revient de prendre ces dcisions.
Dautre part, les diffrents choix faits ont tous une importance sur la partition finale, et ils sont
pour la plupart lis entre eux. Le tempo que lon choisit dans Cubase sera conserv pour tout le
reste de la quantification, et le choix de ce tempo se base sur un certain nombre dhypothses faites
sur la quantification du morceau (en particulier, que les temps forts sont jous sans imprcision).
De plus, il ny a pas une unique solution pour chaque problme, le compositeur peut vouloir essayer
plusieurs valeurs de paramtres, et choisir la solution qui lui convient le mieux. On voit quavec
ce genre de processus de travail, linaire, on peut difficilement jouer indpendamment sur chaque
paramtre : on ne peut pas en faire varier un et obtenir le rsultat sans repasser par toutes les
tapes du processus.
Enfin, il arrive que lon veuille transcrire des phrases musicales complexes, de dures diffrentes,
o les temps forts ne sont pas forcment uniformment espacs. Dans ce cas, la transcription peut
se faire selon plusieurs paradigmes : soit on prfre faire varier le tempo, soit on fait au contraire
varier la signature rythmique. Par exemple, en 4/4, pour noter une mesure constitue de cinq
notes de longueur gales, on pourra soit conserver la mesure 4/4, et noter un quintolet, soit utiliser
exceptionnellement une mesure 5/4. Dans le premier cas, il faudra que le tempo soit plus lent que
dans le deuxime pour obtenir un rsultat quivalent. Ces deux notations ont des sens diffrents,
et peuvent donner lieu des interprtations diffrentes (par exemple, le quintolet pourra tre
interprt plus librement rythmiquement que les cinq noires, o il sera plus important que les 5
notes aient des longueur gales car elles sont directement lies la pulsation), et un compositeur
peut vouloir choisir entre les deux.
10
2.1.4.2 Modes de quantification
Pouvoir choisir quel paramtre on prfre fixer, et quel paramtre on veut faire varier pourrait
tre un contrle important pour la quantification, comme nous lavons expliqu dans la partie
prcdente. Pour noter un rythme complexe, avec des mesures de dures diffrentes, on peut :
Fixer le tempo et la signature rythmique. On obtient une notation souvent complexe, difficile
dchiffrer, qui ne reflte pas forcment le sens musical de la phrase
Fixer la signature rythmique, et faire varier le tempo dune phrase lautre. Cette notation
peut donner lieu des rythmes complexes mais a lavantage de dcouper en units cohrentes
la musique
Fixer le tempo, et faire varier la signature rythmique. Si on arrive trouver un diviseur
commun, ou au moins approxim, toutes les dures de lensemble des phrases quantifier,
on peut vouloir utiliser cette unit comme base commune pour la transcription, crire les
rythmes par rapport cette base et faire varier la signature en fonction de la longueur de
chaque phrase. Ce choix va en gnral donner lieu des rythmes plus simples dchiffrer,
mais des mesures aux signatures plutt complexes et changeantes.
Un exemple est montr Figure 2.3
=60 =100
10 6 4
8 8 4
Figure 2.3 Deux grilles diffrentes pour quantifier des phrases de dures diffrentes
2.1.4.3 Silences
Au cours de ces travaux, AR a remarqu que souvent, la dure des silences, des respirations,
ntait pas quelconque, elle faisait partie de la musique. Ces respirations ont un sens smantique,
qui nest pas vraiment analys dans ltat actuel, car seules les dures des notes sont prises en
compte, et on les suppose toutes conscutives. Il ny a pas donc de quantification des silences
proprement parler si lon utilise loutil omquantify tel quel. Il existe nanmoins un moyen de
quantifier des silences. On peut appliquer au pralable la fonction true-durations lentre
quantifier. true-durations est une fonction qui prend en entre un objet chord-seq, cest dire
une squence de notes ou daccords, et renvoie une liste de dure. Cette liste de dures est telle que
les silences qui taient prsents dans lobjet chord-seq sont rendus explicites (ils sont nots avec
des dures ngatives) et lorsque deux notes conscutives se superposent dans lobjet chord-seq, la
premire est raccourcie jusquau dbut de la deuxime. On peut ainsi quantifier correctement une
partition monophonique contenant des silences, puisque les dures des silences sont explicites, et
seront quantifies comme les autres dures, mais cette fonction est mconnue des utilisateurs.
2.2 Utilisateur 2 : OM
2.2.1 Description de ses travaux
OM tudie dans le cadre de sa thse en musicologie le chant non mlodique francophone dans
le rap, le ragga et le punk. Il essaie en particulier de dfinir ces styles, trouver des diffrences et des
points communs entre ces courants, et mettre en vidence leurs singularits. Pour cela, il tudie
en particulier le placement rythmique de la voix dans ces styles (temps forts, dbuts et fins de
phrases), et cette fin, utilise des outils de quantification rythmique.
11
2.2.2 Mthode de travail actuelle
Son processus de travail est le suivant :
Extraction de syllabes : Pour cela, il utilise AudioSculpt. Il extrait automatiquement les
phonmes et recale la main leurs instants de dbut pour les faire correspondre linstant
de dbut peru. Il obtient ainsi une liste dinstants de dbuts de phonmes, ainsi que diverses
autres annotations qui ninterviennent pas dans le processus de quantification.
Extraction de beats : Toujours dans AudioSculpt, OM utilise Ircam Beats pour dtecter le
tempo, ainsi que les mesures et les premiers temps dans ses morceaux. Il obtient ainsi une
liste dinstants correspondant aux pulsations, regroupes par quatre (par mesure).
Quantification : Pour quantifier, il rcupre les premiers temps de chaque mesure et utilise ces
marqueurs pour dcouper le fichier dentre en mesures. Il quantifie ensuite avec omquantify
sur chaque mesure. Il obtient ainsi une partition par mesure, puis les concatne pour obtenir
la partition finale. Les rythmes obtenus peuvent parfois tre inutilement compliqus, il
interdit donc les subdivisions par 5 et par 7, et obtient des rsultats satisfaisants.
Son processus de travail est rsum sur le diagramme Figure 2.4
Ircam Beats
12
2.3 Utilisateur 3 : EP
2.3.1 Description de ses travaux
EP est un compositeur italien. Il souhaite composer une oeuvre en prenant comme base la
dcomposition harmonique dun son de clarinette.
2.4 Utilisateur 4 : GH
2.4.1 Description de ses travaux
GH est un compositeur canadien. Il ne travaille pas directement sur omquantify, mais plutt
autour de la reprsentation du rythme dans OpenMusic. Il travaille sur la gnration de phrases
musicales laide dalgorithmes gntiques, et cherche en particulier trouver une bonne repr-
sentation pour pouvoir gnrer des rythmes avec de tels algorithmes.
13
On a une population de dpart, qui correspond des solutions possibles dun certain pro-
blme (dans notre cas, par exemple, des squences de notes). Elle peut tre soit initialise
alatoirement, soit choisie par lutilisateur.
On effectue des croisements entre les individus de cette population. Cela revient crer de
nouveaux individus, mlangeant des caractristiques dindividus existants.
On applique des mutations sur certains de ces individus. Cela correspond effectuer de
petites modifications sur les individus.
On slectionne selon un certain critre les meilleurs individus de la population. On applique
nouveau lalgorithme sur cette population rduite, et on rpte cette squence dtapes
jusqu ce que le rsultat soit satisfaisant.
A partir de cet algorithme gnral, il faut rpondre 4 questions pour obtenir un algorithme
appliquable la gnration de rythmes :
Comment effectuer les croisements entre individus ?
Comment faire les mutations ? La question sous-jacente est celle de la dtermination du sens
quon donne "petite modification".
Comment choisir les meilleurs individus ?
Quelle reprsentation des rythmes choisir pour effectuer ces modifications ?
14
devra tre une fonction valuant une distance par rapport la squence non quantifie, pondre
par la complexit du rythme quantifi. Les fonctions de mutation et de croisement devront en
particulier garantir que le nombre de notes nest pas modifi. Cela implique que la mutation ne
devra pas rajouter ni enlever de notes (cest dire de feuilles). On pourra donc par exemple
modifier la dure dun noeud de larbre (ce qui change la dure relative de la section descendant de
ce noeud), ou encore modifier la structure de larbre sans changer le nombre de feuille (par exemple
en supprimant un noeud interne et en faisant remonter tous ses fils). La fonction de croisement
devra faire en sorte de nchanger que des motifs (cest dire des sous-arbres) contenant le mme
nombre de notes.
Les algorithmes gntiques peuvent proposer une alternative omquantify, comme nous lavons
vu plus haut, quelques restrictions prs (notamment sur le nombre de notes dans la squence).
Avec des fonctions de mutation et de slection bien penses, on pourrait peut-tre trouver plus
facilement une bonne notation pour une entre particulire, fidle, simple, et potentiellement assez
diffrente de celle obtenue avec omquantify (la structure de larbre dpendra de ses diffrentes mu-
tations, et non dun schma de subdivision prdfini). Cependant, il nest pas forcment judicieux
dutiliser ces algorithmes dans ce but. En effet, les algorithmes gntiques sont assez lourds en cal-
cul, et convergent en gnral au bout dun temps assez long. Or, nous lavons vu, les compositeurs
ne recherchent pas forcment loutil qui leur renverra la meilleure partition pour leur oeuvre, ils
recherchent plutt un outil permettant de tester les diffrents paramtres et visualiser des rsultats
correspondants facilement et rapidement. Cela peut donc tre une alternative, mais cela ne semble
pas tre la direction prconise par les compositeurs rencontrs.
2.5 Conclusion
Les principales conclusions que nous pouvons dgager de ces entretiens sont :
Contrle du compositeur : Le choix dune notation nest pas anodin, et fait partie du pro-
cessus de composition. De plus, les diffrentes tapes de la production dune partition ont
toutes une grande importance sur le rsultat final. Il est donc important que les outils fournis
facilitent le contrle du compositeur sur la partition finale, par exemple en lui permettant de
visualiser facilement le rsultat des diffrentes modifications ou en lui proposant de choisir
parmi plusieurs solutions possibles au lieu de donner une seule solution.
Gestion des silences et des grace notes : Ces aspects de la quantification sont assez mal
exploits par les utilisateurs. omquantify ne gre pour linstant pas directement les silences
dans les suites de notes, puisque seuls les onsets sont pris en compte. Nanmoins, il existe
des fonctions permettant de quantifier les silences, mais elles ne sont en gnral pas connues
des utilisateurs. De mme, certaines mthodes existent pour quantifier les grace notes,
mais le formalisme des arbres de rythme ne le prend pas en compte.
Fixer les temps forts : Il nexiste pas de mthode simple permettant de dfinir quelles notes
sont censes tomber sur des temps, o doivent tre les barres de mesure, ainsi que dautres
paramtres importants du point de vue smantique (quil revient au compositeur de dfinir
et non un algorithme).
Tactus, signature, tempo : Lorsque lon veut quantifier des phrases de dures (en seconde)
diffrentes, on peut soit garder un tempo constant et faire varier la signature rythmique, soit
faire varier le tempo en gardant une signature constante. Un schma reprsentant ces deux
modes de quantification est donn Figure 2.3. On peut aussi prfrer noter des variations
linaires du tempo (accelerando, decelerando), plutt que de faire appel des rythmes ou
des notations plus complexes. Les compositeurs sont demandeurs doutils permettant de
naviguer entre ces diffrentes notations.
15
Chapitre 3
Suite aux entretiens raliss, nous avons essay de dvelopper un outil plus performant vis vis
des problmes voqus. Notre systme prend en compte les silences et les grace notes. Nous avons
galement propos une solution au problme du contrle du musicien en dveloppant un algorithme
permettant au compositeur de choisir entre plusieurs quantifications possibles pour une srie de
dures donne, et ce avec peu de calculs. Cette solution a t dveloppe en se basant sur la classe
dalgorithmes, appels algorithmes k-best, dcrite dans [12]. Ils permettent, laide de techniques
de programmation dynamique, de renvoyer, parmi une classe darbres prdfinie, les arbres de poids
les plus faibles selon une certaine mesure. Les poids sont valus de faon paresseuse, ce qui rend
ces algorithmes efficaces dun point de vue computationnel. De plus, ces algorithmes permettent
une structuration du rythme plus complexe que la division de la pulsation en partie de dures
gales propose par omquantify.
Dans cette partie, nous commencerons par voquer les points thoriques sur lesquels notre algo-
rithme se repose, puis nous dcrirons notre version de lalgorithme k-best ainsi que les modifications
que nous lui avons apportes pour ladapter la quantification rythmique.
16
par la grammaire est la suite des dures donne par les feuilles de larbre, et larbre de rythme de
sortie est larbre de drivation de cette grammaire qui permet dobtenir les dures considres.
Figure 3.1 [16] Un rythme et larbre de drivation correspondant selon la grammaire hors-contexte
dcrite gauche : la structure de larbre de drivation est comparable aux arbres de rythme utiliss dans
ce stage.
Schema = AndList
AndList = liste de OrList
OrList = valeur ou liste de AndList
Les lments dune AndList correspondent des divisions successives, et les lments dune
OrList correspondent diffrents choix de subdivisions une profondeur donne. Les deux types
de listes sont reprsents par des listes simples, mais pour en faciliter la lecture, nous sparerons
les lments des OrList par des barres verticales : | . Plusieurs exemples de schmas sont donns,
ainsi que les subdivisions possibles auxquels ils correspondent :
(3 2 2) : On divise le segment en 3, puis on redcoupe chaque subdivision en 2, puis nouveau
en 2.
((2|3) 2 2) : On a le choix entre les schmas (2 2 2) et (3 2 2)
((2|3) ((2 3) | ((3|5) 2))) : Pour la premire division, on peut diviser soit en 2, soit en 3. En-
suite, on peut soit diviser en deux puis en 3, soit diviser en 3 ou en 5, puis en 2. Cela revient
avoir le choix entre les schmas (2 2 3), (2 3 2), (2 5 2), (3 2 3), (3 3 2) et (3 5 2).
Ainsi, lexemple de la Figure 3.1 correspond un schma de subdivision gal (2 2 2 2).
On a la proprit suivante :
Lensemble des arbres de rythme compatibles avec un schma de subdivision est un langage
dautomate darbre
En effet, partir dun schma, on peut construire une grammaire hors contexte. Par exemple,
le schma ((2|3) ((2 3)((3|5) 2))) permet de gnrer la grammaire hors contexte suivante :
17
racine 21 | 31 |
21 22 | 32 | 52 |
31 22 | 32 | 52 |
22 33 |
32 23 |
52 23 |
23
33
Ici, le symbole signifie quon ne resubdivise pas, cest le seul symbole terminal.
Le poids dun arbre est donc vu comme le produit dune mesure de distance et dune mesure
de complexit. Le choix de ces mesures est dterminant, nous y reviendrons la partie 3.3. Une
fois ces mesures dfinies, le problme de la transcription revient trouver larbre de poids minimal
que lon peut gnrer avec la grammaire dfinie au pralable.
18
partir de ceux de ses fils. Lhypothse qui permet de commencer lnumration sans avoir explor
lensemble des solutions est celle de la monotonie :
Soit un noeud a, ayant k fils nots a1 , a2 , ... , ak , et w la fonction qui associe un noeud
son poids. Alors
19
forme suivante : path = (a1 d1 )(a2 d2 )...(an dn ) , o les a correspondent aux arits des noeuds, et
les d indiquent la branche choisie pour arriver au noeud considr. Un exemple est donn Figure 3.2.
A chaque chemin correspond une portion du segment dentre : le chemin (3 1)(2 2) correspond
ainsi la deuxime moiti du premier tiers du segment.
20
Niveau 0 Niveau 1 Niveau 2
liste vide (racine) (3 1) (3 1), (2 1)
(3 1), (2 2)
(3 2) (3 2), (2 1)
(3 2), (2 2)
(3 3) (3 3), (2 1)
(3 3), (2 2)
(2 1) (2 1), (2 1)
(2 1), (2 2)
(2 2) (2 2), (2 1)
(2 2), (2 2)
Figure 3.3 Tableau recensant les tats construits pour un schma de subdivision ((2|3) 2). Les
tats sont classs par profondeur.
21
1) 1 2 3 4 2) 1 2 3 4 3) 1 2 3 4
1 C 1 1 C 1 1 C
2 2 C 2 2 C
3 3 3 C
4 4 4
4) 1 2 3 4 5) 1 2 3 4 6) 1 2 3 4
1 1 3 C 1 1 3 C 1 1 3 C
2 2 C 2 2 C 2 2 5 C
3 C 3 4 C 3 4 C
4 4 C 4 C
Figure 3.4 Exemple dordre dajout des candidats pour un noeud darit 2 : La ligne donne le rang
du run fils pour la branche de gauche, la colonne, celui de la branche de droite, C veut dire que le run est
ajout la liste des candidats, les numros donnent lordre dajout la liste des candidats dans la liste des
meilleurs runs.
Si tous les poids des candidats ont t dfinis, on choisit celui de poids le plus faible, on
le retire de la liste des candidats et on le place dans la liste des k meilleurs. On ajoute
la liste des candidats les prochains potentiels candidats, comme expliqu plus loin.
Si la liste des candidats est vide, par exemple dans le cas dune feuille, o il ny a quun
candidat possible, ou dans le cas dun noeud interne dont tous les candidats ont dj t
valus et classs dans la liste des k meilleurs, on renvoie un valeur spciale de poids (+).
Ainsi, on vite de continuer chercher lorsque toutes les possibilits ont dj t numres.
Ainsi on va lancer lalgorithme la racine, qui appellera rcursivement lalgorithmes sur chaque
sous-arbre, et ce jusquaux feuilles. Une fois arriv aux feuilles, on peut commencer valuer les
poids, et on value ainsi le poids de chaque sous arbre partir du poids de ses fils.
((i1 + 1) i2 ... in ), (i1 (i2 + 1) ... in ), ..., (i1 i2 ... (in + 1))
22
subdivisions possibles sont reprsentes Figure 3.5. On peut dores et dj supposer quune bonne
quantification de ces dures serait le rythme .
0 0.45 1
Figure 3.5 Lentre est reprsente en rouge, les subdivisions possibles sont reprsentes en noir.
Les listes de candidats et des meilleurs runs, stocks dans la table sous la forme de couples
(run, poids) sont initialises comme suit :
On cherche obtenir best(1, racine). La liste des meilleurs runs est vide pour linstant, on
cherche donc dans la liste des candidats le meilleur. Un candidat dans la liste a un poids indfini,
on cherche donc lvaluer. Pour cela, comme le run non valu vaut (1 1), on cherche best(1, (2 1))
et best(1, (2 2)).
Commenons par le fils de gauche. A nouveau, la liste des meilleurs runs est vide et le poids
dun des candidat nest pas dfini, on cherche donc lvaluer.
Comme le run non valu vaut (1 1), on appelle best(1, (2 1)(2 1)) et best(1, (2 2)(2 2)). Pour
ltat (2 1)(2 1), tous les candidats ont t valus, celui de poids le plus faible est (nil, 0) : on le
retire de la liste des candidats et on le place dans la liste des meilleurs runs. Dsormais, lorsque lon
cherchera le meilleur run pour ltat (2 1)(2 1), il suffira daller le chercher dans la liste des meilleurs
runs. Comme aucune subdivision nest possible pour cet tat, on ne rajoute pas de candidats, la
liste des candidats reste vide. On fait de mme pour ltat (2 1)(2 2).
A ce stade, la table de hachage est la suivante :
23
Etat Liste de candidats Liste des meilleurs runs
liste vide (racine) (nil, 0.45) ((1 1), undef )
(2 1) (nil, 0.1) ((1 1), undef )
(2 2) (nil, 0) ((1 1), undef )
(2 1)(2 1) (nil, 0)
(2 1)(2 2) (nil, 0.15)
(2 2)(2 1) (nil, 0)
(2 2)(2 2) (nil, 0)
On peut maintenant valuer le run (1 1) de ltat (2 1) : son poids vaut 0 + 0.15 = 0.15. Tous les
candidats de cet tat sont maintenant valus, celui de poids le plus faible est le run correspondant
au cas o on ne subdivise pas : on le retire de la liste des candidats et on le place dans la liste
des meilleurs runs. Comme aucune subdivision nest possible pour cet tat, on ne rajoute pas de
candidats.
De la mme faon que pour ltat (2 1), on calcule le poids du run (1 1) de ltat (2 2) : son
poids vaut 0 + 0 = 0.
La table de hachage contient maintenant :
On peut maintenant valuer le run (1 1) de ltat racine. Son poids vaut 0.1 + 0 = 0.1. A
nouveau, on peut maintenant retirer le run de poids le plus faible de la liste des candidats de la
racine, qui est le run (1 1). On le retire de la liste des candidats et on le place dans la liste des
meilleurs runs, mais cette fois, on rajoute deux candidats pour cet tat : (2 1) et (1 2).
A la fin de lalgorithme, la table de hachage contient :
24
Le rsultat renvoy est le meilleur run pour la racine : il sagit du run (1 1) (sans surprises),
avec le poids 0.1. Une fois larbre reconstitu, il correspond au rythme , ce qui correspond bien
ce quon aurait voulu obtenir qualitativement.
Si on souhaite ensuite calculer le 2me meilleur run, il suffit de relancer lalgorithme avec la
mme table de hachage.
25
donne la complexit du pre partir de celle des fils et g : p1 , p2 7 g(p1 , p2 ) la fonction qui donne
la prcision du pre partir de celle des fils. On veut que w, f et g vrifient :
Si w(c01 , p01 ) > w(c1 , p1 ), alors w(f (c01 , c2 ), g(p01 , p2 )) > w(f (c1 , c2 ), g(p1 , p2 ))
Nous avons choisi comme fonction de complexit une combinaison linaire de tous les lments
voqus plus haut : les distances point--point entre lentre et la grille (notes d1 , d2 ...dn ), les
nombres doccurence des arits (nots ca1 , ca2 ...cam , les pj correpondent des pnalits qui t-
pendent de la complexit de larit considre), la profondeur de larbre (note cd) et le nombre de
notes alignes sur un mme point de la grille (not cg). On nutilise que 4 coefficients pour cette
combinaison linaire :
X X
poids = a1 ( di ) + a2 ( (pj caj )) + a3 cd + a4 cg
Ces 4 coefficients sont dtermins exprimentalement pour linstant. Chaque coefficient d-
termine linfluence de chaque paramtre dans le rsultat final, et donc si on privilgie plutt les
distances faible, les arits simples, les arbres peu profonds ou labsence de grace notes. Ces co-
efficients ont une grande influence sur les solutions obtenues, il faut donc envisager de les rendre
rglables par lutilisateur dans une certaine mesure.
26
Chapitre 4
Dveloppements, valuation et
rsultats
Nous avons prsent le travail formel et algorithmique ralis pour la quantification rythmique.
Nous allons dans cette partie prsenter le travail technique dimplmentation qui a t ralis et
intgr dans OpenMusic et discuter les performances de lalgorithme, tant en termes de complexit
algorithmique que de qualit de la quantification.
27
recollera les mesures aprs quantification, quil faut lier la dernire note de la mesure prcdente
la premire de la suivante. Un exemple est donn en Figure 4.1. On obtient ainsi des units
facilement manipulables par lalgorithme.
Figure 4.1 Lentre gauche correspond une liste dinstants valant (0 1.5) et une liste de dures
valant (1 1.5). Lentre est dcoupe en deux mesures de deux temps, avec un tempo de 60. Le 1 dans la
liste "liaisons" indique que la dernire note de la premire mesure doit tre lie la premire note de la
deuxime.
(0 0.4 0.6 1)
0 2 3 4
temps
(en secondes)
(n s n s)
(0 0.4 1)
0 2 3 4 temps (n n s)
(en secondes)
Figure 4.2 Deux mesures diffrentes et leurs mises en formes. Dans les deux cas, le tempo vaut 60, et
la signature est 5/4. n veut dire note, s veut dire silence. Les instants sont normaliss entre 0 et 1 pour
tre indpendants du tempo.
Une fois les mesures mises en forme, on les quantifie une par une laide de lalgorithme
prcdemment dcrit, et on les concatne ensuite, en liant les notes qui avaient t coupes lors du
dcoupage en mesures.
4.1.3 Post-traitement
4.1.3.1 Construction de larbre de rythme
Comme nous lavons voqu la partie 3.2.2.1, lalgorithme ne renvoie pas explicitement des
arbres. Les arbres de rythme doivent tre reconstruits rcursivement partir de la table de hachage,
en partant de la racine et en allant jusquaux feuilles.
On nomme la fonction qui permet de reconstruire le k me meilleur arbre pour un tat : build(k, etat).
Pour reconstruire le k me arbre, on appelle donc build(k, racine).
28
1
1 1
Figure 4.3 Arbre reconstruit par lalgorithme avec lexemple de la partie 3.2.4
Si il nest pas vide, cest quon subdivise encore, auquel cas on appelle rcursivement la fonction
de reconstruction pour chacun des fils afin dobtenir les sous-arbres indiqus par les runs.
Si il est vide, cest quon ne resubdivise plus. On aligne donc les entres contenues dans le
segment la borne du segment la plus proche. De nombreux sous-cas se posent alors, que nous ne
dtaillerons pas. Lide gnrale est la suivante :
Les entres alignes gauche sont prises en compte dans la subdivision courante. Si il y en
a plusieurs, on ajoute donc des grace notes la subdivision courante.
Les entres alignes droite seront prises en compte la subdivision suivante : elles seront
places en tant que grace notes dans la subdivision suivante.
Si le segment correspondant ltat courant ne contient aucune entre, cela correspond
une liaison avec la section prcdente (ou un silence si la section prcdente se terminait sur
un silence).
Pour illustrer, nous reprendrons lexemple de la partie 3.2.4. On appelle build(1, racine). Le
meilleur run est (1 1), on appelle donc build(1, (2 1)) puis build(1, (2 2)) (ici, lordre dappel est
important, puisque des entres de la subdivision (2 1) peuvent tre dplacs dans la subdivision
(2 2) si elles sont alignes droite du segment).
Le meilleur run de ltat (2 1) est vide, on ne subdivise pas plus loin. Le segment contient deux
entres : la premire et la deuxime. La premire est recale gauche du segment, la deuxime
droite. On place donc une note dans la subdivision, et on retient dune part que la deuxime entre
est recale droite pour pouvoir la prendre en compte dans le segment suivant, dautre part que
la dernire entre de la subdivision correspond une note et non un silence pour savoir si il faut
faure une liaison ou non avec la subdivision suivante dans le cas o elle ne contient aucune entre.
Le meilleur run de ltat (2 2) est vide aussi, on ne subdivise pas plus loin. Le segment contient
une seule entre : la dernire, qui nest pas prise en compte, elle ne sert qu indiquer la fin du
segment quantifier. Le segment ne contient donc aucune entre recaler. Comme le segment
prcdent avait une entre aligne droite, on place cette note dans la subdivision.
Lappel build(1, (2 1)) renvoie une note, et lappel build(1, (2 2)) galement. build(1, racine)
retourne donc larbre de la Figure 4.3, ce qui correspond avec la notation OpenMusic larbre
(1 (1 1)). On ajoute ensuite la signature pour obtenir le rsultat voulu.
29
moins un zro dans sa liste Subdivisions, alors il sera considr comme une note accompagne de
grace notes. La dure de cette note est donne par D, et le nombre de grace notes est donn par
le nombre de 0 dans Subdivisions. Par exemple,larbre (1(0 1 0 0)) est considr comme une note
de dure 1, laquelle sont attaches une grace note avant la note et deux aprs.
Dans OpenMusic, la reprsentation graphique des grace notes nest pas encore gre. Une note
laquelle une grace note est attache va tre considre comme un accord de deux notes, o la
deuxime note aura un lger dcalage temporel (offset), positif ou ngatif en fonction de la position
de la grace note par rapport la note principale. Un exemple de reprsentation dans OpenMusic
dune note avec des grace notes est donn Figure 4.4.
Figure 4.4 Reprsentation des grace notes dans OpenMusic. A gauche, un exemple darbre de rythme
permettant de reprsenter les grace notes est prsent. A droite, laccord correspondant larbre de gauche.
On voit que la note tombant sur le temps est la deuxime, il y a une grace note avant et deux aprs.
30
amax : Arit maximale que lon peut trouver dans le schma de subdivision
dmax : Profondeur maximale du schma de subdivision (correspond la longueur cumule des AndLists)
cmax : Nombre maximum de choix darit quon a pour une subdivision
k : Nombre de solutions que lon demande lalgorithme de renvoyer
t : Dure totale du flux dentres quantifier
n : Nombre dinstants contenus dans une mesure quantifier
Dans cette section, nous allons valuer la complexit en temps des diffrentes tapes de lalgorithme
k-best. La complexit sera donne dans le pire des cas, non sans discuter des cas les plus courants,
et nous dtaillerons quelques exemples.
31
peut faire chuter grandement le nombre dtats dans lautomate. Par exemple, si on considre le
schma prcdent, et une entre ne contenant quun seul instant quantifier situ au dbut du
segment, alors le deuxime et le troisime tiers ( fortiori la deuxime moiti) du segment sont
vides. Tous les chemins commenant par (2 2), (3 2) ou (3 3) ne seront donc pas crs, ce qui fait
chuter le nombre dtats (1 + 1) ((4 5) + (5 4)) = 80.
Ensuite, chaque tat, linitialisation des listes de candidats se fait en temps linaire par
rapport cmax , puisquon place dans chaque liste un candidat pour chaque arit possible (une liste
ne contenant que des 1 de longueur gale larit) plus le candidat correspondant au cas o on ne
subdivise plus.
La complexit de cette tape est donc en O(cmax (amax cmax )dmax )
32
a quun seul candidat possible, donc aucun poids valuer, et qu la racine, il y a au plus amax
poids valuer, il y a donc au plus admaxmax
poids valuer.
Le calcul du poids dun arbre partir du poids de ses fils se fait en temps proportionnel au
nombre de fils, donc en temps proportionnel amax . Une fois les poids calculs, il faut classer
le poids du candidat qui vient dtre calcul dans la liste des candidats. La liste des candidats
contient dans le pire des cas de lordre de kamax candidats, puisque chaque tape, on rajoute
amax candidats. Comme on utilise une structure de tas pour la liste des candidats, le classement
du poids du candidat se fait en O(log(kamax ))
Pour valuer les k 1 arbres suivants, il faut donc effectuer k 1 fois les oprations dcrites
prcdemment dans cette partie. La complexit de lobtention des k 1 arbres suivants est donc
dans le pire des cas en O(k(admax
max
amax log(kamax ))).
En ralit, cette complexit sera plus faible. Au del du fait que toutes les arits ne sont pas
gales amax , on najoute pas non plus amax candidats la liste des candidats chaque tape. En
effet, si par exemple, pour un arbre binaire, le run (2 1) vient dtre ajout la liste des meilleurs
arbres, on ajoute les runs (3 1) et (2 2) la liste des candidats. Si le meilleur arbre suivant est
(1 2), cette fois, on najoutera la liste des candidats que (1 3), puisque (2 2) a dj t ajout
la liste des candidats et quon limine les doublons.
De plus, tous les poids nauront pas besoin dtre valus. En effet, certaines valeurs de poids ne
peuvent pas tre values (par exemple, le 2me meilleur arbre pour une feuille nexiste pas, la seule
possibilit tant de ne pas resubdiviser et daligner les entres la borne la plus proche). Ces runs
impossibles valuer sont stocks avec une valeur spciale de poids (+). Lorsque lon souhaite
valuer le poids dun run, et que pour lun des fils, la meilleure possibilit est un run avec un poids
+, on sait quon ne pourra pas valuer le poids du run pre, on lui attribue donc directement le
poids +. Cela permet dune part de ne pas valuer les poids des autres fils, et de ne pas passer
par ltape de calcul du poids du pre partir de celui des fils.
Selon le schma de subdivision et le nombre de solutions demandes, cest donc plutt la construc-
tion du premier arbre ou lobtention des k 1 suivants qui prdominera. On constate aussi que le
temps de calcul nest pas proportionnel au nombre de solutions que lon souhaite obtenir : il y a un
cot initial assez fort, mais lobtention de solutions supplmentaires est relativement peu couteuse.
4.3.5 Exemples
Nous avons ralis quelques test de rapidit dexcution de lalgorithme que nous avons im-
plment. Les tests ont t raliss sur un ordinateur iMac sous le systme dexploitation OS X
33
N n Schma E k t (en s)
1 5 A 31 10 0.325
20 0.538
B 139 10 0.609
20 0.829
10 A 41 10 0.392
20 0.615
B 159 10 0.684
20 0.995
5 A 41 10 1.939
20 3.043
B 159 10 3.407
20 4.959
10.10, quip dun processeur Intel Core i5 3,8 GHz et dune mmoire vive de 4 Go. Pour mesurer
le temps dexcution, nous avons utilis la fonction Lisp get-internal-real-time, appele au
dbut et la fin de lexcution de lalgorithme de quantification. Les tests ont t raliss avec
diffrents paramtres, les rsultats sont rassembls dans le tableau Figure 4.6. Dans ce tableau, les
colonnes sont :
N : Nombre de mesures quantifier
n : Nombre de notes quantifier dans chaque mesure
Schma : Le schma de subdivision utilis. Le schma A est un schma simple correspondant
une mesure 4 temps binaire : (4 2 2 2). Le schma B est un schma plus complexe, per-
mettant diffrentes subdivisions : (((2|3) (2|3) 2) | (5 (2|3) 2) | ((7|11|13))). Il est quivalent
laisser le choix entre les schmas ((2|3) (2|3) 2), (5 (2|3) 2), et subdiviser une seule fois en
7, en 11 ou en 13.
E : Nombre dtats dans lautomate (dpend uniquement du schma de subdivision et des
instants quantifier)
k : Nombre de solutions demandes
t : Temps de calcul des solutions (en s).
Ces quelques rsultats nous permettent de vrifier un certain nombre de comportements de
lalgorithme expliqus la partie prcdente :
La taille de lautomate est importante pour la vitesse dexcution de lalgorithme. Le temps
dexcution de lalgorithme pour le schma A est presque deux fois plus court que pour
le schma B. En outre, lorsque lon rajoute des notes, on rajoute des tats, et on voit, en
comparant les rsultats pour 5 notes et pour 10 notes, que cela a une petite influence sur
le temps dexcution. Il faudra donc veiller utiliser le schma le plus petit possible, et ne
pas inclure de subdivisions dont on sait lavance quont ne veut pas les obtenir.
Une fois lautomate cr, retourner dautres solutions est effectivement moins coteux : le
temps mis pour obtenir 20 solutions nest pas gal au double du temps mis pour obtenir 10
34
solutions. On constate galement que le temps mis pour obtenir les 10 solutions supplmen-
taires dpend peu de lautomate. On peut en dduire que le fait davoir un gros automate
est pnalisant surtout la construction de lautomate et linitialisation, et assez peu lors
de lobtention de solutions supplmentaires.
Quantifier 5 mesures prend autant de temps que de quantifier 5 fois une seule mesure. En
effet, chaque nouvelle mesure, on reconstruit un nouvel automate, et on repart donc de
zro.
Cet implmentation est plutt longue excuter (5 secondes pour obtenir 5 mesures de
partition). Il faudrait trouver des moyens dacclrer les traitements. Des solutions seront
proposes au chapitre 5.2.
4.4 Rsultats
4.4.1 Exemples de rsultats
Un exemple de patch est donn en Figure 4.7. Des exemples de rsultats sont donns aux Figures
4.8 4.11. A chaque fois, on donne lentre (donne sur la premire ligne), et les 10 meilleures
transcriptions selon lalgorithme. Sauf indication contraire, lentre est quantifie en prenant des
mesures quatre temps, et un tempo de 60 la noire. Sur lentre, les positions thoriques des
temps sont marques en pointills.
Figure 4.7 Un exemple de patch pour quantifier une srie de notes. Ici, la boucle omloop ne sert qu
placer les diffrentes propositions dans un objet poly.
35
Figure 4.8 Ici on ne quantifie quun temps. Le schma utilis est (((2|3) (2|3) 2) | (5 (2|3) 2) | ((7|11|13))).
Les traits bleus indiquent les dures des notes.
Figure 4.9 Une mme entre quantifie avec deux schmas diffrents : gauche,
(((2|3) (2|3) 2) | (5 (2|3) 2) | ((7|11|13))), droite, (((2|3) (2|3) 2) | (4 (2|3) 2) | ((5|7|11|13))).
si lon ne souhaite avoir que des rythmes binaires, utiliser un schma adapt garantit lob-
36
Figure 4.10 Le schma utilis est (4 (2|3) (2|3)). Ici, une quantification qui semblerait logique serait
de prendre la 3me proposition pour la premire mesure et la 4me pour la deuxime mesure.
tention de rsultats correspondant aux attentes, comme par exemple dans la Figure 4.10.
Au contraire, si lon na aucun priori sur la forme des rsultats que lon souhaite obtenir,
il peut tre intressant de prendre un schma offrant de nombreuses possibilits, mais on
risque dobtenir des rythmes complexes (en particulier dans le cas de subdivisions par 5
ou 7), comme on peut le voir dans la partie gauche de la Figure 4.9. On peut galement
rgler linfluence du paramtre de complexit relatif larit des subdivisions pour limiter
les occurences de telles subdivisions.
Grace notes : On remarque que les grace notes sont plutt frquentes dans les exemples
considrs, en particulier dans les exemples de la Figure 4.9. L encore, un meilleur rglage du
paramtre de complexit relatif aux grace notes permettra dempcher quelles ne soient trop
frquentes. Notons cependant quon ne pourra jamais les empcher compltement, mme en
rendant ce paramtre compltement discriminant. En effet, cest lors de la construction de
larbre, cest--dire la toute fin de lalgorithme, que lon sait effectivement si il y a des grace
notes ou non. Avant cela, on ne peut pas en tre sr : si plusieurs entres correspondant
des notes sont alignes la mme extrmit dune subdivision, on est sr quil y aura
des grace notes, mais si une entre correspondant une note est aligne droite, elle peut
donner lieu une grace note si le segment suivant a une entre correspondant une note
aligne gauche, ou non, dans le cas contraire.
37
Figure 4.11 On quantifie quatre noires avec peu dimprcision. Le schma utilis est (4(2|3)(2|3)).
Seules les rythmes 5, 9 et 10 correspondent des dures diffrentes du premier.
Liaisons : On remarque que souvent, parmi les solutions proposes, certaines sont quivalentes,
cest dire quune fois joues, elles donnent exactement les mmes dures. Par exemple, dans
la Figure 4.11, la deuxime proposition est la mme que la premire, sauf que la premire
noire a t remplace par deux croches lies, ce qui vaut la mme dure. Lautomate a
t construit pour viter certaines de ces subdivisions inutiles, en ne subdivisant pas des
segments vides. Ici, les segments ne sont pas vides, ils contiennent chacun un instant
quantifier. Lalgorithme va donc proposer malgr tout ces solutions redondantes, car en re-
subdivisant, il est possible que linstant contenu dans le segment ne soit alors plus align
au mme endroit. Ce nest en fait qu la reconstruction de larbre que lon constate que
les solutions sont quivalentes. On peut adopter deux attitudes face ces solutions redon-
dantes. Soit elles peuvent tre vues comme des doublons, auquel cas, on va chercher sen
dbarasser, soit elle peutvent tre vues comme dautres faons valides de noter le rythme
dentre, auquel cas on les conserve, et on laisse le choix lutilisateur dadopter lune ou
lautre. Nous avons pris le deuxime parti dans cette implmentation.
Un exemple o notre algorithme montre ses limites est le suivant : on cherche quantifier avec
un tempo de 60 la noire une note trs courte, dune dure de 100 ms, commenant au dbut du
temps, suivie dun silence. Les rsultats renvoys par notre algorithme sont donne en Figure 4.12.
On voit que la meilleure transcription ne tient pas compte du silence. Cela vient du fait que comme
linstant de dbut de la note et linstant de dbut du silence sont tous les deux proches de la borne
38
gauche du segment, lalgorithme estime quil est moins couteux daligner les deux instants gauche
du segment sans subdiviser du tout. Ce choix est justifiable : si les deux instants correspondaient
deux dbuts de notes, la reconstruction de larbre, on obtiendrait une note laquelle est attache
une grace note, ce qui serait une notation tout fait satisfaisante pour ce genre de rythme.
Le problme vient en fait de la reconstruction de larbre de rythme. La notation qui corres-
pondrait cet alignement serait une grace note attache un silence. Or cette notation nexiste
ni dans la thorie musicale, ni dans le formalisme utilis dans OpenMusic. Ne pouvant pas noter
une grace note accroche un silence, nous reconstruisons larbre en estimant que la note prend
toute la dure de la subdivision, plutt que de considrer que cest le silence qui lemporte. Cela
revient en fait aligner le dbut du silence droite de la subdivision, et non gauche, comme
cela a t fait pour le calcul de la distance (alignement au plus proche). Il y a donc une diffrence
entre le rsultat renvoy par lalgorithme et larbre reconstruit, ce qui est un vritable problme.
Une solution cet aspect sera propose la partie 5.2.2.2.
Figure 4.12 On quantifie une note courte suivie dun silence. Le schma de subdivision utilis est
(((2|3) (2|3) 2) | (5 (2|3) 2) | ((7|11|13))). Le meilleur rsultat ne tient pas compte du silence.
39
un court silence entre les deux notes. omquantify va donc chercher la fois quantifier le court
silence et la note suivante, chose quil ne peut pas faire avec les contraintes imposes (on dcoupe
le temps au maximum en 8 parties gales). La fonction va donc liminer une des deux dures, et
cest la note qui est limine plutt que le silence. Dans le deuxime exemple, on obtient nouveau
beacoup de septolets, difficilement lisibles. Notre algorithme, quant lui, renvoie une solution
contenant beaucoup de grace notes, ce qui nest pas non plus idal puisque trs peu prcis. Dans le
troisime exemple, si certains temps sont quantifis de faon vraisemblable, on aurait par exemple
prfr que le premier temps soit reprsent par deux croches que par un septolet. Encore une fois,
notre algorithme va prfrer avoir recours aux grace notes. Dans le quatrime exemple, le dcalage
de 60 ms (trs faible, donc) de la troisime note est retranscrit dans la notation en un dcalage
dune triple croche. Ces notations sont difficiles lire, alors que les diffrences avec des notations
plus simples, par exemple certaines notations renvoyes par notre algorithme, sont minimes.
On ajuste prsent les diffrents paramtres de omquantify pour obtenir des notations plus
vraisemblables, et plus en accord avec les schmas de subdivisions utiliss (toutes les subdivisions
ne sont pas autorises par nos schmas). Les rsultats sont affichs Figure 4.14. Ainsi, en interdisant
les septolets, on obtient de meilleurs rsultats dans tous les exemples. Sur le premier exemple, cela
permet dobtenir la bonne figure rythmique, mais cause du silence rajout par true-durations,
on a un demi soupir la place de la dernire croche. Pour le deuxime exemple, on interdit
les septolets et on rgle le paramtre de prcision 0.1 pour obtenir un rythme assez simple.
Pour le troisime exemple, interdire les septolets et rgler la prcision 0.2 donne de trs bons
rsultats : part le sextolet, le rythme obtenu correspond ce quun annotateur humain aurait pu
transcrire. Pour le quatrime exemple, l encore, la fonction true-durations rajoute un silence,
ce qui complique la notation.
Globalement, les rsultats domquantify, si on prend le temps dajuster les paramtres, sont un
peu meilleurs que la meilleure transcription obtenue par notre algorithme, mais notre algorithme a
lavantage de proposer diffrentes solutions, parmi lesquelles se trouve le plus souvent une solution
convenable.
Un exemple intressant o notre algorithme obtient de meilleurs rsultats quomquantify est
celui de la Figure 4.15. Ici, la suite de dures que lon souhaite quantifier est la suivante (en
ms) : 333, 111, 111, 161, 284. Les pointills sont placs toutes les 333 ms. Ce rythme correspond
donc au premier rythme de la Figure 4.15 b), o la dernire note a t lgrement retarde. La
solution renvoye par omquantify utilise un septolet, car elle minimise lerreur sur le temps entier.
A linverse, notre algorithme va fonctionner subdivision par subdivision : dans le deuxime tiers
du temps, cela vaut la peine de subdiviser nouveau, mais dans le troisime tiers, ce nest pas la
peine, le fait de subdiviser encore ferait trop monter la complexit par rapport au gain de prcision
que cela reprsente. On ne subdivise donc pas plus loin et on obtient une notation facile lire, sans
dnaturer le rythme dentre.
40
1)
omquantify
1-best
2)
omquantify
1-best
3)
omquantify
1-best
4)
omquantify
1-best
Figure 4.13 Rsultats renvoys par la fonction omquantify, compars aux meilleurs rsultats renvoys
par notre algorithme. Les donnes ont t auparavant mises en forme laide de la fonction true-durations.
41
1)
omquantify
1-best
2)
omquantify
1-best
3)
omquantify
1-best
4)
omquantify
1-best
Figure 4.14 Rsultats renvoys par la fonction omquantify en ajustant les paramtres, compars aux
meilleurs rsultats renvoys par notre algorithme.
42
a)
b)
c)
Figure 4.15 a) Entre quantifier. b) Rsultats renvoys par notre algorithme. c) Rsultat renvoy
par la fonction omquantify
43
Chapitre 5
Bilan et perspectives
5.1 Bilan
Notre stage au sein de lquipe Reprsentations Musicales lIrcam tait consacr la quan-
tification rythmique dans le contexte particulier de lenvironnement de composition assiste par
ordinateur OpenMusic.
Dans ce rapport, aprs une rapide explication sur le rythme, nous avons dlimit le problme de
la quantification rythmique, dcrit quelques formalismes de reprsentation arborescente du rythme,
et prsent des solutions existant pour ce problme dans le chapitre 1.
Nous avons interrog des utilisateurs dOpenMusic pour connatre leurs usages des outils de
quantification, ainsi que les ventuelles amliorations quils souhaiteraient y voir, et nous avons
rassembl les conclusions de ces entretiens dans le chapitre 2. Nous avons pu dgager plusieurs
grands axes damlioration prconiss par les utilisateurs rencontrs. Les compositeurs voquent
un besoin de contrle fin du processus de transcription de loeuvre composes, puisque ce processus
fait partie intgrante de la cration de loeuvre. Ils voquent en particulier des interfaces permettant
de spcifier au logiciel de quantification des paramtres signifiants dun point de vue musical. Nous
avons galement pu remarquer la difficult de la gestion des silences, pourtant essentiels la
musique, ainsi que des grace notes.
Suite ces entretiens, nous avons dvelopp un algorithme, appel algorithme k-best, permet-
tant de rpondre en partie aux besoins des utilisateurs. Cet algorithme a t dcrit au chapitre 3.
Il se base sur le formalisme dautomates darbres pondrs et permet dnumrer, de faon com-
putationnellement efficace, les k arbres de rythme de plus faible poids selon une certaine mesure,
prenant en compte la prcision et la complexit de la notation laquelle ils correspondent (le choix
de ces mesures a galement t discut).
Dans le chapitre 4, nous avons prsent les diffrents choix qui ont t faits lors de limplmen-
tation de lalgorithme k-best, nous avons galement dtermin la complexit en temps de notre
algorithme et ralis des essais pour valuer son temps dexcution. Cet algorithme est plus long
excuter que lalgorithme actuel dOpenMusic, mais offre des perspectives dusage intressantes.
Nous avons prsent des rsultats donns par cet algorithme et les avons compars ceux de loutil
actuel. Les rsultats sont comparables, mais la meilleure gestion des silences et des grace note
par notre algorithme fait quon peut souvent obtenir de meilleurs rsultats parmi ses premires
propositions quen ajustant les paramtres de lalgorithme actuel.
Nous allons dans la fin de ce rapport proposer diffrentes pistes damliorations, la fois pour
rendre notre systme plus performant dans ses rsultats et pour aborder des problmatiques vo-
ques par les utilisateurs dOpenMusic qui nont pas t tudies dans ce stage.
44
5.2 Perspectives
Nous lavons vu, les rsultats sont meilleurs quavec les outils existants dans certains cas, en par-
ticulier lorsque lon souhaite quantifier plus ou moins finement diffrents endroits dun segment,
mais la rapidit dexcution est bien meilleure pour les outils existants. Dans cette partie, nous
discuterons des diffrentes amliorations que lon pourrait envisager pour amliorer les rsultats
de la quantification.
45
5.2.1.3 Choix de la fonction de poids
La fonction de poids utilise, cest dire la manire dont sont combines les mesures de distance
et de complexit pour dterminer le poids dune solution, est elle aussi trs simple, on pourrait
essayer de considrer des fonctions plus volues. Pour cela, il faudrait tudier de prs quelles fonc-
tions permettent vrifier la proprit de monotonie, et cest un problme qui nest pas vident. Si
lon garde lide dune simple combinaison linaire, alors il faudrait faire des tests plus consquents,
sur de plus grands corpus, pour dterminer quels coefficients permettent dobtenir les meilleurs r-
sultats. En particulier, il serait intressant de raliser des tests sur le corpus Kostka-Payne [23],
qui contient la fois des donnes quantifies et des performances de pices extraites de [14], pour
obtenir, via des techniques dapprentissage automatique, les coefficients qui minimisent les erreurs
sur ce corpus. Rendre ces coefficients paramtrables par lutilisateur, par exemple en ajoutant
un paramtre permettant de rgler linfluence relative des mesures de distance et de complexit
permettrait un contrle plus fin du compositeur sur les rsultats obtenus.
46
gauche, un tat qui aligne x1 et x2 gauche, et x3 droite, un tat qui aligne x1 gauche, et x2
et x3 droite, et un tat qui aligne toutes les entres droite. A chaque tat, on calcule ensuite
la distance |xi yi |. La somme des distance point point sera videmment la plus petite lorsque
chaque point est align la borne la plus proche, mais en adaptant les valeurs de complexit, on
pourrait obtenir dautres rsultats intressants.
Il faut noter que choisir cette nouvelle forme dautomate augmentera grandement le nombre
dtats dans lautomate. On autorise plus de solutions, on augmente donc les chances de trouver
la bonne, mais il est aussi plus coteux de les explorer. Daprs ltude de la partie 4.3, la taille de
lautomate est critique pour le temps dexcution de lalgorithme, une telle solution ne sera donc
pas forcment recommandable, surtout pour la quantification dentres longues. En particulier, le
nombre dtats ne dpendra plus uniquement du schma de subdivision, mais augmentera aussi
avec le nombre dentres aligner, ce qui ntait pas vraiment le cas jusqu prsent.
5.2.3 Interfaces
La question des interfaces dutilisation des logiciels, qui tait un verrou souvent voqu lors
des entretiens avec les utilisateurs dOpenMusic, na pas pu tre aborde en profondeur au cours
de ce stage. Nanmoins, nous pouvons proposer des ides pour concevoir un outil plus facilement
manipulable par les utilisateurs.
47
5.2.3.2 Editeur de schmas de subdivision
Le format des schmas de subdivision est relativement compliqu. Il est difficile la fois crire
et relire, et est trs sujet erreur. De plus, il ny a actuellement pas de moyen de vrifier que le
schma donne bien lautomate que lon souhaite, moins dafficher toutes les entres de la table de
hachage. Dvelopper une interface facilitant lcriture et la lecture des schmas serait dune grande
aide pour les utilisateurs. On pourrait par exemple reprsenter le schma par un graphe orient, o
des flches indiquent pour chaque subdivision quelles sont les prochaines subdivisions possibles (en
prenant garde de ne pas crer de cycles, auquel cas lautomate serait de taille infinie). Un exemple
est fourni en Figure 5.1. On pourrait aussi proposer un certain nombre de schmas de subdivision
classiques, que lutilisateur combinerait ensuite selon ce quil souhaite obtenir.
2 2 3
3
3
2
Figure 5.1 Reprsentation du schma de subdivision ((2|3) ((2 3) | ((3|5) 2))) par un graphe orient.
48
les liaisons et les grace notes, deux paramtres qui, nous lavons vu, sont difficilement valuables
pendant le droulement de lalgorithme mais qui le sont facilement une fois larbre reconstruit.
Une dernire possibilit serait dutiliser ces choix pour apprendre un schma de subdivision.
Il sagit ici dun problme difficile, mais qui serait trs bnfique, car comme noue lavons vu, le
format du schma de subdivision est difficile manipuler. De plus, le schma est utilis dans la
construction des automates, donc modifier le schma implique de reconstruire tous les automates,
et il est plus difficile den valuer plusieurs.
49
Bibliographie
[1] Carlos Agon, Grard Assayag, Joshua Fineberg, and Camilo Rueda. Kant : A critique of pure
quantification. In Proceedings of the International Computer Music Conference, pages 529,
1994.
[2] Carlos Agon, Karim Haddad, and Grard Assayag. Representation and rendering of rhythm
structures. In Web Delivering of Music, 2002. WEDELMUSIC 2002. Proceedings. Second
International Conference on, pages 109113. IEEE, 2002.
[3] Grard Assayag, Camilo Rueda, Mikael Laurson, Carlos Agon, and Olivier Delerue. Computer-
assisted composition at IRCAM : From PatchWork to OpenMusic. Computer Music Journal,
23(3) :5972, 1999.
[4] Marc Bezem, Jan Willem Klop, and Roel de Vrijer. Term rewriting systems. Cambridge
University Press, 2003.
[5] Jean Bresson and Carlos Prez-Sancho. New Framework for Score Segmentation and Analysis
in OpenMusic. In Sound and Music Computing, pages 11, Copenhagen, Denmark, 2012. cote
interne IRCAM : Bresson12c.
[6] Ali Taylan Cemgil, Peter Desain, and Bert Kappen. Rhythm quantization for transcription.
Computer Music Journal, 24(2) :6076, 2000.
[11] John E Hopcroft and Jeffrey D Ullman. Formal languages and their relation to automata.
1969.
[12] Liang Huang and David Chiang. Better k-best parsing. In Proceedings of the Ninth Internatio-
nal Workshop on Parsing Technology, pages 5364. Association for Computational Linguistics,
2005.
[13] Florent Jacquemard, Pierre Donat-Bouillud, and Jean Bresson. A structural theory of rhythm
notation based on tree representations and term rewriting. In Mathematics and Computation
in Music, volume 9110, page 12. Springer, 2015.
50
[14] Stefan Kostka and D Payne. Workbook for tonal harmony. New York, 1995.
[15] Mikael Laurson. PATCHWORK : A visual programming language and some musical applica-
tions, volume 6. Sibelius Academy Helsinki, 1996.
[16] Christopher S Lee. The rhythmic interpretation of simple musical sequences : towards a
perceptual model. Musical structure and cognition, 3 :5369, 1985.
[17] Adrien Maire. Quantification musicale avec apprentissage sur des exemples. 2013.
[18] Benoit Meudic. Dtermination automatique de la pulsation, de la mtrique et des motifs
musicaux dans des interprtations tempo variable doeuvres polyphoniques. PhD thesis,
Paris 6, 2004.
[19] Declan Murphy. Quantization revisited : a mathematical and computational model. Journal
of Mathematics and Music, 5(1) :2134, 2011.
[20] Geoffroy Peeters. Template-based estimation of time-varying tempo. EURASIP Journal on
Applied Signal Processing, 2007(1) :158158, 2007.
[21] Ali Mustafa Qamar. Generalized Cosine and Similarity Metrics : A Supervised Learning
Approach based on Nearest Neighbors. Theses, Universit de Grenoble, 2010.
[22] David Riso-Valero. Symbolic Music Comparison with Tree Data Structure. PhD thesis, Ph.
D. Thesis, Universitat dAlacant, Departamento de Lenguajes y Sistemas Informaticos, 2010.
[23] David Temperley. An evaluation system for metrical models. Computer Music Journal,
28(3) :2844, 2004.
[24] David Zicarelli and M Puckett. Max/msp. Cycling, 74 :19902001, 2002.
51