Une manette Xbox transformée en contrôleur MIDI pour Logic Pro, avec un éditeur de mapping visuel façon patch-bay où chaque bouton s’allume en direct quand on appuie dessus sur la manette.
Vue d’ensemble
Xbox MIDI Controller transforme une manette Xbox One connectée en Bluetooth en véritable contrôleur MIDI pour macOS, utilisable dans Logic Pro ou toute application compatible CoreMIDI. Un moteur en arrière-plan lit en continu l’état de la manette et envoie les messages MIDI correspondants via un port CoreMIDI virtuel, pendant qu’une interface graphique dédiée permet de réassigner chaque bouton à la volée, sans jamais toucher un fichier de configuration à la main.
Le projet est pensé pour un usage studio : brancher sa manette et jouer des notes ou moduler des paramètres au stick, sans clavier MIDI dédié — avec un mapping entièrement personnalisable et sauvegardé automatiquement.
Fonctionnalités
- Port MIDI virtuel CoreMIDI — la manette apparaît comme un contrôleur MIDI natif dans Logic Pro et toute application compatible, sans configuration dans Audio MIDI Setup.
- Boutons et D-pad en Note On/Off — A, B, X, Y, bumpers, View/Back, Menu/Start, sticks cliqués (L3/R3) et croix directionnelle, tous mappables individuellement.
- Gâchettes analogiques — LT/RT déclenchent une note par seuil, avec VU-mètre et repère du point de déclenchement dans l’éditeur.
- Sticks en Control Change — les axes X/Y des deux sticks envoient chacun un CC indépendant, prêts pour le Learn de Logic Pro.
- Éditeur visuel façon patch-bay — chaque contrôle est un module avec une LED qui s’allume en direct à l’appui physique, un écran affichant la note assignée, et un clavier piano déployable pour la réassigner.
- Sauvegarde instantanée — chaque changement de mapping est écrit immédiatement dans la configuration, rechargée à chaud par le moteur sans coupure du port MIDI.
- Reconnexion automatique — le moteur se reconnecte tout seul si la manette Bluetooth se déconnecte puis se reconnecte.
Sous le capot
Le projet repose sur deux processus séparés qui partagent le même fichier de configuration. Le moteur lit l’état de la manette environ 60 fois par seconde, traduit chaque entrée en message MIDI selon le mapping courant, et héberge en parallèle un petit serveur web local qui expose à la fois une API de configuration et un flux d’état de la manette en temps réel. L’éditeur graphique, lui, ne contient aucune logique propre : c’est une fenêtre native qui affiche simplement l’interface servie par ce serveur local, ce qui permet aussi de l’ouvrir dans un navigateur classique si besoin.
Toute la configuration — notes MIDI, numéros de Control Change, canal, vélocité, plages des axes, seuils des gâchettes — est centralisée dans un unique fichier JSON, sans aucune valeur en dur dans le code. Le mapping des notes se recharge automatiquement dès qu’il change, sans interrompre le port MIDI ni nécessiter de redémarrage ; les réglages plus structurels (sticks, gâchettes, canal, nom du port) ne sont lus qu’au démarrage du moteur.
Un mode debug affiche en continu les valeurs brutes des axes, boutons et croix directionnelle, utile pour calibrer les index d’entrée qui varient selon le modèle de manette et le pilote Bluetooth utilisé par macOS.
Stack technique
- Python 3.9+
- python-rtmidi — port MIDI virtuel CoreMIDI
- Flask — serveur web local et API de configuration
- pywebview — fenêtre native pour l’éditeur de mapping
- HTML / CSS / JavaScript — interface patch-bay, entièrement hors-ligne
Cas d’usage
Jouer ou moduler un instrument logiciel dans Logic Pro directement à la manette, sans clavier MIDI sous la main, ou détourner une manette Xbox inutilisée en surface de contrôle pour le mixage — volume, filtres, tout paramètre assignable via le Learn MIDI de son DAW.
Une manette de jeu, un port MIDI virtuel, et Logic Pro qui ne voit que ça : un contrôleur comme un autre.


