Département d’informatique
Laboratoire de microinformatique (LAMI)
Stage Expo.01, 19.7.99 - 20.8.1999
Prof. Jean-Daniel Nicoud


 
 

Interaction musicale

pour ‘La maison des petits robots’

Projet de l’Expo.01
 

par Patrick Ramer

Etudiant en 4ème année Microtechnique
 

Lausanne, août 1999


Table des matières

1   Introduction

    1.1  Situation du projet
    1.2  Les étapes du processus
    1.3  Le développement
    1.4  Les méthodes

2   L’environnement de programmation

    2.1  Matlab
    2.2  jMax
    2.3  MAX/MSP
    2.4  Microprocesseurs

3   Prise de son

    3.1  Les formats audio
    3.2  Microprocesseurs

4   Reconnaissance des tons

    4.1  Reconnaissance de la hauteur des tons
    4.2  Classification
    4.3  Reconnaissance de la tonalité

5   Algorithme d’improvisation

    5.1  Différentes idées
    5.2  Les données exigées
    5.3  Méthodes et critères pour obtenir les données
    5.4  Systèmes temps-réel

6   Génération de sons

7   Présentation des résultats

8   Conclusion

    8.1  Les performances du système
    8.2  Développements futurs
    8.3  Remerciements

9   Produits sur le marché

10   Contacts

Bibliographie

Annexes

    A1  Code en Matlab
    A2  Liste des notes reconnues
    A3  Dictionnaire musical



    1    Introduction

      1.1    Situation du projet

      En 2001, en Suisse se déroulera l’exposition nationale : l’Expo.01. Un projet d’exposition est ‚La maison des petits robots‘ qui se propose de familiariser les visiteurs avec l’état actuel de la recherche en mettant l’accent sur un phénomène original : placé face à ces machines dotées d’une certaine autonomie comportementale, nous avons tendance à réagir comme s’il s’agissait d’animaux ou d’humains. A leur tour, les machines peuvent être conçues pour exploiter cette réaction. Jouant cette carte, le projet a pour ambition d’instaurer une véritable relation entre les visiteurs et les machines, même si cette relation reste un jeu.

      Une idée est d’avoir une interaction entre les robots et le public sur la base d’un jeu musical. Typiquement, le public devrait pouvoir donner une mélodie, et le robot rendra réponse sous forme d’une improvisation sur la base de cette mélodie.

      L’idée ne peut pas être de concevoir un robot qui perçoit et improvise comme un être humain le ferait. L’important c’est que le public suppose que le robot agit comme un être humain ! De plus il est important que le système puisse réagir à plusieurs niveaux. La première interaction ne doit pas être la plus sophistiquée possible. Il doit exister la possibilité de défier le robot après une première prise de contact. Ceci rendra le robot beaucoup plus intéressant.

      Néanmoins, j’ai dû faire des hypothèses restrictive pour le développement d’une version de test de ce comportement. Je me suis concentré sur le cas le plus simple : un sifflement est un signal très simple à traiter puisqu’il correspond presque à une sinusoïde parfaite. L’idée de base est donc qu’on puisse siffler une mélodie, et par la suite le robot effectuera une improvisation plus où moins sophistiquée sur cette mélodie, comme par exemple d’ajouter une deuxième voix. Des idées qui vont plus loin, seront détaillées lors de la description des méthodes utilisées. Je suis parti du principe que les mélodies sifflées seront du style des chansons d’enfant ou des chansons très connues. De plus elles doivent être sifflées avec une certaine précision au niveau de l’intonation.

      Je remarque que le projet n'a pas été terminé dans sa globalité. Pour la suite on pourrait reprendre et développer le programme que j'ai commencé, ou bien dégrossir encore plus le sujet pour trouver d'autres idées et approches. De toute façon, ce rapport peut être un bon point de départ.

      Finalement, je prie le lecteur de se référer aux § 9 et 10 pour plus d’informations sur des travaux qui ont déjà été réelisés dans ce domaine. Il y a une liste non-exhaustive de produits sur le marché, d’instituts et de personnes de contact.

      1.2    Les étapes du processus

      Le processus d’improvisation sur une mélodie peut être divisé en quatre étapes principales:
       
        1. Prise et/ou enregistrement de sons (sifflement)
        2. Reconnaissance de tons (hauteur)
        3. Algorithme d’improvisation
        4. Génération de sons
Bien sûr toutes ces étapes peuvent encore être divisées en différentes parties qui, seront expliquées en détail lors de la discussion des différentes étapes.

1.3    Le développement

Il est fort probable que sur le robot, le traitement de signal sera effectué par un DSP. Par contre, je n’ai pas encore réfléchi en détail sur les dispositifs qui seront nécessaires pour permettre un bon fonctionnement de ce module sur le robot.

L’objectif, dans un premier temps, fut de réaliser un système qui permette de faire les traitements nécessaires dans n’importe quel environnement pratique pour le développement. J’ai donc décidé de faire tout le traitement sur un PC, avec des outils très pratiques qui existent déjà.

