Se connecter
Se connecter

ou
Créer un compte

ou
Agrandir
Les Mains dans le Cambouis
Bidouille & Développement Informatique

Sujet Transformer manette Xbox en controleur midi

  • 4 réponses
  • 3 participants
  • 743 vues
  • 5 followers
1 Transformer manette Xbox en controleur midi
Bonjour à tous, suite à ma demande postée sur le pub des programmeurs, j'ouvre un sujet dédié.

J'aurais besoin de l'aide de personnes tâtant l'arduino, car je voudrais me faire une interface qui transformerait les infos d'une manette de Xbox 360 en infos midi (note, et Program Change).

Pour devancer les questions :
- J'ai déjà fait des recherches, mais je n'ai pas trouvé comment faire ça par moi-même
- Je tiens autant que possible à le faire avec la manette que j'ai (Xbox 360), et pas une de Wii ou autre.
- Je le fais pour me passer d'un ordi (je le fait déjà sur ordi, avec Enjoyable sur mac)
- Je n'y connais rien en programmation, code, tout ça ; et bien que ça m'intéresserait de savoir le faire, je n'ai hélas pas le temps d'apprendre quelque chose d'aussi vaste, surtout si c'est juste pour un seul projet...
- Par contre je peux souder (à peu près), et je suis quand même pas manchot avec l'informatique.

Très simplement (dans ma tête du moins), l'idée est de rentrer en usb (sortie de la manette) dans l'Arduino, qui convertit les signaux reçus en infos midi (que je puisse définir), et ressort en Midi 5 broches pour attaquer un sampleur.

Mes questions :
- Peut-on brancher directement une manette Xbox sur un Arduino ?
- Connaissez-vous un programme qui permettrait de lire les données de la manette ?
- Comment lui dire : Quand j'appuie sur la flèche du haut, tu joues un C3 sur le canal 1 à la vélocité 127 ?

Merci à vous par avance !

2
Citation de gerbil :
- Peut-on brancher directement une manette Xbox sur un Arduino ?


Comme déjà dit sur l'autre thread, la réponse cette question est non, tu ne peux pas connecter directement une manette USB sur une Arduino normale. Elle n'a pas la fonctionnalité d'hôte USB.

Il faut au moins rajouter une extension à l'Arduino, sous la forme d'une carte supplémentaire ("shield") intégrant une puce d'interface ou un microcontrôleur plus évolué que celui de l'Arduino, pour connecter un device USB.
La version officielle Arduino est obsolète, mais on peut encore en trouver en cherchant bien.
La version Sparkfun existe aussi, mais est actuellement en rupture de stock.
Une autre : https://shop.tkjelectronics.dk/product_info.php?products_id=43

Plus d'infos : http://jp79dsfr.free.fr/_Docs%20et%20infos/Elec%20_%20Arduino%20-%20USB.pdf

Edit : l'Arduino Due semble avoir une fonctionnalité OTG limitée, mais ca pourrait peut-être suffire pour gérer un périphérique HID.
https://store.arduino.cc/arduino-due
https://www.arduino.cc/en/Reference/USBHost

Citation de gerbil :
- Comment lui dire : Quand j'appuie sur la flèche du haut, tu joues un C3 sur le canal 1 à la vélocité 127 ?


La sortie MIDI est gérée comme une bête liaison série. Une fois que tu as détecté l'appui sur la touche, ca va ressembler à un truc du genre :
if(flèche_du_haut_appuyée)
{
  Serial.write(0x90);  // "note on" command
  Serial.write(0x30);  // pitch = C3
  Serial.write(0x7F);  // velocity = 127
}

Il faudra bien sûr penser à envoyer un message "note off" quand la touche sera relâchée ... et là tu vas découvrir les joies de la gestion d'événements en logiciel bare-metal. :clin:

Plus d'infos : https://www.arduino.cc/en/Tutorial/Midi


Citation de gerbil :
Je n'y connais rien en programmation, code, tout ça ; et bien que ça m'intéresserait de savoir le faire, je n'ai hélas pas le temps d'apprendre quelque chose d'aussi vaste, surtout si c'est juste pour un seul projet...


Euh, sur le principe si tu veux mener à bien ce genre de projet, il va bien falloir t'y mettre au moins un peu. Ou alors, si tu ne trouves pas le projet déjà tout fait exactement comme tu veux, payer quelqu'un pour le faire pour toi ...

Une alternative, c'est de modifier tes exigences pour rendre ca beaucoup plus facile. Comme je disais sur l'autre thread, choisir un protocole plus simple que l'USB (manettes Nintendo de la NES à la Wii par exemple) ou bien une autre plate-forme embarquée qu'Ardiuno (une RasPi par exemple a tout ce qu'il faut pour gérer l'USB. Certains PIC aussi.)
3
Citation :
Comme déjà dit sur l'autre thread, la réponse cette question est non, tu ne peux pas connecter directement une manette USB sur une Arduino normale. Elle n'a pas la fonctionnalité d'hôte USB.


