Conservatoire National des Arts et Métiers

 

INSTITUT D’INFORMATIQUE D’ENTREPRISE

FICHE SIGNALETIQUE

 

 

 

 

MEMOIRE d’Ingénieur I.I.E.

 

 

 

 

 

 

 

Organisation rythmique

dans un environnement d’aide

à la composition

 

 

 

 

 

 

 

 

Auteur : Benoit Meudic

 

Directeur de recherche : M Gérard Assayag, responsable de l’équipe

Représentations Musicales, département recherche et développement à l’Ircam - Centre Georges-Pompidou

 

Descriptif :

A partir d’un modèle existant, la librairie conçue permet d’opérer une quantification rythmique sur un flux musical dans un environnement d’aide à la composition.

 

 

 

 

 

Résumé

 

La reconnaissance par un ordinateur de la structure rythmique d’un flux musical quelconque est un problème délicat. En effet le rythme se définit non seulement par des durées, mais aussi par tous les autres paramètres (intensités, hauteurs, temps d’occurrence des événements sonores...) pouvant contribuer à la perception de régularités. Ce niveau de complexité rend donc difficile toute analyse globale. De plus, la donnée de ces paramètres tels-quels (sous la forme de suite de nombres) ne permet pas au musicien de s’imaginer le rythme résultant. Pour obtenir une structure rythmique lisible et compréhensible, il faut réduire intelligemment la quantité d’information fournie par les composants du rythme initial de façon à ne garder que les informations qui sont essentielles au yeux du musicien. Il est important de pouvoir quantifier le rythme lorsque l’on désire entrer des partitions musicales directement au clavier (applications en gravure professionnelle) ou lorsque l’on veut transcrire en notation des séquences rythmiques calculées (application en composition assistée par ordinateur).

C’est le principe de la quantification rythmique. (il sera détaillé dans le chapitre II).

Open-Music, un nouvel environnement visuel de programmation musicale écrit en Clos (Common Lisp Object System), destiné aux compositeurs, a récemment été créé à l’issue de la thèse de Carlos Agon [Agon 98].

On m’a alors proposé de développer dans cet environnement une nouvelle librairie de quantification à partir du modèle de Kant ([Agon 94]), librairie de quantification intégrée à PatchWork (prédécesseur d’Open-Music), basée sur le principe de la quantification par segmentations.

On m’a par ailleurs demandé de chercher puis d’intégrer de nouvelles fonctionalités à cette nouvelle librairie.

Le stage s’est alors articulé autour de deux axes :

Le chapitre III présentera le concept original de la quantification par segmentations, destiné à pallier les lacunes des quantificateurs industriels, puis décrira le nouveau module graphique de quantification rythmique que j’ai développé dans Open-Music. Ce module s’inspire très largement de " Kant  ". Il apporte un maniement plus souple des segmentations, et permet de les personnaliser par l’intégration de méthodes externes au quantificateur définies par l’utilisateur.

 

Enfin, les chapitre IV et V présenteront deux méthodes d’interprétation du coefficient d’auto-corrélation que j’ai développé dans le cadre de la quantification de structures rythmiques répétitives. ([Brown 1993] [Desain Siebe] ) Ces méthodes sont destinées à être intégrées dans le module de quantification détaillé au chapitre III.

 

 

 

 

 

Remerciements

 

 

 

Je tiens à remercier tous les membres de l’équipe Représentations Musicales, Gérard Assayag, Carlos Agon, Peter Hanappe, Dorothea Baeumer et Olivier Delerue, qui par leurs expériences, m’ont permit de découvrir la richesse de l’informatique musicale.

Leur confiance, leur disponibilité et leur gentillesse m’auront aussi très certainement aidé à

acquérir l’autonomie que nécessite toute démarche de recherche.

 

 

 

 

 

 

 

SOMMAIRE

I Le cadre de la recherche

II La quantification rythmique

A Un exemple

B " Quantify ", un module de quantification

III La quantification par segmentations.

A Le principe de la quantification par segmentation

B Une nouvelle interface graphique pour la quantification

1. L’environnement graphique

2. Les manipulations graphiques dans l’éditeur chord-seq-seg

3. Des méthodes de segmentation (définition, utilisations)

IV Une méthode de segmentation par le coefficient d’auto-corrélation

A Le coefficient d’auto-corrélation

B Une première interprétation du coefficient

1) La détermination des barres de mesure et de la pulsation

2) L’analyse d’une structure régulière

3) L’analyse d’une structure régulière déformée

V Conclusions : Vers une mesure de l’expressivité

GLOSSAIRE MUSICAL.

REFERENCES.

Annexes

1) la classe de l’éditeur graphique et une de ses méthodes

2) la fonction d’auto-corrélation décrite en V

 

 

I Le cadre de la recherche

 

L’IRCAM est un institut de recherche dont les activités s’articulent entre la recherche scientifique, le développement technologique et la création musicale contemporaine.

Le département Recherche et Développement a pour but l’élaboration de connaissances et de technologies en rapport avec les problématiques de la musique et du son. Il regroupe une soixantaine de collaborateurs, chercheurs, ingénieurs, étudiants dont les activités se répartissent entre plusieurs équipes thématiques : acoustique et psycho-acoustique, analyse-synthèse, temps-réel, représentations musicales.

 

L’équipe " représentations musicales "

 

L’équipe Représentations musicales, dirigée par Gérard assayag, développe des environnements de composition assistée par ordinateur (CAO), à partir d’une formalisation des structures musicales.

Les logiciels PatchWork et OpenMusic issus de ces travaux constituent deux générations successives d'environnements compositionnels permettant le calcul de structures musicales à partir de langages de programmation graphique. Ils sont abondamment utilisés pour la composition d'oeuvres contemporaines, notamment pour l'élaboration de parties instrumentales (aide à l'écriture), mais aussi pour la recherche musicologique.

 

LE SUJET ET ses limites

 

Le problème, classique en recherche musicale, de la quantification rythmique peut se définir

ainsi : conversion d'un flux de durées exprimées par des valeurs réelles en une structure métrique et rythmique exprimable dans la notation musicale standard.

