Humdrum : description

Présentation par Benoit Mathieu
Représentations Musicale, IRCAM

Présentation

Humdrum est un logiciel d'aide à la recherche en musique, crée par David Huron en 1994. Les capacités de Humdrum sont assez abstraites, il est donc difficile de caractériser ce qu'il fait précisement. Humdrum peut manipuler un nombre de représentations illimité, et peut transformer, classer, rechercher, restructurer, comparer.
Humdrum est un outil destiné à la musicologie systématique (systematic musicology), il permet de tester et vérifier des hypothèses formalisables à propos de musique (ou tout type de chose qui peut être représenté dans le format humdrum).

Humdrum est composé de deux parties distinctes :

I) La syntaxe

I.1) Description

La base de Humdrum réside dans la spécification de la grammaire utilisée pour représenter l'information. C'est cette grammaire que nous appelons syntaxe. Cette syntaxe est tout à fait générique et il est possible de construires plusieurs représentations différentes conformes à cette syntaxe, humdrum en comporte une vingtaine, et l'utilisateur peut définir la sienne pour répondre à des besoins particuliers.

La syntaxe de humdrum permet la représentation de tout type de données symboliques séquentielles, comme un spectre fréquentiel, des données MIDI, des pas de danse, des graphes de Schenker.

Un fichier de donnée pour humdrum est en fait un tableau à deux dimensions. Les colonnes sont utilisées pour représenter n'importe quel type de données, tandis que les lignes ont un sens défini : elle représentent les moments successifs du temps.

**Pitch **Duration **Valve Combination
1st note C4 quarter 0
2nd note B3 eighth 2
3rd note G4 eighth 0
4th note F4 eighth 1
5th note G4 eighth 0
6th note A4 quarter 1-2
7th note G4 eighth 0
8th note Ab4 quarter 2-3

Dans le tableau ci-dessus, on trouve trois colonnes. La première, **pitch, représente la hauteur des notes jouées, la seconde, **duration, représente la durée de ces notes, et **valve combination représente les pistons de la trompette à enfoncer pour jouer la note.

Les caractères qui apparaissent dans le tableau n'ont pas d'importance, à partir du moment ou ils ont une signification pour l'utilisateur. La différence entre le format de donnée humdrum et un tableau réside dans le fait que les "colonnes" des données de humdrum peuvent de diviser, se rejoindre, apparaitre et disparaitre au cours du fichier. C'est pourquoi nous les appelerons flux (spines dans le manuel).

I.2) Différentes représentations

Les fichiers les plus courament utilisés par humdrum représentent de la musique, les flux représentent des voix différentes, les cellules représentent des notes. Il est important de noter que chaque flux peut utiliser une représentation différente, qui, en fait, correspond au type de données que le flux va représenter.

Par exemple, si le flux est destiné à représenter une voix d'une partition, on pourra utiliser la représentation **kern (la plus utilisée pour humdrum), si le flux est destiné à représenter le texte d'un choeur, on utilisera la représentation **text. (voir Humdrum representations reference )

Il est possible de trouver diverses représentations pour le même phénomène, ainsi **kern n'est pas la seule manière de représenter une partition, on pourra utiliser **midi, **semits (où on conserve juste une valeur absolue représentant chaque demi-ton). Mais ces représentations ne renferment pas toujours la même information. Ainsi, certaines fonctions font des conversions, quand c'est possible. L'utilisateur peut créer sa propre représentation si il a des données particulières à traiter, des gestes d'instrumentistes, une notation particulière, etc. Certaines fonctions sont génériques (notament la recherche de motif) et peuvent s'appliquer à n'importe quel type de données (compatible avec la syntaxe humdrum).

I.3) La représentation **kern

La représentation **kern est la représentation la plus courament utilisée dans Humdrum. Ainsi, au moins 30000 oeuvres complètes ont été encodées dans cette représentation. Pour des raisons de droits, ces fichiers ne sont pas disponibles, on en trouve seulement quelques uns ( voir Kern Scores).