1.4    Les méthodes

Les méthodes générales qui sont utilisées pour le traitement et la reconnaissance de la parole (cf [1]) sont aussi applicables pour la reconnaissance de la musique. Souvent, elles peuvent être simplifiées de manière considérable, surtout dans le cas où l’on traite un simple sifflement.

Par contre pour des méthodes modifiées et adaptées à la reconnaissance de la musique il est plus difficiles à trouver des informations puisque ce sujet est présent dans toute sorte de contextes.

Dans le programme que j’ai développé je n’ai même pas utilisé des méthodes de reconnaissance de parole, puisque c’est un système aux performances très limitées. D’ailleurs, il reste à voir s’il n’est pas possible de développer des systèmes assez performants sans utiliser ces méthodes du tout.



2    L’environnement de programmation

    2.1    Matlab

    Matlab est un logiciel très puissant qui permet d’effectuer des calculs sur un grand nombre de données par des commandes très simple. En plus, il y a de nombreux toolbox, notamment pour le traitement de signaux. C’est ce logiciel qui me semble être le meilleur choix, pour obtenir rapidement des résultats utilisables.

    J‘ai travaillé avec Matlab sous WINDOWS.

    2.2    jMax

    jMax est un logiciel qui est développé à l’IRCAM (Institut de Recherche et Coordination Acoustique/Musique) à Paris. C’est un logiciel de programmation graphique qui inclut plusieurs modules particulier pour faire du traitement de la musique.

    Actuellement, jMax ne tourne que sous LINUX. Je n’ai pas eu l’occasion de le tester. Après lecture de la documentation (qui n’est pas très détaillée) je pense que les performances pour cette application devrait être légèrement supérieures à celles de Matlab.

    2.3    MAX/MSP

    MSP est un ensemble d'extensions du logiciel MAX 3.5 (IRCAM/Opcode) qui permet de faire de la synthèse et du traitement du signal en temps réel sur un PowerMac équipé du Mac OS. Il est compatible avec le logiciel FTS développé par l'IRCAM, qui lui fonctionne sur des plates-formes avancées du type Silicon Graphics.

    Just as Max is an erector set for MIDI and multimedia, MSP is an erector set for audio, consisting of over 75 objects that synthesize, process, analyze, delay, and generally mess around with audio signals in real-time. If you've tried to learn sound synthesis and DSP languages and come away baffled, MSP is for you. Using MSP is more like tweaking than programming, yet its elegant graphical representations of synthesis and signal processing algorithms are transformed into remarkably efficient DSP code. MSP is appropriate for sound designers, educators, researchers, and musicians who want to develop interactive performance instruments. Since you can use the free Runtime Version to distribute pieces you make, MSP can be a medium for composers who want complete control over the sonic environment.

    2.4    Microprocesseurs

    Evidemment, les programmes développés dans un langage évolué ne peuvent pas directement être implémentés sur un microprocesseur, ce qui doit être le cas sur le robot.

    La meilleure solution pour le système sur le robot est probablement de tout mettre dans un (ou plusieurs) DSP. La génération des sons peut également être implémenté sur un DSP par exemple à l’aide d’un algorithme ‘Single Operator FM’.

    Puisque le signal d’un sifflement est très proche d’un sinus et ne présente pas d’harmoniques, il n’est pas très utile de faire le calcul laborieux d’une transformée de Fourier qui fournit beaucoup plus d’informations que nécessaire. On peut s’imaginer de transformer ce sinus quasi-parfait en un signal carré et mesurer la période. Un algorithme qui effectue ce traitement s’appelle ‘self tuning filtered adaptative zerocross detection algorithm’. Ceci peut facilement être implémenté sur un microcontrôleur.



3    Prise de son

    3.1    Les formats audio

    Formats de fichiers sons :
      AIFF (Audio Interchange File Format, Mac)
      WAV (Windows Audio/Visual, Windows)
      AU (Audio, Sun)
      SND (sound)


    Formats d’interface : SPDIF (Sony/Philips Digital Interface Format), ADAT

    MIDI (Musical Instruments Digital Interface)

    Pour le développement, j’ai utilisé de simples fichiers .wav, enregistrés avec les outils standard de WINDOWS

    3.2    Microprocesseurs

    La prise de sons sera faite par un convertisseur A/D fournissant des échantillons (samples) à une fréquence bien définie (sampling frequency).

    Il faut surtout se poser la question quand et combien de sons on veut prendre. Je pense que la durée des petites mélodies sera toujours d’un ordre de grandeur qui permette de faire une mesure d’intensité en continu, de détecter ainsi le début d’une mélodie, de l’enregistrer, de détecter la fin de la mélodie et finalement de passer le signal enregistré au module de reconnaissance.



4    Reconnaissance des tons

    4.1    Reconnaissance de la hauteur des tons

    Pour reconnaître les tons, il faut déterminer les fréquences fondamentales. Une méthode est de calculer la transformée de Fourier du signal (Fast Fourier Transform FFT) pour connaître sa densité spectrale. Il faut effectuer cette transformée pour des fenêtres temporelles bien adaptées (Short Term Fourier Transform STFT) afin d’extraire le parcours fréquenciel du signal. J’ai constaté que la largeur de fenêtre qu’on utilise normalement en traitement de la parole est aussi adaptée pour cette application. On effectue donc tous les 10 ms une transformée sur une fenêtre d’une largeur de 30 ms.

    Ce traitement fournit tous les 10 ms un spectre avec un pic très net à la fréquence fondamentale puisque le sifflement ressemble beaucoup à un sinus. La suite de tous ces spectres peuvent être représentés dans un spectrogramme.

    Il est possible d’obtenir les mêmes données sans calcul d’une transformée de Fourier en mesurant simplement la période du signal (cf. 2.4).

    4.2    Classification

    Une fois le spectrogramme est déterminé, on peut classifier les fréquences fondamentale de chaque instant temporel.

    Tout d’abord un filtrage du bruit à basse fréquence est effectué en dessous de la fréquence la plus basse qui doit être reconnue. Eventuellement un filtrage allant jusqu’à des fréquences plus hautes pourrait être effectué en fonction des fréquences où l’on estime retrouver la mélodie, si celle-ci se trouve à des fréquences plus hautes.

    Pour avoir un signal qui représente de la musique, on ne peut pas accepter n’importe quelle fréquence fondamentale, mais des fréquences bien définies. Il s’agit donc d’attribuer à chaque fréquence fondamentale (à chaque instant) un ton (avec une fréquence bien définie) qui, ensuite pourra être utilisé pour le traitement musical. Le rapport de fréquence entre deux tons d’un intervalle d’un demi-ton est constant ( = 12Ö2). Ceci est imposé par la musique. En plus, un ton d’une certaine durée (par exemple une noire) ne peut pas changer sa fréquence au cours du temps dans une représentation musicale. Il faudrait reconnaître pour toute la durée du ton la même fréquence.

    Il y a deux manières de procéder du point de vue musical : une classification absolue et une classification relative.

    La classification absolue consiste à définir une fréquence bien précise pour chaque ton. La méthode la plus simple pour déterminer le ton, est de prendre celui dont la fréquence est le plus proche de celle observée. Une méthode plus précise est celle où on définit une fenêtre fréquencielle pour chaque tons et on compare les sommes du spectre dans la fenêtre de chaque ton. La valeur maximale fournit le ton. Les fenêtres fréquencielles seront évidemment d’autant plus large que la fréquence est plus haute. Dans la pratique les deux méthodes donnent à peu près les mêmes résultats.

    Le désavantage de la classification absolue se présente lorsqu’on siffle toute une mélodie un quart de ton plus bas ou plus haut que les tons définis. Dans ce cas l’algorithme vas basculer entre deux tons et il sera très difficile, voire impossible, de filtrer ce bruit, par la suite.

    L’avantage de travailler avec des fenêtres fréquencielles est qu’on reste indépendant de l’énergie. En reconnaissance de la parole on travaille obligatoirement avec les différences entre le vecteur de fréquence observé et celui modélisant ce qu’on veut reconnaître (cf [1]). Mais vu que dans le cas d’un sifflement on n’a qu'une seule fréquence (la fréquence fondamentale) qui contient de l’information, on n’a pas besoin d’utiliser ces méthodes, et on reste indépendant de l’énergie.

    La classification relative ou classification des intervalles ne reconnaît pas une fréquence bien précise pour chaque ton. Elle s’intéresse plutôt au rapport de fréquences entre les tons (intervalle) et essaie de construire une mélodie où les fréquences dépendent toujours de celles trouvées auparavant. Une fois que toute la mélodie est construite on peut toujours la ramener à une classification absolue afin de connaître les vrais noms des tons.

    Un problème réside dans la fait que le vecteur des fréquences a une échelle linéaire et ne présente donc pas forcément les bons rapports entres les fréquences. Toutefois une approximation est imaginable.

    Il faut faire attention de ne pas calculer toujours les intervalles entre des tons consécutifs, puisqu'une seule faute va decaler toute la suite de la mélodie. Il faut plutôt prendre un ton de référence (qui fait partie de la mélodie) et classer les intervalles entre tous les tons et ce ton de référence. Mais là aussi la mélodie reconnue dépendra du ton de référence choisi. Le meilleur résultat peut être obtenu en prenant chaque ton comme référence et en calculant pour chaque ton une mélodie. On aura ainsi autant de mélodies qu’il y a de tons dans la mélodie, et on peut simplement prendre la mélodie moyenne. Le ton de référence peut être classifié de manière absolue, comme décrit ci-dessus.

    Avec un sifflement on arrive à couvrir un peu plus que 2 octaves entre environ 500 et 3000 Hz. J’ai alors défini des fréquences reconnues sur trois octaves en partant du La4 (440 Hz). Il y a 36 tons plus la pause qui sont reconnus par le système (cf. A2).

    Lorsqu’on traite un sifflement on peut utiliser ces méthodes relativement simples. Dès qu’on essaie de reconnaître une voix ou un instrument de musique il faut utiliser des algorithmes plus sophistiqués qui prennent en compte la distribution des harmoniques. Les Modèles de Markov Cachés (Hidden Markov Models HMM, cf [1]) peuvent apporter une suppression d’erreur supplémentaire. Ces algorithmes sont expliqués dans [3] et [4].

    De même, pour un système réagissant en temps-réel, il faut évidemment utiliser des algorithmes qui sont capables de classifier les tons sans avoir connaissance de toute la mélodie (cf [3][4]).

    Après une première classification, il faut encore effectuer un filtrage puisqu’on ne trouvera jamais des tons complètement stationnaires. Par exemple, j’ai défini la durée minimale possible d’une note à 50 ms.

    4.3    Reconnaissance de la tonalité

    La connaissance de la tonalité est absolument indispensable pour l’improvisation. Si on connaît la tonalité, on sait quels tons font partie de la gamme d’improvisation. Même si on veut simplement rajouter une deuxième voix à la mélodie, il est nécessaire de connaître la tonalité. Si on parle ici de tonalité, il n’est pas forcément nécessaire de connaître la tonalité absolue et véritable. Il suffit de savoir quel est le ton principal dans la mélodie, et on peut travailler, par la suite, avec les rapports d’intervalles qui se basent sur à ce ton principal.

    Pour la reconnaissance de la tonalité il faut d’abord comparer les tons observés avec chaque gamme associée à une tonalité. On suppose donc de ne pas avoir de tons, dans la mélodie, qui ne font pas partie de la gamme. Ce critère élimine déjà la majorité des tonalités possibles. Mais s’il n’y a pas beaucoup de tons dans la mélodie, ce critère n’est pas suffisant.

    Un critère supplémentaire et très puissant est le suivant : une mélodie commencera, dans la très grande majorité des cas, ou bien avec la tonique (1er), ou bien avec la dominante (5ème) de la tonalité. Plus rarement elle commencera avec la tierce (3ème). Si quelqu’un siffle une mélodie connue ou improvise lui-même une petite mélodie, on peut supposer que ces critères seront toujours respectés. C’est dans la nature de l’être humain de sentir la musique de notre culture.

    De plus, il n’est pas très probable que quelqu’un sifflera une mélodie en mineur puisque l’être humain préfère spontanément le mode majeur qui apparaît beaucoup plus souvent, dans la vie quotidienne. On néglige donc la possibilité d’une mélodie en mineur. Le système vas interpréter chaque mélodie en majeur. La différenciation entre majeur et mineur n’est d’ailleurs pas du tout évident.

    La position des barres de mesure n’apporte pas d’information sur la tonalité.

    Actuellement, dans mon programme, une tonalité est choisie aléatoirement dans le cas où il reste trop de tonalités possibles après observation de tous ces critères.