L'intérêt de la question provient du fait que beaucoup de compositeurs utilisent des formalismes numériques pour engendrer des configurations complexes de durées; le problème se pose aussi de façon évidente dans le cas de la transcription automatique du jeu instrumental.

Un début de réponse au problème a été donnée par le quantificateur " Kant " de PatchWork.

Le sujet consiste à intégrer ce quantificateur dans le nouvel environnement Open-Music, et à l’enrichir de nouvelles fonctionalités, particulièrement dans le cas de structures rythmiques régulières.

On ne traitera pas des problèmes de quantification en temps réel, qui ajoutent une complexité trop grande. De plus, les étapes de quantification feront souvent appel aux choix de l’utilisateur, la quantification ne sera donc pas entièrement automatique.

Le chapitre suivant va présenter plus en détail le concept de quantification rythmique.

 

II La quantification rythmique

A Un exemple

 

Lorsqu’une structure nous semble complexe, c’est qu’elle contient à nos yeux un trop grand nombre d’informations pour qu’on puisse la décrire, et donc la mémoriser.

Souvent, on est tenté d’établir un rapprochement avec une structure connue moins complexe. Par exemple, on dira d’un signal qu’il est quasi-périodique de façon à pouvoir le décrire par les seules données de son amplitude et de sa périodicité. Le signal sera donc " approximé " à un signal moins complexe mais descriptible. Il sera quantifié.

Prenons l’exemple d’une suite de durées issues de la discrétisation d’un signal sonore :

1.177, 0.592, 0.288, 0.337, 0.436, 0.337 0.387 0.600 0.634 0.296 0.280 0.296 0.346 1.1193

(les durées ont une précision à la milliseconde)

Cette représentation est précise, mais trop complexe, donc peu informative.

Par un processus de quantification, nous allons abaisser le degré de précision de la notation de manière à dégager une structure.

Avant de réduire la précision, nous voulons mettre en valeur une première structure en divisant la séquence en plusieurs parties.

Par exemple, réalisons les groupements suivants :

(1.177)

(0.592, 0.288, 0.337)

(0.436, 0.337 0.387)

(0.600 0.634)

(0.296 0.280 0.296 0.346)

(1.1193)

Nous allons maintenant réaliser des approximations successives des durées à l’intérieur de chaque groupement.

Tout d’abord, choisissons une nouvelle unité de temps plus grande, par exemple 1.000 s.

Exprimons les durées en proportion de cette nouvelle unité.

Une première approximation pourrait modifier les valeurs en : (valeurs exprimées en nombre d’unités de temps)

(1)

(1/2, 1/4, 1/4 + 1/16)

(1/4 + 1/8, 1/4 + 1/16, 1/4 + 1/16)

(1/2 1/4 + 1/16)

(1/4 1/4 1/4 1/4 + 1/16)

(1)

La représentation correspondante n’est pas très satisfaisante (voir la représentation en bas de la figure 1), car l’approximation n’est pas encore assez élevée.

 

 

 

 

 

 

Une deuxième approximation pourrait alors modifier les valeurs en :

(1)

(1/2, 1/4, 1/4)

(1/3, 1/3, 1/3)

(1/2, 1/2)

(1/4, 1/4, 1/4, 1/4)

(1)

La nouvelle représentation obtenue serait beaucoup plus satisfaisante, car elle serait plus simple donc plus riche en informations que la représentation précédente (voir haut de la figure 1).

Au total, les moyens dont nous disposons pour réduire l’information sont :

Les exigences de la quantification nous apparaissent alors clairement :

Imaginons que l’utilisateur n’aie aucun contrôle sur les résultats. Les approximations réalisées seront alors celles rentrées par défaut dans le quantificateur. Le résultat sera parfois bon, souvent mauvais. (par exemple, le rythme du haut de la figure 1 ne peut être le résultat d’approximations " aveugles ")

Il faut donc permettre à l’utilisateur d’orienter la quantification par l’intermédiaire de paramètres de contrôle. La difficulté est d’offrir des contrôles à la fois simples et puissants de manière à rendre presque transparent l’outil informatique aux yeux du compositeur, pour que le rapport aux matériaux analysés soit plus direct, et pour que l’enchaînement logique des étapes du processus de quantification soit compréhensible.

Aujourd’hui, il existe de nombreux quantificateurs, mais ils ne répondent pas à toutes les exigences, notamment dans le cadre de la musique contemporaine.

La partie suivante va présenter l’un de ces quantificateur .

 

 

 

 

B " Quantify ", un module de quantification

 

Quantify est le module de quantification actuellement utilisé sous Open-Music.

Il peut être assimilé à une fonction de plusieurs paramètres, dont certains sont optionnels.

La quantification se fait donc en un seul temps. Le contrôle du processus est alors réalisé uniquement par le choix des paramètres d’entrée du module.

Présentation des paramètres :

Le premier paramètre du module est la liste des durées à quantifier.

Cette liste peut être extraite d’une source musicale quelconque, ou peut provenir d’une première quantification.

Par exemple, prenons la liste de durées :

1000, 500, 250, 250, 333, 333, 333, 500, 500, 250, 250, 250, 250, 1000

(les durées sont exprimées en milliseconde)

On peut affecter chaque durée à une note de manière à avoir la représentation suivante :

Les durées sont représentées par un trait horizontal.

Les paramètres de contrôle du module sont :

(* voir définitions en fin de rapport)

Le tempo (ou pulsation) est l’unité selon laquelle s’expriment les durées finales. Lorsqu’il est bien choisi, sa seule donnée peut suffire à obtenir une bonne quantification.

Un tempo de 49 (voir définition du glossaire musical) appliqué aux durées ci-dessus peut être représenté par la figure ci-dessous.

Les barres verticales représentent un début d’unité (ou pulsation). Elles sont régulièrement espacées de (60000/49 =) 1224 millisecondes.

 

 

