Mapping MIDI #2: Manette de PS3 pour Ableton Live, Traktor, HeavyM


Controllerism : Le grand détournement

De la naissance du scratch, erreur de manipulation d’un certain Grand Wizard Theodore, jusqu’à la création de contrôleurs MIDI utilisant des boutons de bornes d’arcades, et autres éléments de récupération, la culture du DJing a toujours bénéficié d’innovations, de customisations et plus récemment de programmations créatives.

Moldover, fondateur du Controllerism et son « Mojo »

Cet aspect du Digital DJing connu sous le nom de « Controllerism » regroupe l’utilisation sur scènes de divers contrôleurs, mais aussi et surtout la création et le détournement de systèmes existants. On retrouve de nombreux exemples sur le site djtechtools, véritable référence du mouvement.

Midi Fighter 3D

 

La manette de PS3: du jeu vidéo au live audio-visuel

C’est en tombant sur une manette de PS3 inutilisée que je me suis mis à imaginer les possibilités offertes par un tel contrôleur pour l’utiliser en Live, qu’il s’agisse de contrôle visuel mais également de la manipulation audio. Le détournement de cette manette n’est évidemment pas nouveau, et de nombreux artiste ont déjà utilisé divers controlleurs issus du jeu video pour des applications artistiques (je pense notamment à 1024 Architecture qui utilisait déjà en 2008 une manette similaire pour leur installation Tennis).

TETRA Tennis, dispositif de Mapping Video sur court lors des masters de Paris-Bercy.

Il existe déjà divers logiciels Open Source permettant de transformer directement le signal de nombreuses interfaces USB ou Bluetooth en contrôles MIDI. Malgré tout, je ne résistait pas à l’envie de prototyper ma propre interface, en passant par Pure Data.


Manettes PS3 et PureData

Specs Manette & Connection Bluetooth

Sony – DualShock 3

La manette Dualshock 3 a été conçue en 2010 pour fonctionner en Bluetooth avec la Playstation 3. Pas la peine de décoder et d’exploiter un éventuel protocole maison de Sony, celle-ci utilisant la norme bluetooth pour la transmission et le très utilisé protocole HID pour l’encodage de l’information, ce qui va grandement nous simplifier la tâche.