5    Algorithme d’improvisation

    5.1    Différentes idées

    Le plus simple est de jouer la mélodie enregistrée. Elle peut être jouée dans une autre tonalité avec un certain intervalle (octave, tierce, quinte).

    Un très beau effet peut être obtenu en rajoutant une 2ème voix et en jouant la mélodie avec cette voix supplémentaire. La 2ème voix est généralement une tierce plus bas pour garder la mélodie principale au premier plan. En tous cas, à la tonique, il faut respecter un intervalle d’une quarte. Il y a d’autres cas où une tierce vas créer des dissonances et où il vaudrait mieux mettre une quarte ou une quinte. Mais les critères pour déterminer ceci sont très compliqués. (Je ne les connais pas). Actuellement, la 2ème voix a toujours les ‘note on’ (instant auquel un ton commence) au mêmes instants et la même durée des notes que la première voix. En plaçant proprement quelques appels aléatoires, on peut bien sûr affiner cette 2ème voix avec quelques variations. Ceci fait à nouveau augmenter la complexité de l’algorithme.

    On peut, bien sûr, aller plus loin et ajouter encore une 3ème voix, de la même manière.

    On peut effectuer une même variation sur chaque ton de la mélodie. Ceci pourrait être appliqué quand la mélodie consiste en des tons plutôt longs.

    Le canon donne aussi de très beaux effets. Pour ce faire, il faut connaître les barres de mesure ou savoir interpréter le rythme, tandis que la connaissance de la tonalité n’est pas très important. Mais elle peut être nécessaire pour pouvoir interpréter le rythme.

    On peut accompagner la mélodie avec des accords ou avec une simple ligne de basse. La notion de mesure devient importante, à nouveau. De plus, la détermination du degré pour chaque mesure est très difficile.

    Une improvisation plus sophistiquée est celle qui porte sur l’articulation, le timbre, les accents. Des idées et des explications sont données dans [7]. Ce genre d’improvisation nécessite une unité de génération de sons qui permet de faire ceci.

    Pour créer une suite de la mélodie, on pourrait utiliser une librairie avec des mélodies prédefinies dans la mémoire et prendre celle qui ressemble le plus à la mélodie observée. Une improvisation beaucoup plus libre peut être obtenue en utilisant une classification par module dans le sens inverse. L’algorithme prendra la mélodie sifflée comme départ. Il calcule des séquences aléatoires et compare avec les classes des motifs de la mélodie jusqu’à ce qu’il trouve une coïncidence des classes. Une introduction à ce sujet et donné dans [6]. David Cope a introduit une méthodes qui s’appelle ‘Experiments in Musical Intelligence’ (EMI) qui donne de très bons résultats. La référence à sa page web avec des échantillons sonores se trouve dans le § 10.

    Evidemment toutes ces idées peuvent être combinées et appliquées en accord avec ce qui semble le plus adapté.

    5.2    Les données exigées

    La connaissance de la tonalité est nécessaire dans tous les cas. Elle a déjà été expliqué dans le § 4.

    Dans certain cas, et pour des improvisations plus sophistiquées, la connaissance des barres de mesure et du rythme est nécessaire. Il faut donc tout d’abord déterminer la durée des notes.

    5.3    Méthodes et critères pour obtenir les données

    Détermination de la durée des notes

    Evidemment on ne peut pas accepter n’importe quelle durée. Du point de vue musical, les notes auront une durée nominale qui est une fraction de puissance de 2 (ou un multiple de cette valeur). Il faut alors effectuer une quantification temporelle, ce que je n’ai pas encore fait.

    Dans une représentation musicale, il ne faut pas tenir compte des petites pauses entre 2 tons, mais seulement des pauses qui ont une valeur minimale de la note la plus courte. La plus courte durée, dans le cas pratique, sera d’une double croche. Comme on ne connaît pas le temps (battement) à l’avance, il faut déterminer la note la plus courte et la définir comme unité. Mais on ne peut pas savoir si cette unité correspond à une noire ou à une croche ou encore à autre chose.

    5.4    Systèmes temps-réels

    Il existe déjà des systèmes qui agissent en temps-reél. Il est clair que dans ce cas, l’algorithme a besoin d’un certain nombre de données pour pouvoir se repérer (tonalité, rythme, …). Ces données, il peut les récupérer pendant les premières secondes d’un morceau, ou bien il faut les indiquer " à la main ", avant le début du morceau.

    Dans notre application aucune des deux possibilités n’est valable. Il faut évidemment éviter de demander des données avant de siffler. Et la durée d’une petite mélodie sifflée serait beaucoup trop courte pour déterminer toutes les données nécessaire. Pour ce robot, il n’est donc pas possible de réaliser un système réagissant en temps-réel avec sa réponse musicale. D’ailleurs, même un être humain ne saurait réagir dans un laps de temps si court.

    Le robot va alors capter une mélodie entière avant de commencer le traitement musicale. Sa réponse, sous les formes expliquées ci-dessus, sera renvoyée par la suite. Eventuellement, une partie, par exemple la reconnaissance des tons, pourra être effectué en temps-réel pour pouvoir commencer plus vite avec le traitement musical par la suite.

    Par contre, il faut avoir un système temps-réel qui permet de reconnaître le début et la fin d’une mélodie tout seul. Une mesure continue de l’intensité est nécessaire tout en filtrant le bruit auquel on ne s’intéresse pas.



6    Génération de sons

Pour la génération des sons, on peut ou bien prendre la hauteur des tons sous une forme quantifiée, ou bien reprendre les hauteurs qui ont été enregistrées. Celles-ci ne sont évidemment pas stationnaires.

De même, on peut effectuer une quantification au niveau temporel. Cette quantification est, dans certains cas, déjà nécessaire pour extraire les bonnes informations de la mélodie. Si on fait une telle quantisfication, il est important de rajouter des petites pauses entre les tons, du moins dans le cas où il y a répétition consécutive du même ton. On vas donc insérer des petites pauses normalisées entre tous les tons.

Dans mon programme Matlab, j’ai représenté les 2 voix dans une matrice dont la 1ère ligne représente le temps absolu des ,note on’ et les lignes suivantes représentent la hauteur des tons des différentes voix à jouer à ces instant. Cette représentation avec des vecteurs a un sens seulement si toutes les `note on’ sont toujours simultanées pour plusieurs voix.

Le standard MIDI (Musical Instrument Digital Interface) est une possibilité de contrôler directement une unité de génération de sons.

Il faut aussi se poser la question de savoir quels sons on aimerait pouvoir générer. On peut s’imaginer un simple beep (sinus), une simulation de la voix humaine ou des ‘bruits robotiques’ ...



7    Présentation des résultats

Le temps de réponse du système est de l’ordre de la durée de la mélodie. Ceci est dû au calcul des transformées de Fourier. On peut éviter ces calculs en mesurant simplement la période du signal. Ceci est possible puisque le sifflement est presque un sinus. De plus, on peut déjà effectuer certaines opérations en temps réel.

Le taux d’erreur est en dessous de 10% pour une mélodie sifflée avec une intonation assez stable. Si l'intonation n'est pas bonne (ce qui est souvent le cas), le programme n'a pas de possibilité de corriger ceci et il va reconnaître des tons faux et même un décalage de toute la mélodie à partir d'un certain instant. Par contre, il estime la tonalité de manière raisonnable. Même si la mélodie reconnue n'est pas juste, il y a des mélodies à 2 voix à la sortie qui ne sont pas désagréable à écouter. Il n'y a donc pas toujours besoin d'une reconnaissance parfaite pour obtenir des sorties acceptables.



8    Conclusion

8.1    Les performances du système

Ce projet est tout a fait valable et peut créer de beaux effet sur le robot. Même avec un programme très simple, on arrive a obtenir de très bons résultats. Il reste maintenant toute une série d’autres idées à approfondir.

La 2ème voix donne des bon résultats et certaines caractéristiques peuvent être améliorées assez facilement, tandis que pour d’autres, il faut aller chercher dans les détails. Mais le projet entier est réalisable avec des dépenses raisonnables.

Il y a beaucoup de gens qui ont développé des choses, sans forcément penser à une application telle que notre petit robot, mais ils sont des spécialiste, dans leur domaine (se référer au § 10). Il est absolument nécessaire de collaborer avec des spécialistes, pour ce projet.

8.2    Développements futurs

Il y a maintenant deux approches pour la suite : reprendre, améliorer et développer mon programme (peut-être sur une autre plate-forme que Matlab) ou bien dégrossir encore plus le sujet pour trouver d’autres idées et approches. De toute façon, ce rapport peut être un bon point de départ.

Quelques améliorations concernant mon programme :

Le programme n’est pas du tout optimisé. Pour tester des éléments dans une matrice, plusieurs passages sont effectués, alors qu'on pourrait tester plusieurs choses avec un seul passage. Des passages inutiles sont effectué quand on pourrait se restreindre à tester quelques éléments seulement.

Le système temps-réel que j’ai implémenté n’est pas vraiment en temps-réel puisqu’on enregistre pendant une durée déterminée, et on ne peut rien faire pendant ce temps). Il ne marche pas toujours correctement. Pour faire mieux il y a deux possibilités :

    1. La ‘Data Acquisition Toolbox’ qui permet d’accéder directement à la carte son. Cette toolbox devrait être disponible à l’EPFL dans les prochains jours.

    2. Ecrire un petit programme en C qui effectue la prise de son et qui passe ensuite la main à Matlab.

Un traitement d’erreur est fait, mais le programme n’est pas entièrement débogué.

Quelques améliorations générales :

Il faut aussi reconnaître les tons qui ne sont pas séparés par une courte pause, avec un passage continu d’un ton à un autre. Ceci peut être réalise avec des HMM (Hidden Markov Model) cf. [1].

Il faut tenir compte du fait qu’il peut y avoir des notes, dans la mélodie, qui ne sont pas dans la gamme de la tonalité. Surtout, il faudrait pouvoir interpréter de quels tons il s’agit dans la mélodie.

J’ai implémenté une classification relative, comme je l’ai décrite dans le § 4.2. Les résultats ne sont pas encore tout à fait satisfaisants. Il faudrait chercher des possibilités d’améliorations. S’il y a des limites à ce niveau, il faut savoir déterminer les bonnes conclusions à partir de la mélodie reconnue, pour faire une interaction originale.

Les transformées de Fourier sont à éviter puisqu’elles prennent trop de temps pour être calculée et fournissent plus d’informations que nécessaire. Il est possible de reconnaître les tons en mesurant simplement la période.

Finalement encore deux idées pour la 2ème voix :

La 2ème voix peut être plus sophistiquée, si l'on définit plusieurs intervalles possibles pour chaque tons de la gamme. Je n’ai définit qu’un seul qui est la tierce (majeur ou mineur) ou la quarte, pour la dominante. Après, on détermine à chaque instant le ton de la 2ème voix en fonction des intervalles possibles et du ton précédant de la 1ère voix ou avec des appels aléatoires. La théorie du contrepoint musical détermine des règles pour connaître les intervalles admis.

On peut aussi faire une improvisation au niveau temporel. Donc au lieu de jouer toujours un tons de la 2ème voix exactement quand il y en a un dans la 1ère, on peut faire des variations sur les tons de la 1ère voix.

8.3    Remerciements

Je tiens à remercier Hervé Bourlard pour ses explications générales concernant les méthodes de reconnaissance de la parole et pour son support, Pierre-Edouard Sottas pour m’avoir mis sur la bonne piste avec Matlab, Jean-Cédric Chappelier pour ses explications concernant la classification, Margrith Ramer pour les essais musicaux et Jean-Daniel Nicoud qui a rendu ce projet réalisable.



9    Produits sur le marché

jMax, http://www.ircam.fr/equipes/temps-reel/jmax

A graphical programming environment for interactive real-time audio applications.
 

MSP, http://www.cycling74.com/products/msp.html ou http://www.ircam.fr/produits/logiciels/log-compl/msp/index.html

MSP is a set of extensions to Opcode's Max 3.5 environment that let you do real-time synthesis and signal processing with your PowerPC Mac OS computer. Just as Max is an erector set for MIDIand multimedia, MSP is an erector set for audio, consisting of over 75 objects that synthesize, process, analyze, delay, and generally mess around with audio signals in real-time. If you've tried to learn sound synthesis and DSP languages and come away baffled, MSP is for you. Using MSP is more like tweaking than programming, yet its elegant graphical representations of synthesis and signal processing algorithms are transformed into remarkably efficient DSP code. MSP is appropriate for sound designers, educators, researchers, and musicians who want to develop interactive performance instruments. Since you can use the free Runtime Version to distribute pieces you make, MSP can be a medium for composers who want complete control over the sonic environment.
 

Band-in-a-Box, http://www.pgmusic.com/products.htm

Band-in-a-Box est un logiciel distribué par PG Music disponible pour WINDOWS et Macintosh.

Intelligent music accompaniment software for your MIDI music system or PC sound card. The award-winning Band-in-a-Box is so easy to use! Just type in the chords for any song using standard chord symbols (C, Fm7, C13b9), choose the style you would like, and Band-in-a-Box does the rest.

Band-in-a-Box Pro Version 8 : $88
Band-in-a-Box MegaPAK Version 8 : $249
 

Whistler Composer, http://member.aol.com/WhistlerAG

Das Programm Whistler Composer ermöglicht es Ihnen durch das Pfeifen einer Melodie die Soundkarte ihres Computers zu steuern und dadurch die selbe Melodie im Klang eines Klaviers, einer Geige, einer Gitarre, einer Trompete oder eines beliebigen anderen Musikinstrumentes abspielen zu lassen. Damit kann man ohne je ein Instrument gelernt zu haben, jedes beliebige Musikinstrument auf Anhieb spielen, sofern man nur pfeifen kann. Die Melodie wird darüber hinaus als MIDI-Sequenz aufgezeichnet und kann so gespeichert, editiert und zum Steuern von Synthesizern weiter verwendet werden.

J’ai testé ce programme et je constate que les performances sont insuffisantes. Le taux d’erreur de reconnaissance des tons est beaucoup trop élevé. De même ce logiciel effectue une quantification temporelle trop imprécise et pas assez fine.
 

Symmetrica, http://bedvgm.kfunigraz.ac.at:8001/frib/index_16.html

This program system is devoted to the linear representation theory, the invariant theory and the combinatorics of finite symmetric groups and related classes of groups. Symmetrica is a scientific software covering algorithms of group theory and combinatorial enumeration. It has been used to calculate classes of musical motifs.
 

Speetch pitch controller kit, http://www.qkits.com/serv/searchengines/lp58.asp

The MSM6322 is a real time audio pitch controller designed for speech. Sounds can be created by using the up/down modes and distorting the input signal, producing stunning audio effect.
 

MIDI voice harmoniser, http://www.clubi.ie/tomscarff/page6.htm

Ever wanted to be in perfect harmony with yourself? Well from a singing point of view this unit allows you to achieve that goal. A voice harmoniser converts the pitch of your voice to another musically related pitch so that when the two voices are combined they produce perfect vocal harmony (assuming your input voice was 'perfect' in the first place!). This unit has the limitation that only one pitch shifted voice harmony appears at the output.
 

Sweet MIDI Harmony Maker, http://www.ronimusic.com/swmiharm.htm

Enhance the sound of notes played on your MIDI keyboard with Sweet MIDI Harmony Maker. This software-based version of an intelligent pitch-shifter gives you three objects which will harmonise any MIDI notes that plays through it, according to desired settings. Select a desired scale type, derivation of the selected scale, and key; decide what to do with the non-harmonic notes; and pick how many steps from the original note the first added note will be, and if desired, change the velocity for the new note.



10    Contacts

Par la suite sont présentés les noms est coordonnées d’instituts et de personnes qui font des recherches en rapport avec ce projet. Certains ont été contactés.

Instituts et personnes de contact

Les personnes marquées d’une * ont été contactées et sont au courant du projet.
 

IRCAM (Institut de Recherche et Coordination Acoustique/Musique)

www.ircam.fr

Département de Recherche

Equipe Analyse/Synthèse
* Xavier Rodet xavier.rodet@ircam.fr

Equipe Systèmes Temps Réel
* François Déchelle francois.dechelle@ircam.fr
jMax

Département de Pédagogie
* Mikhail Malt mikhail.malt@ircam.fr


IDIAP (Institut Dalle Molle d’Intelligence Artificielle Perceptive)

www.idiap.ch

* Hervé Bourlard bourlard@idiap.ch

Reconnaissance de la parole


Elektronisches Studio Basel

www.unibas.ch/mab/musihs/elek_stu.htm

* Wolfgang Heiniger heiniger@ubaclu.unibas.ch, elekstudio@ubaclu.unibas.ch


CMJ (Computer Music Journal)

http://www-mitpress.mit.edu/e-journals/Computer-Music-Journal/CMJ.html

* Stephen Travis Pope stp@create.ucsb.edu


IEEE (Institute of Electrical and Electronics Engineers)

http://www.ieee.org


ICASSP (International Conference on Acoustics, Speech, and Signal Processing)

http://icassp99.asu.edu/index.html


ICMA (International Computer Music Association)

http://music.dartmouth.edu/~icma/icma.html


ICMC (International Computer Music Conference)

INA (Institut National de l’Audiovisuel, France)

http://www.ina.fr


SZCM (Schweizerisches Zentrum für Computermusik)

http://www.computermusic.ch/index.html


IFM (Institute for Fundamental Research in Music, Universität Zürich)

http://www.ifi.unizh.ch/groups/mml/musicmedia/ifm/main.html

Prof. Dr. Guerino Mazzola guerino@mazzola.ch

http://www.ifi.unizh.ch/groups/mml/musicmedia/ifm/projekte/main.html

Jazz pianist, Mathematical Music Theory (MaMuTh), Computer Musicology


NICI (Nijmegen Institute for Cognition and Information)

http://www.nici.kun.nl/

Music Mind Machine

http://www.nici.kun.nl/mmm/


Personnes de contact

* Matt Ingalls mingalls@concentric.net

http://www.concentric.net/~Mingalls

Improviseur ‘virtuel’ et Musique électronique expérimentale en live

Informaticien et musicien


* Hans Straub straub@datacomm.ch

http://www.datacomm.ch/straub/mamuth/index.html

Mathematical Music Theory (MaMuTh) et Composition Algorithmique

Echantillons sonores :

http://www.datacomm.ch/straub/mamuth/diplarb.eng/appl.html


Henning Berg

http://www.goddard.edu/kalvos/berghen.html

Jazz trombonist

The idea of transferring his experience in duo playing to a situation where man and machine improvise together was his motivation to learn programming and to start developing the interactive computer program "Tango". In 1992 it was published by a big music software company, and Henning Berg and other musicians used it in concerts in Germany and abroad.

Telephone: +49 221-5502648
Fax: +49 221-9553142
Physical mail: Försterstraße 25, D-50825 Köln


David Cope

http://arts.ucsc.edu/faculty/cope/home

Experiments in Musical Intelligence (EMI)

Echantillons sonores : http://arts.ucsc.edu/faculty/cope/songs


Bruce L Jacob blj@eng.umd.edu

http://www.ee.umd.edu/~blj/algorithmic_composition/

Algorithmic Composition for Acoustic Instruments


Jeremy Leach jeremyleach@rocketmail.com

http://www.bath.ac.uk/~mapjll/algo-comp.html
(actuellement pas accéssible)

Algorithmic Composition


Richard Wesley Todd rwtodd@aol.com

http://hometown.aol.com/rwtodd/index.html

Computer Music Composition Research


Chaos Computer Composed Music

http://people.delphi.com/dd555/chaos.html


Listes de liens sur internet

http://capella.dur.ac.uk/doug/res_site.html

http://www.axnet.it/slap/slap/link.html


Newsgroups

comp.music.research

rec.music.theory
 



Bibliographie

    [1]    Hervé Bourlard, Introduction à la reconnaissance de la parole et du locuteur, IDIAP-RR 98-13, Martigny, 1998
    [2]    Fausto Pellandini, Signaux et systèmes I, II, EPF Lausanne, 1998
    [3]    Boris Doval & Xavier Rodet, Estimation of fundamental frequency of musical sound signals, IEEE - ICASSP, Toronto, 1991, pp. 3657-3660
    [4]    Boris Doval & Xavier Rodet, Fundamental frequency estimation and tracking using maximum likelihood harmonic matching and HMMs, IEEE - ICASSP, Minneapolis, 1993, pp. 221–224
    [5]    Hermann Grabner, Allgemeine Musiklehre, Bärenreiter-Verlag, Kassel, 1963
    [6]    Hans Straub, Contributions to module-theoretic classification of musical motifs, Diploma work, ETH Zürich, 1989, revised 1998, http://www.datacomm.ch/straub/mamuth/thesis_e.html
    [7]    Robert Willey, Algorithmic Improvisation: The Primacy of NOW, National University, San Diego, 1995, http://www-crca.ucsd.edu/~bobw/alg_imp.html
    [8]    Guerino Mazzola, Geometrie der Töne, Birkhäuser Verlag, Basel, 1990, ISBN 3-7643-2353-1
    [9]    Requiem for the soul, New Scientist, Vol. 155 No. 2094, London, 9 August 1997, http://newscientist.com/ns/970809/features.html
    [10]    Jeremy Leach, Towards a Universal Algorithmic System for Composition of Music and Audio-Visual Works, Proceedings of ICMC'96, Hong Kong, 1996, pp. 320-323, http://www.bath.ac.uk/~mapjll/paper7.html (ce document n'est pas accessible actuellement)



    13.9.1999, Patrick Ramer