Une fois le tempo fixé, la liste des signatures permet de visualiser dans le résultat final des " groupement d’unités de tempo". Par exemple, des signatures 2/4 signifient des groupements d’unités par 2. On peut les représenter par la figure ci-dessous. Les grandes barres représentent les séparations entre les groupes d’unités. (ici, il n’y a que des groupes de deux unités)

Les paramètres de contrôle optionnels sont :

(* voir définitions en fin de rapport)

Ces entrées sont des contraintes agissant sur la complexité des rythmes pour chaque mesure.

 

En sortie, le module de quantification renvoie une liste de valeurs définissant une structure rythmique. Cette structure peut être représentée en notation rythmique traditionnelle.

une représentation rythmique

 

 

Le processus de quantification détaillé :

La donnée de la pulsation et des signatures en entrée fournit une subdivision régulière (d’unité la pulsation) de l’échelle de temps dans laquelle sont disposées les durées. La quantification se fait dans chaque subdivision régulière. Elle consiste à exprimer les durées en proportion de la pulsation.

La représentation des notes () dans une pulsation d’une mesure sur l’axe de temps

Chaque pulsation (grand traits verticaux) est subdivisée en grilles (petits traits verticaux)

sur lesquelles on cherche à placer les évènements par rapport au début de la pulsation.

oi est le temps d’attaque

di est l’inter-onset (différence entre deux temps d’attaque successifs)

Ce processus commence par la recherche d'un diviseur entier. On essaie exhaustivement les divisions possibles de la pulsation par des entiers dans un rang [min max], où le min est calculé en fonction de la durée minimale dans la pulsation et le max est fixé à 32. Chacun de ces diviseurs possibles définit une grille pour chaque pulsation. On doit maintenant trouver la "meilleure grille" relativement à certains critères.

On commence par bouger chaque attaque au point le plus proche dans la grille, et pour chaque grille on calcule une erreur relative à ce processus. Trois différents types d'erreurs sont calculés :

La fonction cube

Distance euclidienne.

Afin de choisir la division convenable les trois mesures d'erreurs sont combinées avec des coefficients donnés par l’utilisateur qui permettent de favoriser la précision (des durées des temps d’attaque) ou la simplicité de la notation.

On finit ce modèle par la reconstruction de la structure à partir des résultats obtenus pour chaque pulsation. Cette construction peut être vue comme la construction d'un arbre dont les feuilles représentent l'information rythmique d'une division en pulsations tandis que les noeuds supérieurs représentent l'information rythmique au niveau des mesures ou des ensembles de mesures.

Le problème du tempo :

Prenons maintenant les entrées du module définies plus haut,

(durées : 1000, 500, 250, 250, 333, 333, 333, 500, 500, 250, 250, 250, 250, 1000

tempo : 49

signatures : 2/4)

et analysons le résultat de la quantification :

Les contraintes de tempo (49) et de signature (2/4) ont bien été respectées.

 

 

 

 

 

Prenons maintenant comme entrées le tempo 60 et la signature 4/4 :

Le rythme obtenu avec un tempo de 49 est assez complexe, presque autant que l’est la liste de durées initiale. La quantification n’a donc pas remplit le rôle qu’on lui avait attribué, qui était de réduire la quantité d’informations contenues dans la liste de durées.

Le rythme obtenu avec un tempo de 60 est beaucoup plus simple, donc satisfaisant.

Il faut donc impérativement fournir au quantificateur un tempo adapté à la séquence étudiée.

Certains quantificateurs industriels, contrairement à quantify, disposent d’algorithmes permettant de déterminer un bon tempo, moyennant quelques choix de l’utilisateur.

Supposons donc que le problème du tempo soit résolu.

Le problème des structures irrégulières :

Reprenons la même liste de durées que précédemment :

1000, 500, 250, 250, 333, 333, 333, 500, 500, 250, 250, 250, 250, 1000

Déformons-la, de façon à obtenir une structure comparable aux effets expressifs que pourrait produire un musicien s’il interprétait cette suite de durées (accélérations, irrégularités dans le tempo...).

Prenons par exemple la liste suivante :

1177, 592, 288, 337, 436, 337, 387, 600, 634, 296, 280, 296, 346, 11193

Le résultat de la quantification avec quantify est maintenant très médiocre :

Les rythmes sont trop complexes. Il faut donc essayer de se rapprocher de la représentation précédente :

Pour cela, nous proposons une pré-étape de quantification s’ajoutant au module quantify.

C’est la quantification par segmentations, présentée dans le chapitre suivant.

Elle a été définie puis implémentée dans le quantificateur " Kant " par Carlos Agon [Agon 94]

Elle offre à l’utilisateur un plus large contrôle sur la structure à quantifier.

Le stage a permit de développer une nouvelle interface de quantification sous Open-Music à partir de " Kant ". Elle sera présentée dans le chapitre suivant.

 

 

III La quantification par segmentations.

A Le principe de la quantification par segmentation

 

Le principe de base est de déterminer avec précision l’emplacement des barres de mesures (signatures) dans la structure rythmique finale. Ainsi, il sera possible de visualiser des groupements entre les rythmes. Le gain en simplicité visuelle pourra ainsi contribuer à la perte d’informations inhérente à la quantification.

Les quantificateurs industriels (quantify, finale) ne permettent pas ce type de contrôle.

Quantify, par exemple, dispose bien d’une entrée permettant de spécifier les signatures, mais cette entrée dépend de la pulsation spécifiée. Les groupements s’expriment en effet en nombre d’unités de pulsation. Les groupements de pulsations sont indépendants des durées sur lesquelles la quantification s’applique.

Le principe de la quantification par segmentations est de définir non pas des groupements de pulsation, mais des groupements de durées, avant même qu’une pulsation soit définie.

Le double rôle de la mesure est alors mis en valeur :

la mesure est un groupement métrique (groupement de pulsations) et un groupement rythmique (groupement de durées).

La quantification par segmentation permet de définir l’emplacement de la barre de mesure par des contraintes sur ces deux aspects. Les quantificateurs industriels ne posent de contraintes que sur l’aspect métrique de la mesure.

Concrètement, le principe est de segmenter (découper) un flux musical en plusieurs parties. Les parties seront délimitées par des séparation (ce seront les barres de mesure du rythme quantifié)

La première étape du processus de quantification est donc une segmentation (un découpage en plusieurs parties) de l’axe de temps sur lequel ont étés positionnées séquentiellement les notes.

Toute sortes de méthodes peuvent intervenir pour le choix des découpages. (voir B 3.)

La deuxième étape du processus consiste à déterminer une pulsation (unité de temps) qui soit un diviseur commun " approximatif " des durées des différents groupes constitués en première étape. (La durée d’un groupe est l’intervalle de temps dans lequel se situent les notes et les accords qui le constituent.)

Le diviseur commun est nécessairement approximatif car pour qu’il ait de l’intérêt, sa valeur ne doit pas être trop faible. Par exemple, nous dirons que 5 est un diviseur commun approximatif de 11, 15 et 19.

La méthode utilisée calcule la pulsation par un algorithme d'approximation (agcd) équivalent à l'algorithme développé à l'Ircam pour l'extraction de la fondamentale virtuelle d’un spectre discret exprimé comme une liste de fréquences (voir description et figure ci-dessous). L'analogie utilisée fait correspondre la liste de fréquences à la liste de durées et la valeur de la fondamentale virtuelle à la valeur de la pulsation.

 

 

 

 

 

 

 

 

 

 

Description de l’algorithme agcd :

Entrées : ‘values (durées des différents groupes) et ‘tolerance (valeur de tolérance pour les approximations)

Corps de l’algorithme :

 

L’algorithme de la fondamentale virtuelle.

 

 

 

 

A l’issue de la deuxième étape, nous aurons donc déterminé une pulsation selon laquelle pourront s’exprimer approximativement les durées des différents groupes. De façon à éliminer ce coté approximatif, nous allons ensuite modifier les tailles des groupes (par des opérations de compression et de dilatation) pour qu’elles soient des multiples parfaits de la pulsation trouvée.

Enfin, lors d’une troisième étape, une quantification que nous appellerons " quantification locale " est effectuée, avec comme entrées la pulsation trouvée à la deuxième étape, les signatures (voir définition dans le glossaire musical) et la liste de durées. Cette quantification n’intervient pas dans le cadre de la segmentation. Elle peut se faire par exemple à l’aide du module quantify.

L’interface que j’ai développé réalise les deux premières étapes, qui fourniront les entrées à la troisième étape. L’interface va maintenant être présentée.

B Une nouvelle interface graphique pour la quantification

 

La classe de l’interface hérite d’un éditeur musical (chord-seq) déjà implémentée sous Open-Music. Patchwork, Kant, Open-Music et l’éditeur Chord-seq seront décrits en chapitre 1.

L’interface propose alors de définir une ou plusieurs segmentations du flux musical à quantifier (matérialisé sous la forme de notes et d’accords, comportant donc des durées, mais aussi des hauteurs, des intensités...). La segmentation consiste à déterminer des groupes de notes ou d’accords par le positionnement de barres verticales (futures barres de mesure). Nous appellerons les frontières entre ces groupements des " séparations ". (cf. figure ci-dessus) Une segmentation contient donc un ensemble de séparations.

Les manipulations sur les segmentations et les séparations seront décrites au chapitre 2.

Une segmentation d’un flux musical dans le nouvel éditeur de quantification.

Les séparations apparaissent sous la forme de barres verticales,

créant ainsi un découpage de la séquence.

 

Plusieurs méthodes de segmentation sont proposées, de la méthode la plus basique (reconnaissance de groupes commençant par des hauteurs ou des durées localement minimales ou maximales) aux méthodes plus complexes de reconnaissance de patterns, ou de répétitions (par exemple en utilisant le coefficient d’auto-corrélation).

Ces méthodes seront décrites en 3.

 

 

1. L’environnement graphique

 

PatchWork est un langage de programmation visuelle construit au dessus de CommonLisp [Steele90]. Un programme PatchWork consiste en un graphe orienté acyclique dont les noeuds sont des boîtes représentant des invocations de fonctions, et dont les arêtes (connections) représentent le passage de paramètres.

Les boîtes ont divers types :

- Lisp (toutes les fonctions du langage Lisp sont disponibles) ;

- Calculs (opérations arithmétiques, logiques, combinatoires, ensemblistes) ;

- Génération ou transformations de structures musicales (interpolation d'accords ou de profils mélodiques, construction de séries et de spectres, génération stochastique etc.) ;

- Editeurs de courbes et de partitions en notation musicale traditionnelle ;

- Midi (réception et envoi de données vers des synthétiseurs externes avec possibilités d'échelles en micro-intervalles) ;

- Contrôle de la synthèse sonore (pilotage des programmes de synthèse Csound et Chant).

 

Les étapes de la segmentation du quantificateur Kant

Les événements sonores (représentés par des notes) sont positionnés dans le temps, aux positions correspondant aux temps d’attaque.

Les découpages (représentés par des symboles) se font sur les temps d’attaques.

 

- le modèle fonctionnel

- le modèle objet

- le modèle par contraintes

- le modèle visuel

Ses principales caractéristiques sont :

- la réflexivité (il contient une représentation de lui-même).

- la méta-programmation, qui permet de considérer les classes comme objets à part entière, de façon à pouvoir définir de nouveaux " types " de classes.

- une gestion de la dualité entre le temps de calcul d’un objet musical et le temps d’exécution d’une séquence musicale.

- une interface présentant à l’utilisateur des objets musicaux prédéfinis permettant de gérer à la fois le son, les paramètres midi et la notation musicale.

La boite chord-seq.

Ses premières entrées sont respectivement :

- la référence de la classe chord-seq

- les hauteurs des notes

- les onsets (voir définition dans le glossaire musical)

- les durées

- les intensités

 

 

 

L’éditeur chord-seq.

 

L’éditeur de quantification chord-seq-seg dispose par rapport à chord-seq d’une vue supplémentaire apparaissant sur la droite de l’éditeur, qui permet de définir et manipuler des segmentations. De plus, quatre sorties supplémentaires contiennent respectivement : la liste des méthodes de segmentation externes (voir 3.), le tempo et les signatures de la segmentation quantifiée en cours dans l’éditeur (si ils ont été définis lors de la phase de quantification proposée par l’éditeur), et une liste complète des paramètres définissant les segmentations. Cette dernière liste permet d’effectuer des sauvegardes.

L’éditeur chord-seq-seg.

 

Description de la vue :

 

2. Les manipulations graphiques dans l’éditeur chord-seq-seg

On peut distinguer deux étapes dans la manipulation de l’éditeur.

La première consiste à créer une segmentation, et à placer des séparations dans l’éditeur.

La deuxième étape consiste à rechercher un ou plusieurs tempo à partir de cette segmentation.

 

 

 

La segmentation :

Une fois la segmentation créé, on définit les séparations à la main (par un click sur l’emplacement désiré dans le panel), ou à l’aide de méthodes (voir 3.).

1) la manipulation des segmentations

2) la manipulation des séparations

