MOVE your MUSIC project : using Movuino as a musical tool
L'objectif de notre troisième et dernier projet était de rendre accessible la création musicale à tous, y compris handicapés, ainsi que la modification des sons via l'utilisation simple du mouvement du corps. Pour cela, nous avons utilisé la plateforme Movuino, un type d'interface Arduino spécialisée dans la détection du mouvement par l'acquisition de données d'accéleration et de gyroscope.
Voici ci-dessous un journal de bord décrivant l'aventure de notre projet.
Séance du 21/10/2016
Dans une démarche DIY de notre projet, nous avons non seulement cherché à créer un objet à la fois scientifique et artistique mais également à s’interroger sur la nature de la création en elle-même. Avec cet objectif, il était donc nécessaire pour nous de documenter aussi bien le processus de construction et d’expérimentation que la nature même des composants et des programmes. Ce qui suit cette introduction en matière est donc le fruit de notre questionnement sur le fonctionnement de ceux-ci et comment leur interaction amène à la production d’un module Arduino/Movuino à sortie musicale.
“Le Movuino est un petit objet de recherche à bas prix et à de multiples usages. Il capture les mouvement du porteur et a été utilisé par des vétérinaires, des sportifs, des écoles” selon Romain François-Marsal, designer et videomaker chez Yupeach, collectif de designers français (1).
Aujourd’hui nous avons commencé à prendre en main le logiciel Pure Data en suivant une vidéo tutorielle sur Youtube. Nous avons réussi à produire nos premiers sons.
Séance du 03/11/2016
Analyse des codes depuis la librairie Movuino_Wifi (2) proposée par Adrien Husson (appartenant au Mobile Lab du CRI) :
- Code Main.py (introduit des fonctions et des variables et permet de mettre en place un IP pour une communication entre python et PureData, permet aussi de mettre en place des fonctions “écoute” qui interviennent dans le transfert d’informations vers PureData, initialise la DataCollection, met en place la régulation de la vitesse de transmission d’info, définit tous les valeurs d’accéleromètre et de gyroscope).
→ Ouverture de la communication avec Movuino
→ Récupération des données
→ Déclaration du client (ip, port)
→ Possible de réguler la vitesse de transmission d’informations
- Code Movuino_streamer (met en place la collecte de données envoyées par le Movuino, filtrage des données et envoi vers Python ...).
→ Définition d’une boucle Data Streamer :
→ Vérification de la connexion du Movuino
→ Réception données
→ Tri
→ Classification
→ Vérification du format
→ Définition d’une fonction start_newCollection permettant de réinitialiser les données à chaque nouvelle utilisation.
→ Définition d’une fonction get_dataCollection(self) permettant de sortir les données triées.
Le code contient une section MAIN appelé par Main.py lorsque exécuté.
- Code PureData_OSC.pd (permet de vérifier l’IP, le port, dépaquetage des données sortantes d’OSC, récupération des valeurs d’accéléromètre, gyroscope, magnétomètre en x, y et z et sortie du code sous un nouveau format).
- Code OSC_communication.py (permet d’envoyer les données à PureData : adresse + valeur)
Le code contient une section MAIN appelée par Main.py lorsque exécuté.
À savoir : Un serveur reçoit des données alors qu’un client va les envoyer.
Séance du 10/11/2016
Passage en revue des codes Main.py, Movuino_streamer et OSC_communication.py avec Adrien (voir schéma “La communication entre Movuino et les interfaces de programmation”).
Premier test de récolte des données par Python puis PureData :
- Envoi du code Movuino_WifiFirmware.ino sur la plateforme Movuino : connecter l’ordinateur à une connection wifi stable, renseigner le mot de passe, l’IP, le port (voir schéma “IP et port de communication entre Python et PureData”).
- Exécution du code Main.py sur la console Python.
Introduction au code PureData_OSC.pd avec Adrien Husson
→ Test de connection Movuino - Python … c’est un succès ! Il manque cependant quelques données d’accélération et de gyroscope, nous ne tiendront pas compte des valeurs de magnétoscope pour le reste de notre projet.
→ Tentative de connection Movuino - Python - PureData … c’est un échec ! Il semble y avoir un problème de communication entre Python et PureData.
Séance du 16/11/2016
Second test de connection entre Movuino et Python :
- Générer sur Arduino le code Movuino_WifiFirmware.ino (comme précédemment, voir image ci-dessous)
- Transfert sur le Movuino (voir procédure de la séance précédente)
- Exécution du code Main.py sur la console Python et récolte des données (cette fois-ci en totalité avec toutes les données d’accélération + gyroscope), voir ci-dessous
Séance du 17/11/2016
Connection Movuino - Python - PureData extended (nouvelle version que nous avons installé). Ci-dessous, le code PureData_OSC.pd qui reçoit les données envoyées par Python.
Notre objectif est maintenant d'importer des samples musicaux sur Pure Data sur lesquels nous allons agir en faisant varier les paramètres d'accélération et de gyroscope grâce au Movuino.
Séance du 24/11/2016
Réalisation d'un petit tutoriel pour l'utilisation du logiciel PureData extended (nouvelle version de PureData que nous avons téléchargé) et la description de l'avancement de notre projet qu'est le suivant :
Avec PureData, vous pouvez jouer avec les données envoyées par Python et donc indirectement par le Movuino et ainsi le relier à un échantillon sonore.
Ce qui est intéressant c’est qu’avec ce logiciel vous pouvez régler les paramètres pour qu’une direction (x,y,z) change le volume d’une musique par exemple ! Voici un petit tutoriel pour comprendre comment utiliser ce logiciel pour soit changer le volume en bougeant, soit jouer sur l’amplitude.
Tout d’abord, voici les différents types d’objets qui vous serez utile pour comprendre les codes.
- Un objet (ctrl+1) sert à écrire une fonction. Sur l’exemple ci-dessous, la fonction osc~ permet de créer un oscillateur de fréquence 440 Hz. Le “~” indique qu’il s’agit d’un son et les coins violets permettent de connecter un objet son à un autre. Sans “~”, les marques sont blanches.
2. Un nombre (ctrl+2) est une fonction qui va permettre de lire et d’afficher les données sous formes de chiffres. Par défaut un 0 est affiché mais dès qu’on le lie à une fonction, elle va changer sa valeur pour afficher les résultats. Par exemple, si vous ne connectez rien à cette fonction mais que vous cliquez dessus et glissez la souris de haut en bas, la valeur dans la boite va augmenter ou diminuer.
3. Si vous créez un objet nommé “bng”, cela va créer ce qu’on appelle un “bang”. Cet outil permet, lorsque l’on clique dessus, d’activer la fonction à laquelle il est relié.
4. Si vous créez un objet nommé knob, cela va créer un modulateur d’amplitude.
5. Pour trouver d’autres objets, cliquez sur l’onglet ajouter !
La première étape est de créer une fonction permettant d’ouvrir un fichier audio. Pour cela, reproduisez le schéma suivant ou suivez le lien :
Maintenant pour modifier le volume sonore, on peut ajouter une glissière verticale (ici en bleue). Reproduisez le schéma suivant ou cliquez ici :
Un autre paramètre que l’on peut faire varier est l’amplitude. Si le volume joue déjà sur l’amplitude en le diminuant ou en l’augmentant, il existe un module qui permet de faire varier à une certaine fréquence cette amplitude de sorte qu’elle diminue puis augmente en boucle. De plus, on peut accélérer cette modification de l’amplitude.
Pour cela reproduisez le schéma suivant ou cliquez ici :
Maintenant nous allons connecter ces différents paramètres aux données issues du Movuino. Suivez les instructions décrites précédemment pour vous assurez que le Movuino envoie ces données à PureData. Il existe des tonnes de combinaisons possibles mais voici un exemple pour bien comprendre comment relier votre code PureData aux données du Movuino. Ici, on cherche à relier le volume aux données issus de l’accélération selon l’axe z et à relier le modulateur d’amplitude à l’axe y de l’accélération.
Il est possible de combiner plusieurs fichiers audio, de connecter à différentes données les différents modulateurs et aussi de lier à une enceinte un fichier audio en particulier, des fichiers audio entre eux, ajouter des harmoniques, écrire des fonctions qui permettent d'arrêter la musique entre telle et telle valeur, etc. Vous pouvez aussi compiler vos différents son pour n’en former plus qu’un. Voici un code qui montre ces différentes possibilités :
Ou encore :
N’oubliez pas de lier chacun des fichiers audio à la fonction "dac~" pour obtenir le son.
Pour obtenir les codes PureData précédent, vous pouvez cliquez ici !
Pour aller plus loin, nous avons essayé connecter un joystick à Pure Data de la même manière qu'avec le movuino. Malheureusement, au jour d'aujourd'hui cette tentative reste en echec. En effet, nous avons réussi à relier le joystick à arduino, puis arduino à python. Toutefois, le passage entre python et PureData nous échappe encore ...
Voici un lien vers le code arduino que nous avons utilisé pour lire les données issues du joystick. Cliquez ici !
Pour finir une photo de notre code python qui lit les données issues d'arduino :
En conclusion, ce projet se caractérise par une grande quantité de codage qui pourarit rébuter les débutants dès le départ. Toutefois, si la persévérance est de mise, vous aurez l'occasion d'achever, comme nous, un superbe projet artistique qui plairas à tout âge. Et si le coeur vous en dit vous danserez sauvegement sur les mélodies des trompettes de la victoire le movuino en main.
Vous avez tout lu? Parfait, voici votre récompense :
http://aerin.a.e.pic.centerblog.net/9fe46843.jpg
Bravo.
SOURCES
(1) http://romainfrancoismarsal.dunked.com/untitled-1
(2) https://github.com/hssnadr/Movuino_Wifi
(3) https://fr.flossmanuals.net/puredata/laudio-dans-pd/
(4) http://www.pd-tutorial.com/english/ch03.html
(5) https://www.youtube.com/watch?v=rtgGol-I4gA&list=PL12DC9A161D8DC5DC