Je ne voulais pas faire le mec qui n'a pas confiance hein:lol:... et j'étais persuadé avoir déjà vu des claviers midi ou contrôleurs direct branchés dans l'Arduino, je n'ai pas retrouvé ça effectivement, j'ai dû rêvé.

Citation :
Il faudra bien sûr penser à envoyer un message "note off" quand la touche sera relâchée ... et là tu vas découvrir les joies de la gestion d'événements en logiciel bare-metal.


Et plutôt qu'un note off en relâchant, peut-on lui dire "t'envoies note on sur telle note, et après 0,1s tu envoies un note off sur la même note" ? Dans mon cas ce ne sont que des samples court en one-shot donc ça pourrait faire le truc.

Citation :
Euh, sur le principe si tu veux mener à bien ce genre de projet, il va bien falloir t'y mettre au moins un peu.


Bien sûr, je n'attend pas que quelqu'un me fasse ça pour le plaisir (quoique, je suis du genre à faire ce genre de truc si c'est facile pour moi, de manière complètement désintéressée, mais il faut que les astres soient alignés). Comme je le disais, je ne sais pas coder, mais si je comprend la logique avec un exemple, je crois que je pourrais m'en sortir. Pour l'instant quand je lis du code, je ne comprend pas grand chose à la logique du truc, et c'est bien normal.

Citation :
Une alternative, c'est de modifier tes exigences pour rendre ca beaucoup plus facile. Comme je disais sur l'autre thread, choisir un protocole plus simple que l'USB (manettes Nintendo de la NES à la Wii par exemple) ou bien une autre plate-forme embarquée qu'Ardiuno (une RasPi par exemple a tout ce qu'il faut pour gérer l'USB. Certains PIC aussi.)


Oui, j'étais parti sur l'arduino et pas sur le Raspberry car ça me semblait plus simple, et il me semble que ça chauffe moins aussi (à confirmer), et je ne veux pas de problème, car ça va être trimbalé, ça va sans doute subir de fortes chaleurs (cf canicule de juin dernier). Si c'est plus facile avec un Raspberry évidement ça me va aussi.

En cherchant un peu avec les manettes Nintendo je viens de tomber là-dessus : https://www.reddit.com/r/arduino/comments/gbk6hy/i_turned_a_nintendo_64_controller_into_a_midi/
je peux peut-être m'y penché aussi, j'avais oublié que Nintendo avait des manettes de cette forme, et c'est usb en plus.

Merci !

x
Hors sujet :
mince, j'ai pas réussi à insérer un lien plus discret que toute l'adresse...


[ Dernière édition du message le 08/05/2020 à 17:06:14 ]

4
Citation de gerbil :
Et plutôt qu'un note off en relâchant, peut-on lui dire "t'envoie note on sur telle note, et après 0,1s tu envoies un note off sur la même note" ?


Oui, tu peux.

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

5
Citation de gerbil :
j'étais persuadé avoir déjà vu des claviers midi ou contrôleurs direct branchés dans l'Arduino


Dans l'autre sens c'est bien plus simple : utiliser une Arduino pour scanner des boutons directement, et sortir du MIDI sur connecteur DIN. Voire en tant qu'USB Device grâce au convertisseur Série-USB intégré. C'est probablement ce que tu as vu.

Citation de gerbil :
Et plutôt qu'un note off en relâchant, peut-on lui dire "t'envoie note on sur telle note, et après 0,1s tu envoies un note off sur la même note" ?


Oui, et c'est beaucoup plus facile. Il y a une fonction d'attente d'un certain nombre de millisecondes nommée delay() qui te permet de faire ca.

Citation de gerbil :
Oui, j'étais parti sur l'arduino et pas sur le Raspberry car ça me semblait plus simple, et il me semble que ça chauffe moins aussi (à confirmer), et je ne veux pas de problème, car ça va être trimbalé, ça va sans doute subir de fortes chaleurs (cf canicule de juin dernier). Si c'est plus facile avec un Raspberry évidement ça me va aussi.


Une Raspi c'est un peu comme un PC sous Linux. On n'est pas du tout sur le même niveau de détails que sur Arduino, l'OS et ses drivers prennent plein de choses en charge (pour le meilleur ou pour le pire selon ce que tu cherches à faire). Sur une Arduino Uno tu as 2ko de RAM, sur une Raspi 3 tu en as 1Go.
En terme d'intégration, une petite Raspi Zero devrait faire le job sans surchauffe particulière, avec un port MIDI qu'il devrait être assez simple de bricoler surtout si tu n'as besoin que de la sortie.

Citation de gerbil :
j'avais oublié que Nintendo avait des manettes de cette forme, et c'est usb en plus.


Justement non, c'est pas de l'USB ;-)

[ Dernière édition du message le 08/05/2020 à 17:44:33 ]