La recherche de tempo

Une fois la segmentation définie, la recherche de tempo s’effectue en choisissant l’action ‘tempo’ du menu " action ".

Plusieurs tempi sont alors proposés. Le résultat de la quantification s’ajoute dans la liste des segmentations, sous le nom : " nom de la segmentation utilisée " concaténé à " -quant ".

La pulsation apparaît sous la forme de petites barres verticales s’intercalant entre les séparations.

Le tempo et les signatures correspondant à l’emplacement des séparations sont ajoutés aux paramètres de la segmentation-résultat.

Pour qu’ils soient disponibles en sortie de l’éditeur, il faut que la segmentation-résultat soit sélectionnée.

L’étape suivante de quantification peut alors se faire en connectant les sorties tempo et signature de l’éditeur aux entrées du module " quantify " décrit plus haut.

3. Des méthodes de segmentation (définition, utilisations)

 

Une méthode de segmentation est un algorithme définissant l’emplacement des séparations sur un flux musical donné.

Plusieurs méthodes sont disponibles dans l’éditeur de quantification à travers le menu " methode ". En voici quelques-une :

L’un des apports de la nouvelle interface est que les utilisateurs ont maintenant la possibilité de définir leurs propres méthodes de segmentation au moyen des Patchs d’Open-Music, qu’il suffit ensuite de connecter à l’éditeur par l’intermédiaire d’une entrée prévue à cet effet (entrée Labstractions).

Ces patchs prennent la forme de lambda-abstractions. Ce sont donc des fonctions, définies graphiquement par l’utilisateur, qui seront appliquées par l’éditeur au flux musical à quantifier.

(voir figure suivante)

La figure ci-dessus montre une abstraction définissant la fonction d’auto-corrélation (patch carré). Elle s’intègre à la boite chord-seq-seg (rectangle en bas à gauche) à l’aide d’une connection matérialisée par un trait les reliant.

Une méthode de segmentation particulièrement intéressante pour la quantification de structures régulières va être présentée dans le chapitre suivant.

Cette méthode devrait en effet permettre d’enrichir la liste des possibilités de segmentation automatique du nouvel éditeur que je viens de présenter.

 

IV Une méthode de segmentation par le coefficient d’auto-corrélation

Dans ce chapitre, on étudiera les applications du coefficient d’auto-corrélation à la quantification rythmique par segmentation.

Après avoir donné la formule du coefficient (partie A), une première utilisation du coefficient [brown94] sera analysée. (partie B)

Puis, après avoir soulevé les problèmes de traitement des structures régulières déformées, nous concluerons ce rapport par les possibilités offertes par les analyses de Peter Desain [Desain Siebe]. (chapitre V)

A Le coefficient d’auto-corrélation

La formule du coefficient d’auto-corrélation permet, étant donné une suite X(n), de comparer deux sous-suites extraites x[0..N] et x[m..m+N] de même longueur N, décalées de m éléments, afin de déterminer leur corrélation A[m] suivant la formule :

Plus la valeur de A[m] sera grande et plus la corrélation sera forte.

Généralement, on se donne une sous-suite de référence x[0..N] que l’on compare à plusieurs autres sous-suites x[m..m+N] en faisant varier m afin de déterminer celles qui lui sont le plus corrélées.

Les coefficients A[m] obtenus pour chaque valeur de m peuvent alors être visualisés dans un graphe que nous appellerons graphe de corrélation.

Les résultats sont normalisés en divisant chaque A[m] par A[0] (qui est la plus forte valeur que l’on puisse obtenir). Tous les coefficients sont alors compris entre -1 et 1.

(sur les graphiques, les valeurs sont multipliées par un coefficient 10000)

 

Un graphe d’auto-corrélation

En abscisse, les éléments de la suite des coefficients

En ordonnée, les valeurs du coefficient

Un pic à l’abscisse m signifie que x[m..m+N] est fortement corrélée à x[0..N]

 

 

B Une première interprétation du coefficient

 

Judith Brown [Brown94] nous propose de dégager le rythme de certains fragments musicaux contenant de nombreuses répétitions et régularités, en s’appuyant sur le calcul du coefficient d’auto-corrélation appliqué à des inter-onset (différence temporelle entre deux occurrences consécutives d’événements sonores). Cette méthode sera présentée au chapitre III.

Elle nous a intéressés dans la perspective de l’intégrer au nouveau module de quantification. En effet, l’ancien module de quantification (KANT [Agon 94]) ne permettait pas une analyse fine des structures régulières, sa fonction initiale étant l’analyse de structures complexes.

1) La détermination des barres de mesure et de la pulsation

 

Judith Brown [Brown94] nous propose l’analyse suivante:

A partir d’une suite X(n) d’inter-onsets (durées séparant deux attaques d’événements sonores consécutifs) extraite d’un enregistrement sonore comportant des régularités, étant donnée la sous-suite x[0..N] qui servira de sous-suite de référence :

L’analyse du graphe des coefficients d’auto-corrélation A[m] (corrélant x[0..N] à x[m..m+N]) permet de déterminer un emplacement des barres de mesures* dans la partition*, et parfois fournit une valeur pour la pulsation*. (* voir les définitions en annexe)