La manette se connectant rapidement à mon mac (il suffit de brancher le câble USB de recharge quelques secondes pour voir apparaitre au sein des options bluetooth les éléments appareillables dont doit faire partie ladite manette, puis de débrancher la câble et attendre que la liaison se fasse après avoir appuyé sur le bouton de connexion Bluetooth au centre de la manette.

J’utilise dans la suite Pure Data Extended, (version de Pure Data augmenté de nombreuses bibliothèques) qui n’ai plus supporté à l’heure actuelle. Dans cette version, on peut trouver nativement la bibliothèque HID, qui va nous permettre de recueillir et traiter les données envoyées par notre manette.

Pure Data et bibliothèque HID

Comme souvent sur PD, le secret réside dans l’encapsulation (accessible via l’option « Aide » ou « Ouvrir » après un clique droit). On découvre alors toutes les possibilités de l’objet hid ainsi qu’un certain nombre de commentaires permettant de mieux comprendre le fonctionnement de l’objet.

Onglet « Aide » de la bibliothèque HID

La première étape consiste donc à observer la liste des « devices » connectés, en cliquant sur l’objet « print ». Une liste apparait donc ou l’on retrouve notre manette, celle-ci étant numérotée, on utilise donc ce numéro pour accéder au bon système à travers l’objet « open »

Ne restait plus qu’à initier la réception en cliquant sur l’interrupteur puis spécifier une fréquence de réception grace aux objets poll initiant le délai entre 2 lecture de signaux (20ms fonctionne très bien de mon côté et permet une bonne réactivité, optimale en dessous de 10ms pour une utilisation musicale plus poussée).

Recevant correctement les informations transmises depuis la manette concernant l’ensemble des boutons mais également des joysticks, ne restait plus qu’à extraire l’ensemble du code grace à un simple copier-coller vers un fichier PD vierge, avant d’élaguer le tout pour ne garder que les éléments qui nous intéressent : à savoir les éléments indispensables à l’initialisation et au bon fonctionnement de l’objet hid ainsi qu’à l’obtention des données Joysticks et Boutons, en laissant de côté pour le moment les données gyroscopiques de la manette, que j’étudierais plus tard.

Utilisation simplifiée de la bibliothèque HID

 


Mapping et adaptation

Après avoir supprimé l’ensemble des éléments qui ne m’intéressaient pas pour garder le strict minimum, je commencais alors à tester les différentes possibilités offertes par les manettes.

Joysticks

Songeant à émuler une matrice XY pour pouvoir profiter pleinement des filtres via les deux paramètres principaux que sont la Fréquence de Coupure et la Résonance (Q), (que j’avais précédemment abordé lors de mon premier projet d’interface visuelle et sonore), je me concentrais donc d’abord sur les joysticks et leurs flots de données X-Y. En effet, les deux joysticks permettent d’obtenir une valeur entre 0 et 255 selon leur maniement horizontale (de gauche à droite) et vertical (de bas en haut).

Encodage des Joysticks analogiques.

De la même manière que pour les boutons dans la suite, je devais donc extraire les informations de chaque joystick soit 4 flux de données par manette, envoyés grâce aux objets send. Réceptionnés sous la forme « abs_x », « abs_y », « abs_z » et « abs_rz », J’utilisais finalement les dénominations GX et GY pour transmettre les coordonnées verticales et horizontales du joystick gauche et de façon analogue DX et DY pour le joystick de droite.

Routage et renvoi des données Joysticks

Deux précautions étaient alors à prendre:

Les Joysticks sont codés sur 256 valeurs possibles (0 à 255) avec deux décimales de précision. Il fallait donc tout d’abord diviser les données recueillies par 2 puisque le protocole MIDI offre une plage d’utilisation de 0 à 127, soit 128 valeurs possibles codées sur 7 bits. Il s’agit donc encore d’une adaptation d’échelle. Puis, il était nécessaire de transformer notre donnée flottante (nombre à virgule dit « float » en informatique) en nombre entiers « int », transmissibles en MIDI grâce à l’objet int.

Ne restait plus qu’à utiliser les objets ctlout pour envoyer les données en tant que Commande de Contrôle (CC) via le protocole MIDI (pour aller un peu plus loin, n’hésitez pas à jeter un coup d’oeil par là), en prenant garde de ne pas envoyer différents signaux à travers via le même canal (Nous avons 64 canaux à disposition pour chaque Bus).

Adaptation et envoi des données joystick via le protocole MIDI

 

Boutons

En utilisant à nouveau l’aide de la bibliothèque HID, je découvrais que tous les boutons étaient routés à travers les éléments « btn_0 » à « btn_15 » (soit l’ensemble des 16 boutons disponibles, incluant les joysticks tout en excluant cependant le bouton de connexion Bluetooth au centre de la manette).

Par soucis de simplification, je prenais note et répartissais chaque élément selon le bouton associé, avant de créer pour chacun une commande d’envoi send (que l’on peut raccourcir à l’aide de l’objet s), de manière à pouvoir récupérer ces commande n’importe où à l’aide de l’objet recept (que l’on peut raccourcir à l’aide de l’objet r).

Routage des boutons.

Lorsqu’un bouton est appuyé, PD reçoit une impulsion passant de 0 à 1 puis de 1 à 0.
Idem lorsque le bouton est relâché. Selon les logiciels et les configurations MIDI utilisées, cela permettra d’obtenir un fonctionnement dit « direct » (je peux par exemple utiliser une boite d’effet qui fonctionne tant que je reste appuyé) ou « toggle » (ma boite d’effets se met à fonctionner lorsque j’appuie une première fois, puis s’interrompt lorsque j’appuie à nouveau).

Encodage des boutons

 

Pour visualiser le tout, je conserve les interrupteurs de la bibliothèque HID. Enfin, je multiplie les valeurs de chaque impulsions par 127, valeur maximum du protocole MIDI classique. Ainsi, les logiciels utilisés ne recoivent que deux valeurs : 0, valeur min ou 127, valeur max, une valeur de 1 n’étant pas reconnue comme une valeur max par les logiciels.

Encodage et envoi des données boutons via le protocole MIDI.

 


Réception et mapping MIDI des logiciels externes

Pour pouvoir transmettre les données recueillies à partir de la manette via le protocole MIDI, il est nécessaire de créer un canal MIDI virtuel, qui distribuera les données converties sous Pure Data vers les logiciels voulus. Sur Mac, la manoeuvre est simple, il suffit d’ouvrir l’assistant « Configuration audio et MIDI » disponible sous le Launchpad, de cliquer sur l’onglet Fenêtres, puis d’Afficher le studio MIDI. Il faudra alors cliquer sur le « Gestionnaire IAC » afin de créer un Bus MIDI virtuel. Les logiciels que nous utiliserons dans la suite considérerons ce Bus comme un véritable contrôleur MIDI .

Dans la suite nous utiliserons les méthodes classiques de chaque logiciel pour le mapping MIDI, il suffira donc selon les logiciels de déconnecter les manettes et de modifier manuellement les valeurs envoyées par Pure Data (en effet, les Joysticks ne sont pas parfaitement stables et risquent de modifier vos configurations) ou bien d’entrer manuellement l’adresse MIDI utilisée lorsque c’est possible.

Ableton

Sur Ableton Live, l’assistant MIDI permet un contrôle étendu des configurations. Comme pour n’importe quel périphérique MIDI, Il faut tout d’abord valider notre Bus IAC, en allant dans les préférences MIDI puis en sélectionnant l’onglet « Piste« . On peut ensuite mapper tout les éléments nécessaires, un par un, puis éventuellement inverser ou modifier les plages de données utilisées au besoin.

Exemple de Mapping MIDI pour manette sous Ableton Live

 

Traktor

Sur Traktor Pro 2, j’ai utilisé l’assistant MIDI un peu moins fournis que celui de Live en adressant directement mes paramètres, c’est à dire que je connaissais le bus utilisé (1, soit « Ch01 » dans l’adresse), le canal CC (de 0 à 63), je pouvais donc indiquer l’adresse de chaque paramètre voulue comme on peut le voir dans l’exemple ci-dessous:

Exemple de Mapping MIDI pour manette sous Traktor

 

HeavyM

Sur HeavyM, l’assistant MIDI n’est pas encore aussi évolué que celui de Live, interdisant par exemple de configurer un élément (joystick ou bouton) sur deux paramètres différents.

Exemple de mapping MIDI avec une manette pour HeavyM

 

Pour aller plus loin…

J’ai exploré l’utilisation de deux manettes pour contrôler simultanément Ableton Live (séquenceur audio) et HeavyM (VidéoMapping) lors d’une installation interactive. Vous trouverez sur ce projet à venir de plus amples informations sur l’utilisation et les solutions mises en place pour le mapping MIDI de manettes sur ces deux logiciels et plus largement pour ces deux utilisations.

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *