L'analyse rythmique dans OpenMusic

L'analyse rythmique

L'analyse rythmique peut se décomposer en plusieurs problèmes distincts.

Extraction de pulsation : A partir de données audio ou symboliques (Midi), on souhaite extraire une pulsation, régulière ou non. La notion de pulsation étant très subjective, il est difficile de la définir. Cooper et Al (1960) définissent pulse de la manière suivante : "pulse is one of a series of regurlarly recurring, precisly equivalent stimuli."
Quantization : La quantization consiste à convertir les durées et les onsets de façon à ce qu'ils soient des entiers ou des rapport d'entiers. Cette opération nécessite la connaissance d'une pulsation. Quantizer revient à essayer de remettre sur les temps les rythmes qui ne le sont pas (Par exemple, fichiers midi issus d'un enregistrement).
Extraction de métrique : Selon Cooper et Al (1960) "meter is the number of pulse between the more or less regurlarly recurring accents". Certains proposent la notion d'accents métriques, la métrique se caractériserait donc par ces accentuations récurrentes et régulières. Principalement, on distingue les métriques binaires et les métriques ternaires.
Groupement rythmiques : Le rythme est souvent liée à l'organisation temporelle des événements. Cooper et Al définissent le rythme comme le groupement de pulse autour d'un accent. Ces groupement peuvent à leur être regroupés (Lerdhal).
 

OMKant

La librairie OMKant fournit des outils pour l'analyse rythmique dans OpenMusic. La classe principale, chord-seq-seg, fournit l'interface. Cette libraire offre à l'utilisateur d'OpenMusic la possibiliter de réaliser l'extraction d'un pulsation régulière. Dans le cadre de sa thèse, Benoit Meudic a enrichi OMKant et a développé des algorithmes pour l'extraction de pulsation variable, et pour l'extraction de métrique et de groupements.

Extraction de pulsation régulière

L'extraction de pulsation régulière se fait en deux étapes : le choix des marqueurs et la recherche d'un plus grand dénominateur commum.

Plusieurs marqueurs sont disponibles :

D'autres marqueurs sont disponibles, notament des marqueurs automatiques (ceux proposés par Cambouropoulos).

Une fois que l'utilisateur a choisi les marqueurs qu'il souhaite prendre en compte, il va pouvoir lancer l'extraction d'une pulsation régulière. Cette extraction se base sur la recherche d'un plus grand dénominateur commum aux intervalles entre marqueurs, de façon à placer un maximum de marqueur sur la pulsation. Selon le nombre de marqueur, on peut arriver à une pulsation relativement courte, qui n'a alors aucun sens pour nous, on permet donc à l'utilisateur de définir un seuil de tolérance, de façon à obtenir un algorithme moins rigide. L'algorithme va ensuite proposer un certain nombre pulsation avec le taux d'erreur observé, et l'utilisateur pourra choisir la pulsation qu'il souhaite utiliser.

Une fois le tempo choisi, le logiciel va quantiser de façon à obtenir le résultat suivant :

 

Extraction de pulsation variable

Un algorithme d'extraction de pulsation variable est en cours de développement par Benoit Meudic. Cette algorithme, basé sur une heuristique, permet d'extraire une pulsation variable, comme dans le cas d'une interprétation. L'algorithme étant un algorithme temps-réel, il fonctionne de la manière suivante : il fait des hypothèses de tempi possibles au début du morceau, et tente de les propager au long de l'oeuvre. Il se déplace au long de l'oeuvre en gardant une fenêtre contextuelle (mémoire courte). A chaque instant, il détermine le tempo local en tenant compte de son estimation antérieure, et de l'événement local. Remarquons que l'algorithme extrait une pulsation en partant du principe que les variations de tempo sont continues.

Les deux fonctions principales de l'algorithmes sont les suivantes :`

Enfin, pour être temps-réel, l'algorithme doit pouvoir choisir quel est la bonne pulsation. Pour l'instant, l'algorithme donne comme résultat des courbes correspondant à des pulsations possibles, avec leur variations au cours du morceau. Des expériences ont été faites, par exemple sur des ragtimes, auxquels on a appliqué une déformation de tempo, qu'on a ensuite cherché à retrouver.

On obtient le résultat suivant :

On voit en abscisse le temps, et en ordonné la période de la pulsation (en ms). On remarque les pulsations lentes ne rendent pas vraiment compte de la réalité. Celà met en évidence un "seuil de variation" au delà duquel l'algorithme n'arrive pas à propager efficacement les pulsations (les pulsation les plus lentes sont en fait des multiples des pulsation plus rapides. Etant plus lente, il y a plus de temps entre chaque confirmation de la pulsation, et cet intervalle de temps plus grand permet de plus grandes variations, ce qui déstabilise l'algorithme). Nous voyons ici un seul exemple d'une série de tests, qui montrent que plus les variations sont rapides, plus les pulsation pertinentes sont courtes.

Extraction de métrique

Une fois que l'on dispose d'une pulsation, nous pouvons nous intéresser à l'extraction de la métrique. Benoit Meudic a développé dans OpenMusic un patch réalisant cette opération. Comme pour l'extraction d'une pulsation, retrouver la métrique commence par un marquage, qui doit permettre de mesurer l'importance de chaque pulse. Cette mesure nous permet de déceler des accents métriques, au sein desquels nous chercherons ensuite à déceler une périodicité, qui nous permettra de regrouper les temps et de mettre en évidence une structure.

Les marqueurs

Les marqueurs utilisés pour l'extraction de la métrique sont les suivants:

Selon chaque type de marqueurs, on attribut à chaque pulse une note entre 0 et 8, que nous additionnons, et qui donne un score relatif à l'accentuation (définie par les marqueurs choisis). Nous obtenons ainsi une séquence de taille N, au sein de laquelle nous allons maintenant chercher à déceler une périodicité.

Extraction de la périodicité par auto-corrélation

L'auto-corrélation de degré n d'une séquence représente, de manière simplifiée, un score de ressemblance de cette séquence avec la même séquence décalée de n. Ainsi, les maximum de la fonction d'autocorrelation d'une séquence représentent les périodes de cette séquence, pour lesquelles la séquence présente une forme de similarité.

Le calcul de l'autocorrélation de la séquence obtenue avec les marqueurs précédents donne un résultat de la forme suivante :

Sur ce résultat, nous considérons les maxima locaux comme périodes potentielles. Mais tous les maxima locaux ne sont pas intéressants. Nous procédons donc de la manière suivante : On utilise une fenêtre de taille p autour d'échantillon considéré, il sera maximum local, si il est maximum sur une fenêtre de taille p/3 autour de lui, et si il est supérieur à 1/3 des valeurs présentes dans la fenêtre de la taille p.

Afin d'obtenir des résultats plus fins, ce calcul d'autocorrélation est répété sur toutes les sous-séquences des taille M<N. Ceci permet de relever les périodes les plus proposés, et ainsi définir une métrique.

Une fois une première périodicité extraite, nous pouvons répéter l'opération à un niveau supérieur, en calculant l'autocorrélation non pas sur une séquence de pulse mais en regroupant les pulses selon la périodicité extraite.

En répétant cette opération plusieurs fois, il est possible d'extraire un arbre qui reflète la structure rythmique du morceaux.

La figure ci-dessus montre l'extraction de la métrique de l'indifférente de Rameau. La pulsation extraite correspond en fait aux croches de la partition. L'algorithme choisie de les regrouper par deux, ce qui correspond aux noires. Ensuite, il regroupe les noires par trois, ce qui correspond aux mesures du morceaux qui est en 3/4.