En effet, le coefficient met en valeur des régularités et des répétitions qui sont souvent indiquées par des mesures dans la notation traditionnelle.

L’emplacement des barres de mesures et la valeur de la pulsation ont une grande influence sur

la procédure de quantification, comme nous l’avons vu dans les chapitres précédants.

En fait, avec ces deux paramètres (emplacement des mesures et pulsation), il est facile de quantifier X(n) pour aboutir à une représentation rythmique.

 

Une représentation rythmique d’un extrait musical

Les mesures apparaissent sous la forme de barres (suivies de 4 4) qui découpent la séquence, et la pulsation, notée en haut à gauche (elle vaut 120 dans l’exemple), sert d’unité temporelle.

 

Voyons plus en détail la procédure d’analyse :

Judith Brown propose de détecter l’emplacement de la première barre de mesure du fragment musical étudié.

Cet emplacement est supposé correspondre au premier pic localement maximal rencontré dans le graphe d’auto-corrélation lorsqu’on le parcourt de gauche à droite.

Un pic situé à la valeur x est dit localement maximal lorsqu’il est maximal dans l’intervalle

[0 2x]

Ainsi, sur le graphe d’auto-corrélation suivant, le pic localement maximal est situé à la valeur 500, et doit correspondre à l’emplacement d’une barre de mesure.

En ordonnée, les valeurs du coefficient d’auto-corrélation

 

 

La procédure exige le respect de certaines contraintes :

Les deux sous-suites à comparer doivent respecter certaines contraintes, de façon à ce que le coefficient ait un sens.

Tout d’abord, comme nous l’avons remarqué au paragraphe précédant, les éléments de X(n) doivent être du même ordre de grandeur. X(n) ne sera donc pas strictement monotone.

De plus, deux sous-suites à comparer doivent avoir un certain nombre d’indices en commun.

En utilisant la notation de la formule, cela se traduit par : m < N

La limite que nous nous fixerons sera de au moins la moitié des indices en commun.

Donc m <= N/2

Ce critère est arbitraire, l’idée étant que le nombre d’éléments en commun doit être au moins supérieur ou égal aux nombre des éléments restants.

Enfin, la taille des sous-suites doit par ailleurs être suffisamment grande pour que les comparaisons soient significatives, mais ce critère est bien difficile à préciser, et dépendra de chaque cas de figure.

 

La fonction de calcul du coefficient d’auto-corrélation

telle qu’elle apparait dans OpenMusic

(boutons au-dessus de la boîte auto-correlation)

De gauche à droite:

- la suite de durées exprimée dans l’échelle de temps d’unité 20ms

- l’unité de l’échelle de temps (en ms)

- la longueur (en s) des sous-suites à considérer

- la taille (en s) de la suite initiale à analyser

Voyons maintenant les résultats de l’analyse appliquée à deux exemples.

2) L’analyse d’une structure régulière

 

Un seul exemple sera présenté dans le but de faciliter les comparaisons entre les différentes analyses. Ainsi, pour toutes les analyses, nous prendrons comme support le début de la marche turque de Mozart.

De plus, les tests effectués ont montré que la fonction d’auto-corrélation indique assez souvent l’emplacement de la première pulsation, et non celle de la mesure. Nous avons donc modifié certaines règles :

Le premier pic localement maximal détecté par la fonction d’auto-corrélation sera interprété comme étant la pulsation, et le deuxième comme étant la barre de mesure.

Quelques approximations seront alors nécessaires.

Les pics recherchés ne répondent pas toujours aux critères précédents.

Nous considérerons donc qu’un pic est localement maximal lorsqu’il est maximal dans l’intervalle [0 , 2(x-approx1)] et lorsque les pics situés dans [2(x-approx1), 2x] ne lui sont pas supérieurs de approx2.

Approx1 et approx2 seront des valeurs d’approximations.

L’analyse :

Appliquons maintenant la méthode d’auto-corrélation sur un extrait de la marche turque de Mozart, issu d’un fichier Midi comportant des durées parfaites. Les données ne proviennent donc pas d’une interprétation, mais ont été rentrées " à la main " dans le fichier Midi à partir de la partition.

L’analyse du graphe d’auto-corrélation détecte deux pics localement maximaux au sens où nous l’avons définit plus haut (valeurs 250 et 500)

Le premier pic est interprété comme étant la pulsation, et le deuxième comme étant la barre de mesure, ce qui est satisfaisant.

Le tempo trouvé est 120 à la noire, et la signature 2/4.

 

Graphe d’auto-corrélation issu de l’analyse d’un fragment de la marche turque de mozart

A partir de ces résultats, il est possible d’opérer une quantification à l’aide du module quantify, auquel on aura rentré les tempo et la signature trouvée. Les résultats seront satisfaisants :

 

3) L’analyse d’une structure régulière déformée

 

Etudions maintenant le comportement du coefficient appliqué au même fragment mais déformé par une pondération aléatoire des durées, ceci dans le but de se rapprocher de ce que pourrait être un fragment musical issu d’une exécution.

Les valeurs du graphe d’auto-corrélation sont nettement moins significatives, pour ne pas dire insignifiantes, puisque le tempo trouvé correspond rarement à la valeur attendue.

 

 

Graphe d’auto-corrélation calculé à partir du fragment déformé

 

Ceci nous procure une information assez importante sur les limites de la méthode telle que nous l’utilisons.

Deux solutions s’offrent à nous :

La première solution sera détaillée en conclusion.(chapitre V)

Voyons donc comment régulariser les déformations.

Pour cela, déterminons les informations à conserver sur la structure du fragment.

Considérons que le fragment est réduit à une suite d’inter-onsets (différences entre deux évènements sonores consécutifs).

Etant donné que nous cherchons à nous rapprocher d’une structure régulière, il nous paraît satisfaisant de réduire l’information disponible en affectant les valeurs des inter-onsets situés dans un même ambitus à une valeur moyenne représentative.

 

fig1