**kern permet le codage de la hauteur, la durée, les altérations, les ornementations, les liaisons, les phrasés, les glissandos, les reprises, les coups d'archets, les directions des queues des notes.

En savoir plus sur la représentation **kerm

II) Les fonctions

II.1) Organisation et interface

Humdrum n'est pas un programme que l'on lance, comme c'est le cas du Musicoscope, d'un traitement de texte, ou autre. Humdrum est une librairie de fonctions qui sont fournies à l'utilisateur pour lui permettre de manipuler les fichiers de la bonne syntaxe. Ces fonctions sont directement accessibles depuis un terminal UNIX.

Le choix de cette organisation permet une grande flexibilité d'interconnection des fonctions entre elles, mais aussi avec des autres programmes. En effet, les fonctions prises indépendemment réalisent des opérations plus ou moins simples, et c'est réellement les possibilités d'interconnections de ces fonctions qui font de humdrum un logiciel puissant.

Le revers de la médaille est l'interface. Tout se fait à partir d'un terminal UNIX par des lignes de commandes, les résultats sont au format texte, à l'écran ou dans des fichiers. L'utilisation de humdrum passe par l'accomodation à ce type d'interactions homme-machine. La puissance que l'utilisateur tirera de Humdrum dépendra essentiellement de son aptitude à utiliser et connecter correctement les bonnes fonctions.

II.2) Exemple de fonctions

Humdrum fournit une librairie de plus de 70 fonctions. Parmis ces fonctions on en distingue au moins deux types : les fonctions de manipulation, et les fonctions d'analyse.

Les fonctions de manipulation permettent à l'utilisateur d'assembler, extraire, visualiser, convertir, transposer, vérifier les fichiers de données afin de parvenir à l'information utilisable. A noter la présence de fonctions de conversion de fichier MIDI et Finale en fichier humdrum (**kern), et vice-versa.

Dans le cadre de notre réflexion sur les outils d'analyse, nous allons nous attacher plus particulièrement aux fonctions d'analyse.

Recherche de similarités

Recherche des motifs donnés par l'utilisateur. L'utilisateur enregistre des motifs dans des fichiers annexes, puis peut, à l'aide de la commande patt rechercher ces motifs dans une oeuvre. patt peut créer un nouveau flux ou il placera des marqueurs, ou simplement insérer des commentaires. Un motif peut être définit à l'aide d'expressions régulières, ce qui permet de définir des motifs plus abstrait d'un simple motif mélodique. De plus, patt permet la définition de motifs multi-flux, ceci aussi avec des expressions régulières.

Mesure la corrélation entre deux flux de valeurs numériques. Plus précisément, correl calcule le coefficient de Pearson, c'est à dire le degré de linéarité entre les deux flux. On obtient un résultat de 1 si les deux flux sont en relation linéraire positive, -1 s'ils sont en relation linéaire négative, entre -1 et 1 sinon.

Si les deux flux ne sont pas de la même longueur, correl donne le coefficient de corrélation pour chaque alignement possible. (en savoir plus)

Mesure la distance d'édition entre deux flux. Il s'agit du plus petit nombre de manipulations élémentaires (substitution, insertion et déletion) nécessaires pour passer du premier flux au second. simil peut traiter aussi bien des données numériques que symboliques. (en savoir plus)

Calcule des indices issues de la théorie de l'information. Par exemple, on peut obtenir les informations suivantes sur un flux :

Total number of unique states in message:	4
Total information of message (in bits):	20.7549
Total possible information for message:	24
Info per state for equi-prob distrib:	2
Average information conveyed per state:	1.72957
Percent redundancy evident in message: 13.5213

Ce résultat nous apprend que le flux ne comporte que 4 états (4 symboles différents), l'information totale du message, au sens de Shannon, est de 20.7549 bits. Un message de même longueur peut avoir comme information maximale 24 bit (atteint lorsque la distribution des symboles est équiprobable). Le nombre de bits nécessaires pour coder 4 symboles est 2, alors que dans notre message, chaque symbole renferme 1.72957 bit d'information. Enfin, la redondance dans le message est de 13.5%.

