Application d`un pattern rythmique sur le jeu d`un guitariste en
Transcription
Application d`un pattern rythmique sur le jeu d`un guitariste en
PROJET DE L’ATELIER MUSIQUE ET OUTILS INFORMATIQUES Dispensé par Anne Sedes Application d’un pattern rythmique sur le jeu d’un guitariste en utilisant une Wiimote. Mickaël Le Goff ATIAM 08/09 SOMMAIRE I. Introduction .................................................................................................... 3 II. La Wiimote en tant que capteur .............................................................. 3 1. Présentation de la Wiimote ........................................................................... 3 2. Connexion entre une Wiimote et un ordinateur .......................................... 4 3. Routage des informations............................................................................. 5 a. Programmation JAVA .......................................................................................................... 5 b. Utilisation de GlovePie ........................................................................................................ 6 Réalisation du projet................................................................................ 6 III. 1. Présentation du projet................................................................................... 6 2. Choix du signal exploitable........................................................................... 7 3. Création du patch PureData.......................................................................... 8 4. a. Gestion du problème de latence......................................................................................... 8 b. Description des éléments du patch ................................................................................... 9 c. Résultats obtenus .............................................................................................................. 12 Améliorations possibles ............................................................................. 13 IV. Conclusion ................................................................................................ 13 V. Liste des liens Internet ............................................................................. 14 2 I. Introduction : Etant guitariste et passionné de jazz, j’ai voulu créer un système permettant de sortir un pattern rythmique se calant directement sur les accords joués. Il a donc fallu trouver un capteur permettant de me donner un signal évoluant de la même manière que celui de la main qui gratte les cordes. Pour ne pas être dérangé par des fils limitants les déplacements du guitariste, j’ai opté pour la Wiimote en tant que capteur sans fils. Je décrirais le fonctionnement de cette manette de jeux vidéo, dont l’utilisation de base a été détournée, dans ce rapport. Ce document va donc présenter, étape par étape, l’évolution de ce projet ainsi qu’une ouverture sur les évolutions possibles de ce système afin de l’améliorer. Enfin, une conclusion viendra clore ce rapport. II. La Wiimote en tant que capteur : 1. Présentation de la Wiimote : La Wiimote (contraction de Wii et de remote) est le nom donné au contrôleur de la console de jeux vidéo « Wii » créée en 2006 par la firme japonaise Nintendo©. Cette manette à l’avantage d’être sans fil, communiquant avec la console via la technologie Bluetooth sur une distance pouvant aller jusqu’à dix mètres. Elle est équipée d’une caméra infra rouge pouvant détecter jusqu’à 4 sources lumineuse en même temps (pour une utilisation en tant que pointeur) ainsi que de trois accéléromètres qui détectent les mouvements sur les axes (Ox, Oy et Oz) avec une force s’étendant à plus ou moins 3g. Les données fournies par ces accéléromètres permettent de détecter des mouvements de l’utilisateur dans l’espace tels que : la rotation, la torsion, parcours haut-bas, avant-arrière, gauche-droite (et inversement). Elle est également dotée de onze boutons poussoirs permettant des contrôles supplémentaires. Figure 1 : Différentes vues de la Wiimote 3 Lorsque l’on se sert d’un capteur, il est nécessaire de connaître sa réponse en fonction des variations de ce que l’on mesure. Ces informations n’étant pas données par le constructeur, je me suis donc intéressé à des travaux effectués par le Laboratoire d’Ingénierie des Systèmes Automatisés (LISA) de l’université d’Angers. Ils ont utilisé la Wiimote pour des expériences mécaniques et ont trouvé que les capteurs évoluaient, pour les axes Ox et Oy, selon les équations suivantes : Sur Ox : v2 − g * cos(α ) − R Sur Oy : − g * sin(α ) + dv dt Pour obtenir ces équations, ils se sont servis de la Wiimote comme pendule avec v qui correspond à la vitesse de déplacement de la manette, α est l’angle que fait le pendule avec la verticale et R la longueur du fil du pendule. Nous verrons par la suite que dans l’utilisation dont nous allons faire de la Wiimote, le mouvement de celle-ci s’apparentera à celui d’un pendule. Il est intéressant de remarquer que les variations des accéléromètres en fonction de la vitesse de déplacement de la manette ne sont pas linéaires et donc les données fournies sont plus difficiles à traiter. 2. Connexion entre une Wiimote et un ordinateur : La première étape dans l’utilisation d’une Wiimote comme capteur est de pouvoir connecter celle-ci avec un ordinateur afin de pouvoir récupérer les différentes informations utiles. Pour se faire, il suffit de disposer d’un récepteur Bluetooth sur son ordinateur (ou bien connecter une clé USB récepteur Bluetooth) ainsi que le logiciel BlueSoleil. BlueSoleil détecte et gère les périphériques Bluetooth à proximité du récepteur. C’est un logiciel payant mais les limitations de la version de démonstration ne gênent en aucun cas l’utilisation dont nous allons en faire. Le téléchargement du programme se fait via le site (1). Une fois le logiciel installé, il suffit d’un double clic, sur le soleil représenté au milieu de l’interface, pour qu’il détecte tous les dispositifs Bluetooth. Pour que le logiciel détecte la Wiimote, il faut rester appuyé simultanément sur les boutons marqués « 1 » et « 2 ». Un icône en forme de joystick avec une ID portant le nom de Nintendo va apparaître. Une seconde étape consiste à se connecter avec l’ordinateur. Pour cela il faut cliquer une première fois sur l’icône de la Wiimote (joystick) puis un double clic sur l’icône en forme de souris en haut de l’interface va connecter la Wiimote avec l’ordinateur (un lien va apparaître entre le soleil et le dispositif). Pour que le lien se crée, il faut de nouveau appuyer sur les touches citées précédemment. Lorsque le lien apparaît, nous pouvons débuter la partie qui consiste à récupérer les valeurs des différents capteurs. 4 Icône pour connecter le dispositif Soleil utilisé pour la détection des périphériques Icône de la Wiimote après détection Liaison indiquant que le dispositif est connecté Figure 2 : Interface utilisateur de BlueSoleil 3. Routage des informations : Lorsque nous avons connecté la Wiimote à l’ordinateur, il faut désormais trouver un moyen d’accéder aux informations des capteurs. Pour cela j’ai eu deux approches différentes que je vais vous décrire. a. Programmation JAVA : Ayant des bases dans ce langage de programmation et ayant trouvé des librairies spécialement faites pour la gestion d’une Wiimote, j’ai décidé dans un premier temps d’utiliser le JAVA pour réaliser mon projet. Ce langage de programmation présente plusieurs avantages. Premièrement il est multi-plateforme, c'est-à-dire qu’une fois réalisé, le programme peut fonctionner aussi bien sur Windows, Linux ou Mac. Deuxièmement, il dispose d’une librairie d’origine (java.sound) permettant de gérer de l’audio au format wave ainsi que tout ce qui concerne les messages Midi. L’API (librairie) utilisée pour pouvoir gérer la Wiimote est appelée MoteJ et elle est téléchargeable sur le lien (2). Pour pouvoir l’utiliser il faut également intégrer les librairies commons.apache et BlueCove dans le projet JAVA (disponibles sur (3) et (4)). Cet ensemble permet normalement de pouvoir récupérer toutes les informations envoyées en Bluetooth à l’ordinateur. Cependant, plusieurs difficultés rencontrées lors de la mise en place du programme m’ont contraint à abandonner et à opter pour une autre solution, l’utilisation du logiciel GlovePie. 5 b. Utilisation de GlovePie : GlovePie est un logiciel gratuit (5) qui a été développé par Carl Kenner. Ce logiciel est un astucieux programme qui est couramment utilisé dans l'univers du jeu vidéo pour diriger des informations d'un périphérique (clavier, joystick, autre...) vers un jeu, en simulant un autre type de périphérique. Il est entre autre doté de fonction gérant les informations Midi ainsi que celles de la Wiimote. Ainsi, lorsqu’une Wiimote est connectée via BlueSoleil à l’ordinateur, le langage de programmation extrêmement simple de GlovePie permet de récupérer puis de router les données des capteurs. Par exemple, prenons la ligne de code suivante : midi.c3= wiimote1.A Cette simple ligne de code permet d’envoyer une NoteOn sur la note Midi C3 (Do 3) lors d’un appui sur le bouton A de la Wiimote et une NoteOff lorsqu’on relâche le bouton. GlovePie peut gérer jusqu’à 8 Wiimote simultanément, dans ce cas, il faut indiquer dans le script le numéro de chaque Wiimote (soit wiimote‘i’ pour la manette i). Pour connaître toutes les données accessibles de la manette, il suffit de taper « wiimote » puis lorsque l’on tape un point « . », une liste apparait avec toutes les variables du contrôleur. Enfin pour pouvoir router les informations dans d’autres logiciels, j’ai converti toutes les valeurs reçues en CC Midi que j’envoie dans le logiciel MidiYoke. Ce logiciel (6) est un pilote de périphérique virtuel qui rend de grands services. Il permet de réinjecter les messages Midi sortants d'un logiciel vers l'entrée d'un autre. En clair, il donne la possibilité d'interfacer deux logiciels Midi, même s'il ne sont pas initialement prévus pour être couplés. Ainsi j’ai pu récupérer et envoyer les informations de la Wiimote dans le logiciel PureData afin de faire mon projet que je vais vous décrire. III.Réalisation du projet : 1. Présentation du projet : Le projet réalisé est basé sur l’application d’un pattern rythmique qui se cale sur le jeu d’un guitariste. Il a été spécialement conçu pour pouvoir caler, sur une série d’accord plaqués sur chaque temps, la rythmique de jazz « Chabada » jouée normalement par le batteur, principalement sur la ride ou aux balais. Cette rythmique ajoute du swing à la musique. Voici le pattern, au format Midi, qui va se répéter lors du jeu du guitariste. Figure 3 : Pattern rythmique « Chabada » 6 Je me suis donc servi de la Wiimote pour pouvoir capter les mouvements de la main (ou plutôt de l’avant bras) du guitariste puis j’ai créé un patch sous PureData afin de créer et caler les samples de batterie sur la guitare rythmique. Je vais donc vous expliquer les étapes de création de mon patch. 2. Choix du signal exploitable : Avant de commencer à créer le patch, il a fallu trouver quel était le signal qui se comportait comme les mouvements du guitariste. Sachant qu’il y a un accord plaqué sur chaque temps, j’espérais pouvoir trouver un signal périodique, de période égale au tempo du morceau. J’ai donc créé un premier patch PureData sur lequel je recevais et affichais dans un graphique (évolution des données en fonction du temps) les données des accéléromètres sur les 3 axes. Voici le script GlovePie qui me permettait d’envoyer chaque donnée des accéléromètres sur différents canaux Midi (ici 100, 101, et 102) : midi.channel1.ByteControl100 = wiimote1.RawForceX/25 midi.channel1.ByteControl101 = wiimote1.RawForceY/25 midi.channel1.ByteControl102 = wiimote1.RawForceZ/25 Finalement après plusieurs essais de positionnement de la Wiimote sur l’avant bras ainsi que la visualisation des courbes sur PureData, j’en suis venu à la conclusion que le signal le plus représentatif des mouvements du guitariste se trouvaient sur l’axe Oy avec la Wiimote positionnée sur l’avant bras comme sur la figure suivante. Figure 4 : position de la Wiimote sur l’avant-bras En fixant la Wiimote de la sorte, j’ai réussi à obtenir un signal relativement périodique lors du jeu des accords. Les valeurs données par l’accéléromètre de l’axe Oy sont proches de zéro lorsque le bras du guitariste est positionné comme sur la figure 4. Lorsqu’il va descendre son bras, les valeurs vont augmenter, sans pour autant atteindre la valeur maximale (127) quand le bras est à son plus grand angle d’inclinaison. Nous pouvons voir sur la figure 5, l’évolution des données du capteurs en fonction du temps lorsque quelqu’un joue. 7 Figure 5 : Evolution de l’accéléromètre Oy lors du jeu du guitariste Maintenant que nous avons décidé sur quel signal il était intéressant de travailler il a fallu mettre en place le patch PureData qui allait ordonnancer les samples de batterie dans le temps. 3. Création du patch PureData : a. Gestion du problème de latence : Sur le pattern rythmique que l’on désire réaliser, on s’aperçoit qu’il y a un coup de ride sur chaque temps. Une première idée consisterait donc à envoyer le sample à partir du moment ou la valeur du capteur a dépassé une certaine valeur seuil. Cependant, si l’on réalise le système de la sorte, les résultats obtenus seront très mauvais à cause des problèmes de latence. On entendra donc le sample légèrement décalé par rapport au son de la guitare ce qui rend très difficile le jeu du guitariste et une impression de décalage constant désagréable à l’oreille des auditeurs. L’option que j’ai utilisée consiste à détecter le premier accord (au temps t1), puis le deuxième (au temps t2) et enfin déclencher l’envoi du sample avec un delay égal à la différence entre les deux temps (t2-t1). Ainsi, en faisant l’hypothèse que le guitariste ne va pas trop varier de tempo au cours du temps, le sample arrivera au niveau du troisième accord. Enfin, on répète ce mécanisme entre le deuxième et le troisième accord pour lancer le sample sur le quatrième accord et ainsi de suite pour obtenir un sample sur chaque accord joué. En utilisant ce principe, on peut s’affranchir des problèmes de latence en déduisant du temps de delay affecté à l’envoi d’un sample, le temps de latence observé. Il subsiste un inconvénient lié à ce système qui est le fait que la batterie part seulement à partir du troisième accord et se finit un temps après l’arrêt de jeu du guitariste. Cependant, ceci est nettement moins problématique que si l’on entendait tous les samples décalés du tempo de la guitare. 8 b. Description des éléments du patch : Premièrement je récupère les informations Midi correspondant à celles de Ce bloc va récupérer les données l’accéléromètre Oy grâce au bloc : affectées au contrôle 101 dans MidiYoke (envoyées via GlovePie). Ces valeurs sont envoyées dans un premier bloc que j’ai appelé « Trigger ». Il a pour but d’envoyer un seul bang sur chaque front montant du signal dépassant une valeur seuil que l’utilisateur peut choisir. En effet, selon le type de jeu de chacun, le seuil nécessaire au déclenchement peut varier. Voici le patch réalisé : Figure 6 : patch du Trigger La sortie du Trigger passe ensuite dans un bloc « Switch » qui va sortir un bang en alternance entre ses deux sorties. Sachant que le bloc Trigger nous donne un bang à chaque plaquage d’accord, on peut dire que les bangs sortant sur la partie gauche sont les accords de numéro impair (le premier, le troisième…) et sur la droite, les accords de chiffre pair (le deuxième, le quatrième…). 9 Figure 7 : patch du Switch En utilisant le bloc timer pour mesurer l’écart temporel entre 2 bang il faut faire une sorte d’initialisation du système au niveau du tout premier bang puis basculer sur un système qui pourra tourner sur chaque bang. Voici un schéma qui décrit le système : Figure 8 : système des timers On s’aperçoit bien que seul le premier bang possède une seule connexion, les autres étant raccordés de la même manière aux autres timers. J’ai donc créé un patch init_t1 qui va envoyer sur sa sortie de gauche le premier bang puis tout les autres sur sa sortie de droite. Figure 8 : patch de init_t1 10 Finalement, j’effectue la gestion des timers dans le patch WiiDrums, qui va déclencher les samples de la même manière que la rythmique présentée en figure 3. J’alterne donc entre un premier envoi d’un sample puis au coup d’après l’envoie de deux samples avec le deuxième sample ayant un delay équivalent à 0.75 fois le delay du premier sample. Ainsi on obtient le « Chabada » jazzy en boucle tant que le guitariste joue ses accords. C’est également dans ce patch qu’est géré la compensation de la latence du système. Voici le patch WiiDrums qui incorpore tous les autres sous-patchs. Figure 9 : patch de WiiDrums 11 Afin que l’utilisation de ce programme soit plus conviviale, j’ai créé un patch sur lequel on retrouve toute une série de paramètres de réglage du système tel que la valeur de latence, la valeur du tempo en BPM, le seuil de déclenchement ainsi que le bang général servant à initialiser le programme (« rosace de la guitare »). Pour réaliser le patch sans avoir à me servir de la Wiimote en permanence, j’ai créé un signal en forme de dent de scie (tableau SawTooth) de telle sorte à me générer un signal de test. Un slider vertical permet de gérer la durée des périodes du signal. Si le signal test est en marche, il n’est pas possible de se servir du système avec une Wiimote. Dans ce cas, il faut appuyer sur le message stop et le contrôle revient à celui de la manette. Figure 10 : interface de control du système c. Résultats obtenus : Un essai a été réalisé et enregistré sous le nom « guitar_and_swing.wave ». Les résultats obtenus sont très proches de ce qui était attendu. On s’aperçoit que la batterie se met en marche dès le troisième accord et s’arrête un temps après le dernier accord joué. Le système réalisé est assez stable pour être utilisé musicalement. Cependant, la partie la plus difficile à obtenir, est un signal propre en sortie de la Wiimote ce qui oblige le guitariste à jouer en accentuant le mouvement de l’avant bras plutôt que celui du poignet ce qui impose une autre technique de jeu. 12 4. Améliorations possibles : Actuellement le patch sort un pattern rythmique qui se répète tous les deux temps d’une mesure avec seulement deux samples de ride différents. Ceci amène une répétition très monotone qui peut être agaçante sur la totalité d’un morceau. Je propose donc deux solutions pour remédier à ce problème : • Lors du mouvement du guitariste, l’accéléromètre de l’axe Oz n’est pas censé être sollicité. Nos mouvements n’étant pas parfaits, il y aura toujours une sorte de bruit résiduel (autour de 0) renvoyé par se capteur. PureData permet de gérer la vitesse de lecture des samples wave en changeant la fréquence d’échantillonnage. En faisant varier cette fréquence très légèrement en fonction du bruit du capteur, il sera possible de changer le timbre des samples. Tant que ceci n’est pas trop violent, un effet plus naturel va se faire en ayant chaque son de sample vaguement différent d’un autre. • Le pattern rythmique créé par le patch est le rythme de jazz « Chabada » à son niveau le plus basique. Lors de l’écoute d’un morceau de jazz, on s’aperçoit que le batteur laisse libre cours à son imagination pour trouver toute sorte de variations à partir de la rythmique de base. Il serait donc intéressant d’étudier et d’incorporer dans le patch toute une série de patterns alternatifs à celui de base et dont l’envoi se fera ou au hasard ou avec des règles à spécifier (par exemple, on pourrait ajouter un coup de caisse claire sur le deuxième temps et demi d’une mesure à 4 temps). Une autre avancée dans ce projet consisterait à mémoriser des patterns rythmiques de style de musiques différentes et d’utiliser la dizaine de boutons présents sur la Wiimote. Ainsi, le guitariste n’aura qu’un bouton à appuyer pour changer de style rythmique. Ce système pourrait très bien marcher avec une musique de type reggae ou les « skanks » (accords brefs) sont placés sur les temps 2 et 4 de la mesure, redonnant un signal périodique à la sortie de la Wiimote. Par contre, il sera beaucoup plus difficile à mettre en place pour de la musique de type funk dans lesquelles le guitariste joue ses accords de façon très syncopée. IV. Conclusion : Nous venons de voir dans ce projet un moyen de récupérer les mouvements d’un guitariste afin de pouvoir caler une rythmique de batterie sur son jeu et ceci en temps réel. Le capteur utilisé, la manette Wiimote, permet d’obtenir un grand nombre d’indications de mouvements ce qui peut être très intéressant pour des travaux de composition, mélangeant gestuelle et création musicale. Durant ce projet, j’ai également découvert les capacités du logiciel PureData que je ne connaissais pas et qui m’a énormément étonné sur ses capacités de création à partir d’éléments de très bas niveau. La prochaine étape de mon travail se portera donc sur la mise en place des améliorations citées précédemment afin de rendre à mon système, une impression moins synthétique. 13 V. Liste des liens Internet : (1) http://www.bluesoleil.com (2) http://motej.sourceforge.net/download.html (3) http://commons.apache.org/downloads/download_logging.cgi (4) http://code.google.com/p/bluecove/ (5) http://carl.kenner.googlepages.com/glovepie_download (6) http://www.midiox.com/index.htm?http://www.midiox.com/myoke.htm 14