Graphe représentant les inter-onsets issus du fragment déformé. En ordonnée, les inter-onsets.

 

fig2

Graphe d’inter-onsets issu de la fonction de régularisation

fig3

Graphe d’inter-onsets issu du fragment parfait.

Le graphe régularisé (fig2) en est très proche.

 

 

Ainsi, nous aimerions ne conserver que la forme globale du graphe (fig1.), c’est à dire revenir au graphe (fig2.).

Pour cela, une fonction de régularisation a été crée.

Cette fonction partage l’axe des ordonnées en un nombre de valeurs précisées par l’utilisateur, et pour chaque valeur crée un groupe de toutes les durées de la suite initiale appartenant à l’intervalle définit par :

[valeur - (valeur * pourcentage rentré par l’utilisateur) &

valeur + (valeur * pourcentage rentré par l’utilisateur)].

Les groupes seront ensuite filtrés de manière à ce qu’aucun groupe n’empiète sur un groupe voisin, c’est à dire qu’aucune valeur d’un groupe n’appartienne à un autre groupe.

Les critères utilisés pour filtrer sont la taille du groupe (de deux groupes ayant des éléments communs on choisira le plus grand), puis en cas d’égalité, le groupe dont la moyenne des valeurs est la plus proche de la valeur initiale ayant servi à sa création est retenu. Enfin, si les groupes ne sont toujours pas séparés, ils sont abandonnés.

L’avantage de la méthode sur les méthodes habituelles est que le nombre de groupes obtenus n’est pas choisi au départ, ce qui permet de limiter les indications fournies en entrée de la fonction.

On attribuera ensuite à ces groupes de valeurs une même valeur représentative du groupe. Cette valeur pourra être une simple moyenne entre les valeurs du groupe, ou la valeur initiale ayant servit à créer le groupe.

 

 

Les entrées de la fonction d’approximation sont :

Ainsi, la structure globale du graphe irrégulier sera mise en valeur (figure 1). Elle sera assez proche de celle du graphe parfait (figure 3), mais pas tout à fait, ce qui fait que les résultats ne seront pas toujours satisfaisants.

Le tempo trouvé par la méthode du coefficient est correct dans 80% des cas.

Pour améliorer les résultats, il faudrait par exemple calculer le tempo sur plusieurs parties de la séquence, puis faire une moyenne entre les différentes valeurs trouvées. On pourrait aussi rechercher à régulariser parfaitement le graphe.

Ceci est en fait indispensable pour obtenir des résultats satisfaisants lors de la " quantification locale ". Les résultats montrent en effet que des petites variations dans les durées suffisent à produire un résultat trop complexe lors de cette étape.

 

 

Graphe d’auto-corrélation calculé à partir de la suite d’inter-onsets régularisée

Les pics peuvent à nouveau être interprétés pour déterminer les valeurs de tempo et les signatures

La méthode d’auto-corrélation, qui propose un interprétation en terme de pulsations et mesures des pics du graphe d’auto-corrélation, est donc assez performante mais elle nécessite le réglage de plusieurs paramètres, et montre rapidement ses limites dans le cas de structures irrégulières ou déformées.

On peut retirer des analyses un ensemble de conclusions :

Une façon " d’obliger " la méthode à ne prendre en compte que des valeurs antécédentes au point d’articulation, rendant la méthode utilisable en temps réel, pourrait s’inspirer de [DeSi]. Cet article propose par ailleurs une utilisation du coefficient d’auto-corrélation pour détecter une pulsation en temps réel. Elle sera soulignée en conclusion.

 

V Conclusions : Vers une mesure de l’expressivité

 

La méthode décrite plus haut nous a montré ses limites dans l’analyse de structures irrégulières. Une réponse à ses problèmes peut s’inspirer de l’article de Peter Desain [DeSi].

La méthode qu’il décrit n’a pas été implémentée sous Open-Music. Seule une fonction que j’ai écrit en lisp a été testée, et semble donner des résultats convaincants. La méthode pourra donc faire l’objet de développements futurs.

Elle propose d’utiliser le coefficient d’auto-corrélation comme une mesure de l’expressivité. Par expressivité, nous entendons les variations introduites par l’interprète par rapport à la partition.

En effet, les interprétations d’une oeuvre musicale ne sont jamais exactement fidèles à la partition. S’il est possible de produire des hauteurs exactes (avec un piano, par exemple), les durées et les intensités sont des paramètres beaucoup plus variables. L’analyse rythmique d’une interprétation doit donc prendre en compte les écarts observés par rapport à la notation de la partition.

Pour cela, Peter Desain [DeSi] propose d’adopter un système de fenêtrage. Le calcul du graphe d’auto-corrélation s’effectuerait ainsi dans une fenêtre dont la taille dépendra du contexte rythmique local à cette fenêtre, qui serait déplacée, pour chaque nouveau calcul, le long du fragment rythmique étudié.

Ainsi, les variations dues aux déformations (continues) de la structure rythmique seront locales, (seules les variations comprises dans la fenêtre seront prises en compte), et donc assez faibles pour ne pas perturber le calcul du coefficient d’auto-corrélation.

La fenêtre pourra avoir un pas de déplacement constant sur la séquence étudiée. Pour chaque fenêtre considérée, le calcul du graphe d’auto-corrélation pourra, par la méthode du B., fournir une valeur de tempo.

Pour chaque nouvelle fenêtre, une valeur de tempo sera donc trouvée, ce qui permettra d’établir un graphe de tempo sur l’ensemble de la séquence étudiée. Par ses variations, ce graphe mettra en évidence les irrégularités de la séquence.

Un problème immédiat déjà mentionné dans la partie B., est que le tempo trouvé sera plutôt parfois la marque d’une demi/mesure, ou bien d’une mesure. Ainsi, une valeur de 60 suivie d’une valeur de 130 ne signifie pas toujours un brusque changement de tempo, mais doit être interprété comme une légère accélération de 60 à 65 (= 130 / 2).

Actuellement, je ne dispose pas de méthodes pour effectuer ces distinctions.