Cette fonction permet, en autres, de dresser des statistiques d'information sur un répertoire d'oeuvres, on peut obtenir les symboles utilisés ainsi que l'information moyenne qu'ils transportent. Ces statistiques peuvent ensuite servir à positionner une oeuvre particulière au sein du répertoire, et voir si telle oeuvre est exceptionnelle du point de vue informationnel.

(en savoir plus)

Analyse tonale

hint détermine les intervalles harmoniques entre des flux parallèles, mint les intervalles mélodiques de deux notes consécutives. Le résultat utilise des abréviations standards (m2 seconde mineure, P4 quarte juste, A6 sixte augmentée, etc.) (en savoir plus)

Estime la tonalité d'un passage musical en utilisant la méthode de Krumhansl basée sur des expériences en psychologie musicale. key n'est pas capable de distinguer les enharmonies.

key fournit trois résultats : la tonalité estimée, le coefficient de corrélation de Pearson avec un exemple majeur ou mineur, et un coefficient de confiance suivant qu'il y a d'autres bonnes tonalités candidates ou non. (en savoir plus)

Analyse sérielle

Humdrum fournit des fonctions et des représentations destinées à l'analyse sérielle :

pcset identifie les ensembles de classes de hauteurs et nous les donne dans la notation de Forte (pcset)
iv calcule le vecteur d'intervalles d'un ensemble de classes de hauteurs (iv)
reihe permet d'appliquer des transformations sur une suite de classes de hauteurs (transposition, inversions, retrogradation, et inversion rétrograde). (reihe)
nf détermine la forme normale d'un ensemble de classe de hauteurs (forme la plus compacte) (nf)
pf détermine la forme primitive d'un ensemble de classe de hauteurs (forme la plus compacte transposée pour commencer sur le degré 0) (pf)

pcset et iv peuvent permettre de générer le type de résultats suivant :

**pc **pcset **name **iv
0 1-1 tone <000000>
0 2 2-2 major second <010000>
0 3 7 3-11 minor triad <001110>
0 4 7 3-11 major triad <001110>
0 4 7 10 4-27 dominant seventh <012111>
1 5 8 11 4-27 dominant seventh <012111>
*- *- *- *-

La commande reihe peut, par exemple, être utilisée pour construire une matrice (liste de série) à partir d'une série. Cette matrice peut ensuite servir de base à une recherche de série dans une oeuvre en la combinant avec les commandes patt et pattern.

Analyse rythmique

Mesure le "niveau de syncope" à chaque instant du flux. synco requiert deux flux en entrée, dont un doit être du type **metpos (représentation de la métrique). Cette fonction implémente un algorithme inspiré du travail de Lee et Longuet-Higgins.

!! Example #1  
**pitch**metpos**synco
*M2/4*M2/4*
*tb8*tb8*tb8
=1=1=1
r10
.30
r20
A430
=2=2=2
G410
.30
B420
r30
=3=3=3
C510
C530
.20.41
B430
=4=4=4
*-*-*-

(en savoir plus)

Analyse un passage musical en termes de prototype rythmiques de Johnson-Laird. urrhythm attribue à chaque temps une des trois fonctions suivantes : Notes, Syncope ou Autres. Cette fonction nécessite une métrique constante et ne traite seulement que celles dont le numérateur est 2, 3, 4, 6, 9 ou 12. Ces métriques sont divisées en 3 ou quatre temps. (en savoir plus)

Autres fonctions

Calcule les accents mélodiques d'un flux. melac implémente le modèle d'accents mélodiques de Joseph Thomassen. Pour chaque note du flux, melac attribut un accent représenté par un réel entre 0 et 1. (en savoir plus)

Calcule le degré de dissonance pour des spectres successifs. Cette fonction utilise un algorithme de Kameoka et Kuriyagawa. Elle utilise entrée des flux au format **spect (représentation discrète d'un spectre de fréquences). (en savoir plus)

xdelta calcule la différence entre deux données numériques successives, ydelta calcule la différence entre deux données numériques simultanées de deux flux parallèles. (xdelta, ydelta)