Cependant, le principe me semble extrêmement intéressant car il permet d’analyser la séquence rythmique pas à pas, tout comme l’être humain pourrait le faire en écoutant une performance musicale.

 

En ce qui concerne l’éditeur de quantification, le stage a aboutit à une librairie utilisable dans Open-Music.

Cette librairie, largement inspirée du quantificateur " Kant ", offre un maniement plus souple des segmentations, et permet à l’utilisateur de personnaliser les méthodes de segmentation par le biais des lambda-abstractions.

Il faudra maintenant intégrer à l’éditeur de nouvelles procédures de segmentations.

 

 

 

GLOSSAIRE MUSICAL.

 

 

En sons sens usuel, celui que lui donne la théorie classique, la mesure relève d'un agencement rythmique plus rigoureux encore, défini avant tout par ses périodicités et ses

symétries : celles-ci sont concrétisées graphiquement dès le XVIIè siècle par les barres de mesures réalisant un compartimentage du flux rythmique en subdivisions de durées

égales ou "isochrones" : les mesures.

Par extension, on donne également ce nom à la portion de musique comprise entre deux barres consécutives.

ex : une mesure à 3/8 signifie qu'il y a 3 temps dans chaque mesure et que le temps a une durée égale à la croche.

Dans ce rapport, on emploie indifféremment le terme de tempo ou pulsation.

Le rythme comporte l'articulation des actes musicaux successifs ; il est donc la manière d'être ou la forme temporelle de la musique, le mode particulier selon lequel celle-ci

réalise son existence dans le temps.

Au sens étroit, le rythme est l'ordre et la proportion des durées, relativement longues ou brèves. Au sens large, il est l'ensemble du mouvement musical.

La notation utilise deux chiffres (par exemple 4/4, 8/4, 2/8), le premier est le nombre de pulsations, le deuxième est le rythme représentatif de la durée d’une pulsation (par exemple, 4 est une noire, 8 est une croche..) Une signature 2/4 signifie qu’il y a 2 noires dans une mesure.

Dès que se dégage la notion d'unité de temps (voir temps), c'est de la valeur de celle-ci que va dépendre le tempo. Il peut être indiqué par une indication expressive (ex :

andante, allegro ...) ou par le temps métronomique.

ex : q = 60 signifie qu'il y a 60 noires dans une minute ; la noire dure donc une seconde.

Dans une mesure à 4/4, le temps = la noire d'où le temps (ou pulsation) a une durée de une seconde.

Le temps métronomique indiqué au début d'une page musicale ne constitue qu'un tempo moyen à l'intérieur duquel peuvent intervenir accelerando ou rubato.

 

 

REFERENCES.

 

[Agon 98] A. Agon. " OpenMusic : Un langage visuel pour la composition musicale assistée par ordinateur " Thèse, IRCAM-Paris VI, 1998.

[Agon 94] Agon, A. " KANT: Une critique de la quantification pure. " Mémoire de DEA Informatique, Université de Paris XI, 1994.

[AAFR 94] Agon C., Assayag G., FinebergJ.,Rueda C. , ICMC 94. Aarhus, 1994. " Kant : a Critique of Pure Quantification "

[Brown 1993] Judith C Brown "Determination of the meter of musical scores by autocorrelation " J.Acoust Soc Am 94 (4) October 1993 

[BrownPuckette 89] " Calculation of a narrowed autocorrelation fonction " J Acoust Soc Am 85 1595-1601

[Camb 98] Cambouropoulos E. " Towards a General Computational Theory of Musical Structure " The university of Edinburgh, Faculty of Music and Department of Artificial Intelligence, 1998.

[Dannenberg 87] Dannenberg R B & Mont-Reynaud B " Following an improvisation in real time " Proceedings of the 1987 International Computer Music Conference. Computer Music Association.

[Desain Siebe] Peter desain, Siebe de Vos . " Auto-correlation and the study of Musical Expression "

[Desain Honing 94] Desain P & Honing H " Rule-based models of initial beat induction and an analysis of their behavior " In proceedings of the 1994 International Computer Music Conference 80-82. San Francisco :International Computer Music Association

[Desain Honing 92] Desain, P., & Honing, H. (1992) "The quantization problem: traditional and connectionist approaches. " In M. Balaban, K. Ebcioglu, & O. Laske (eds.), Understanding Music with AI: Perspectives on Music Cognition. 448-463. Cambridge: MIT Press.

[Honing 93] Honing, H. (1993) " Issues in the representation of time and structure in music " Contemporary Music Review, 9, 221-239.

[Huron 90] D.Huron Book review of Music as Cognition by ML Serafine Psychology of Music.

[Large ] Edward W.Large, John F.Kolen " Resonnance and the Perception of musical meter " Connection Science, 6 (1) 177-208

 

[Lerdahl Jackendoff 83] " A generative theory of tonal music " Cambridge : MIT press.

[Longuet higgins 87] " Mental Process " Cambridge MIT Press.

[LRD 93] M. Laurson, C. Rueda, J. Duthen. " The Patchwork Reference Manual " IRCAM, 1993

[Mazzola 97] Guerino Mazzola " inverse performance theory " gbm@presto.pr.net.ch

[Mc Adams 89] Steve Mc Adams " Physiological constraints on form-bearing dimensions in music. " Music and the cognitive sciences, Contemporary Music review. 4(1)

[Palmer Krumhansl 90] " Mental representation of musical meter " Journal of Experimental Psycology : Human Perception & Performance.

[Rosenthal 92] " Emulation of human rhythm perception " Computer Music journal 16, 64-76

[Tanguiane 94] A.S Tanguiane " A principle of correlativity of Perception and its application to Music Recognition " (Music Perception, 1994, vol11 n°4 465-502)

 

 

Annexes

 

1) la classe de l’éditeur graphique et une de ses méthodes

 

 

La classe de l’éditeur et ses champs (les 3 premiers champs sont publics car ils ont une entrée ‘initarg’) :

 

Une méthode de suppression de segmentation :

 

2) la fonction d’auto-corrélation décrite en V

 

; méthode principale qui constituera un module d’Open-Music