Journal Orange, Batterie et Rock and Roll

Posté par  . Licence CC By‑SA.
62
30
nov.
2017

Sommaire

Cher lecteur,

Contexte

En me baladant récemment dans un magasin vendant des articles d'occasion, je suis tombé sur un pack contenant le jeu Rock Band sur Wii ainsi qu'une guitare, une batterie et un micro pour moins de 13 €.

Rock Band

Pour les quelques-uns qui ne connaissent pas ce type de jeux, cela revient à appuyer en rythme sur des faux instruments de musique en fonction de notes de couleur apparaissant à l'écran. Ce type de jeu était très à la mode dans les années 2000, mais celle-ci est maintenant passée.

Game Play

Je l'ai acheté parce que mes enfants aiment bien la musique, et que je trouve que cela peut leur donne un peu de culture musicale rock et améliorer leur sens du rythme tant en jouant tous ensemble, parents et enfants réunis.

Le projet

Néanmoins, j'avais une idée derrière la tête, car je me rappelais un journal sur linuxfr d'il y a quelques années. Mes enfants possèdent une batterie, mais même avec des sourdines, cela peut être fatiguant pour le voisinage. Les premiers voisins à la subir étant bien sur les parents. Je me suis donc demandé pourquoi ne pas essayer de transformer la batterie en plastique en véritable batterie électronique. De ce que je me souvenais du journal, les composants utilisés sur ce type de batterie sont les mêmes que ceux de batteries électroniques du commerce.

Une fois à la maison et le jeu testé avec les enfants (merci pour la chanson Roxanne que j'ai gardé plusieurs jours en tête), j'ai donc cherché plus d'information. A priori, la batterie que j'ai est moins bien que celle du journal : il n'y a pas de port midi, et elle n'est pas capable de calculer la vélocité des coups et comme sortie, nous avons qu'un port USB. Après quelques tests, je m’aperçois qu'elle est reconnue sous Linux comme un joystick et qu'elle est de marque Harmonix.

Les spécifications

Que dois-je donc faire pour la transformer en batterie électronique ? Les composants que je trouve dans le commerce semblent très chers et/ou n'accepte que des prises midi (USB ou DIN), ce qui ne semble pas être le cas ici. Je suis tombé sur des tutoriels nécessitant de modifier physiquement la batterie, ou des outils sous windows qui fonctionnent mais ne correspondent pas à mes besoins car trop lourds.

Je cherche donc un petit boitier, manipulable par un enfant de 8 ans, avec un port USB pour brancher la batterie et l'alimenter et avec une prise jack pour brancher un ampli ou un casque. Pas besoin de bouton, rien à configurer, cela doit vraiment être plug and play.

Et au final, mes recherches n'ont rien donné, et donc je me suis dit pourquoi ne pas se fabriquer ce boitier tout seul ? Et si possible, pour moins de 20 euros.

Les bons composants

En voyant mes spécifications, j'ai tout de suite pensé à un Raspberry pi. J'en ai utilisé un lorsque j'ai fabriqué une borne d'arcade et j'en suis très content. Sachant que je n'ai pas besoin de réseau, je me suis tourné vers une version pi zero coûtant moins de 6 €. Néanmoins, celle ne possède qu'un port micro usb, et pas de port jack. Il est possible de passer par le port HDMI pour le son, mais il me semblait difficile de faire tenir cela dans un boitier. Il existe des cartes filles fournissant une carte son supplémentaire, mais il faut compter une vingtaine d'euros pour celle-ci.

Raspberry pi zero

Je me suis alors tourné vers le magasin que j'utilise pour me fournir en gadget électronique pas cher : aliexpress. je suis tombé sur un équivalent chinois du Raspberry pi, l'orange pi. La version zero de celle-ci possède un quad core, 256 Mo ou 512 mo de RAM, un vrai port USB, un port Ethernet et du wifi avec une antenne. mais toujours pas de port jack. Néanmoins, je suis tombé sur un lot, contenant l'orange pi zéro 512 Mo, plus une carte fille avec deux ports USB supplémentaires et un port jack plus un boitier plastique contenant le tout. Le tout pour 11 € et 5 € de frais de port (et deux semaines de livraisons) ; le tout tenant dans un cube de 5cm d’arête. Il n'y a pas de chargeur (micro usb) ni de carte micro sb, mais je possède déjà du stock. J'ai donc passé de suite ma commande. En plus la liste d'OS supporté semble importante (Android, Ubuntu, Raspbian…).

Orange pi zero

Les bons logiciels

En attendant l'arrivé des composants physiques, je me suis donc intéressé aux logiciels. Le but ici est d'avoir un OS, et un ou plusieurs outils qui analysent les évènements d'un joystick et génère un son sur la carte son. Plutôt que partir dans un développement, cherchons ce qui existe, surtout que je n'y connais absolument rien. En tapant "Linux drum machine" dans mon moteur de recherche préféré, je suis tombé sur beaucoup d'outils de MAO pour Linux, mais rien ne correspondant à mon besoin exact. Par contre, un outil semble très utilisé : Hydrogen. Il permet (entre autres) de générer le son d'une ou plusieurs batteries à partir entrée midi ou de fichiers et patterns, mais semble nécessiter une interface graphique. Je tombe sur d'autres outils en ligne de commandes mais à chaque fois nécessitant une entrée midi. Si je trouve un outil permettant de prendre mon joystick et transformer cela en midi, c'est gagné. Et je suis tombé sur rbdrum2midi. Cet outil permet exactement de transformer une batterie Rock Band USB en entrée midi pour alsa. Il nécessite très peu de dépendance (asound, libusb et libjack) et devrait fonctionner, d'après son site, avec la batterie Rock Band 1 de la Wii. Tout roule.

Hydrogen, c'est compliqué

La mise en pratique

Comme d'habitude, ce qui fonctionne sur le papier ne fonctionne pas toujours de la même façon dans la réalité, et j'ai pu l'expérimenter.

Le hardware

J'ai donc reçu mon orange pi dans les temps. C'est bien emballé, le boitier est très sympa et bien conçu. Il a des vis aux bons endroits pour la carte mère et la carte fille. Cela tient et c'est très solide, et manipulable par un enfant sans crainte. Le bouchon est visé et il est impossible de l'ouvrir sans tout dévisser. Même les vis extérieures sont cachés par des patins autocollants. Cela fait vraiment professionnel.

L'emballage La taille

Mais il y a un léger souci. Le port micro USB pour l'alimentation est un tout petit peu trop à l'intérieur du boitier pour mes câbles. Il a donc tendance à se détacher tout seul. J'ai donc dû limer le plastique autour de la prise pour gagner quelques dixièmes de millimètres afin de garantir le maintient du câble. C'est dommage, car cela fait tout moche.

Je suis un porc

L'OS et sa configuration

Au niveau OS, l'image de Raspbian Server proposé sur le site d'orange pi n'a jamais voulu fonctionner, je me suis donc tourné vers armbian qui était proposé par la communauté. Grand bien m'a pris, car cela fonctionne très bien.

Armbian

Une fois l'OS installé, vu que je disposais du wifi et de l’Ethernet, j'ai voulu tester pour m'occuper de l'installation et la configuration des outils. Tout est vraiment simple à configurer avec armbian-config. Par contre, j'ai eu des soucis d'instabilité réseau quand je passais par le wifi et que la batterie est branchée en USB. Je suppute que l'alimentation n'est pas suffisante même si je fournis du 2A. j'ai donc fini par désactiver le wifi et ne garder que l’Ethernet.

Les logiciels

rbdrum2midi ne fournissant pas de build arm, j'ai donc décidé de le compiler à la main, directement sur l'orange pi, plutôt que de monter un environnement de cross compilation. Une installation de gcc et des librairies de développement plus tard, tout à bien fonctionné. Par contre, une fois la batterie branchée et l'exécutable lancé, j'ai le droit à un message abscons : Could not find/open device, try running as root?. Sachant que je lançais l'application déjà en root, cela ne m'aidait pas. Je me suis donc plongé dans le code, et donc ce message correspond au fait que l'outil n'arrive pas à détecter la batterie sur les ports USB.

Les lignes correspondent à la version Wii de Rock Band sont les suivantes :

    //Wii RB kit??
    *devh = libusb_open_device_with_vid_pid(NULL, 0x1bad, 0x3110);

Le point d'interrogation semble m'indiquer d'un doute. lsusb me confirme l'erreur. Le 0x1bad semble bon, mais je suis censé avoir un 0x0005. Une fois corrigé et compilé, je confirme que cela fonctionne. Un port midi alsa est apparu et quand je tape sur les pads, je vois des messages dans les logs.

Passons à l'étape suivante : hydrogen. J'enchaine les bonnes nouvelles. Il existe dans le repository de armbian (et une version pas trop vieille) et une fois installé (avec toutes les dépendances graphiques de celui-ci) et lancé, il reconnait le port midi alsa. Si je tape sur le pad, oh miracle un son sort des écouteurs. Et ho, deuxième miracle, je trouve un outil en ligne de commande (h2cli) qui prend la configuration sauvée dans l'interface graphique et l'utilise. Une fois lancé à la main, cela fonctionne aussi \o/.

Plug and Play

Maintenant qu'on a pu vérifier que tout fonctionne à la main, cherchons à automatiser la chose. Sachant qu'au démarrage du boitier, je ne suis pas sur que la batterie soit branchée, je ne préfère pas gérer rbdrum2midi et h2cli comme services, mais plutôt les lancer quand on détecte le branchement de la batterie (et les arrêter quand la batterie est débranchée). Les rules udev servent justement à cela. Je ne vais pas rentrer dans les détails, mais j'ai un peu galéré : entre les process tués par udev au bout de 30 secondes, les règles pour le retrait du périphérique qui ne sont pas appelés car on ne sait plus quel était le périphérique branché, h2cli qui doit être lancé d'une façon particulière pour retrouver sa configuration…

Finalement

Au final, cela fonctionne. Tu branches ton boitier la prise jack et le clavier, tu attends que cela boot, et tu peux jouer. C'est vraiment simple et plug and play. Cela m'a couté 13 euros pour le jeu et les accessoires plus 16 euros pour le boitier, soit au final moins de 30 euros pour une simili-batterie électronique. Je pense que c'est imbattable. Les enfants ont commencé à s'en servir et sont très contents. La possibilité de garder la même batterie entre le jeu sur Wii et l'utilisation "libre" est aussi un plus pour eux. De plus, je n'ai pas installé un noyau temps réel, ni utilisé jack, mais je n'ai pas observé de latence particulière entre le geste et le son, mais je ne suis pas musicien.

Branché

En vidéo

Au niveau temps, cela m'a également pris moins de temps que prévu : une journée pour la recherche d'info et de composants et une journée pour l'installation et la configuration du boitier et 15 jours d'attente de la livraison des composants.

La suite

Même si le système est opérationnel, il reste des choses à améliorer.

  • Tout d'abord, il faudrait que je remonte les bons id pour le kit rock band pour wii au projet rbdrum2midi. Même s'il n'y a pas eu de commit depuis 2 ans, cela dommage que quelqu'un n'en profite pas.
  • Je suis tombé sur un bug de h2cli : si h2cli reçoit un event midi après son lancement (si tu touches aux pads), mais avant la fin de l'initialisation du driver alsa, aucun son ne sortira de celui-ci. La seule solution que j'ai trouvée est d'arrêter h2cli et de le relancer (débrancher le câble usb et le rebrancher). Cela dure que 4 secondes, mais c'est très gênant quand cela t'arrive, surtout pendant les tests. Il faudrait que je le remonte.
  • Le temps de boot du boitier est trop long. Il faut compter 40 secondes avant de pouvoir jouer. Il faudrait que j'investigue pour voir où je perds du temps et ce que je pourrais améliorer (ménage dans les services ? désinstallation de paquet ? noyau aux petits oignons ?).
  • Il n'y a pas de retour physique pour savoir quand on peut commencer à jouer, c'est dommage surtout avec le temps de boot long et le bug de h2cli. [EDIT] j'ai rajouté un petit jingle avant de lancer h2cli, c'est plus simple maintenant. Et cela me permet de savoir quand ne pas toucher aux pads :)

Conclusion

Le DIY c'est fun, mangez-en. Et vous qu'avez-vous fabriqué aujourd'hui ?

  • # Cool :)

    Posté par  . Évalué à 9.

    C'est top comme projet, merci pour le partage.

    Dans le même genre, il y a des bricolages très sympa sur la chaine d'Evan Kale :
    https://www.youtube.com/watch?v=vi-w_WqJjzQ

    Beaucoup de bricolages autour du MIDI et de l'Arduino.
    Il met en général à dispo les schémas électronique et le code, et ses videos sont assez déjantées.
    Je conseille  ;)

  • # Partage

    Posté par  (site web personnel) . Évalué à 4.

    Super idée … et journal intéressant !

    Tu envisages de partager quelque part, tes configurations … si quelqu'un voulait faire la même chose sans passer par toutes tes galères ?

    • [^] # Re: Partage

      Posté par  . Évalué à 5.

      En effet, quand j'aurais amélioré le temps de boot, il faudrait que je mette à disposition mes rules udev, les scripts de démarrage, et pourquoi pas une image orange pi à mettre sur une carte micro sd.

  • # Idées supplémentaires

    Posté par  . Évalué à 4.

    Ce matin, mes enfants m'ont aussi fait part d'un problème. Quand on l'utilise en mode casque, il n'est pas possible de modifier le son de celui-ci.
    Or la batterie possède deux boutons "+" et "-" sur l'avant de celle-ci (équivalent des boutons idoines d'une wiimote). Je vais donc essayer de modifier rbdrum2midi pour capturer l'état de ces boutons et modifier le volume master de alsa.

    Et sinon, j'ai l'impression qu'à la place d'avoir à écrire des scripts udev, il serait possible d'utiliser un "device" systemd et de lui rattacher les deux services. Cela devrait être plus simple à gérer. Je n'ai jamais utilisé cette partie de systemd, il faut donc que j'investigue.

    • [^] # Re: Idées supplémentaires

      Posté par  . Évalué à 9.

      Et sinon, j'ai l'impression qu'à la place d'avoir à écrire des scripts udev, il serait possible d'utiliser un "device" systemd et de lui rattacher les deux services. Cela devrait être plus simple à gérer. Je n'ai jamais utilisé cette partie de systemd, il faut donc que j'investigue.

      N'hésite pas à poster la suite de tes investigations avec les devices via systemd, ça m'intéresse.

      « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

  • # Latence

    Posté par  . Évalué à 3.

    je n'ai pas observé de latence particulière entre le geste et le son

    La latence est tellement flagrante que je la constate dès le premier visionnage sur ta vidéo :-) Je ne suis pas musicien non plus.
    Pas certain qu'un noyau temps-réel améliore les choses car elle a l'air constante.

    • [^] # Re: Latence

      Posté par  . Évalué à 4.

      En effet, la vidéo donne cette impression. Et je ne peux pas blâmer un décalage entre le son et l'image, vu que l'on entend la différence entre le bruit des baguettes sur les pads et le son derrière :)

      Par contre, le ressenti en live est très différent.

    • [^] # Re: Latence

      Posté par  (site web personnel) . Évalué à 2.

      Oui, la latence est flagrante :)

      Pas certain qu'un noyau temps-réel améliore les choses car elle a l'air constante.

      Mon conseil avant d'attaquer le noyau temps-réel, ce que l'on appelle le temps-réel "dur" en MAO, c'est de déjà configurer le système avec un temps-réel "mou" (hard-realtime et soft-realtime). Le temps réel mou s'obtient en gérant les priorités-noyau des processus. C'est peut être faisable avec ALSA (je ne sais pas), mais c'est surtout conseillé d'utiliser JACK qui, sous debian et dérivées, configure la priorité temps-réel des processus audio/JACK (voir http://linuxmao.org/pam pour davantage d'information).

      Une autre possibilité d'amélioration avant d'utiliser vrai noyau temps-réel (avec la rustine RT) est de prioriser les IRQ (voir http://linuxmao.org/rtirq ), et ça peut se faire avec un noyau normal et l'option "threadirqs" ajoutée à GRUB pour qu'il boot le noyau avec cette option.

      https://librazik.tuxfamily.org - http://linuxmao.org - https://liberapay.com/trebmuh

  • # Drumkit ?

    Posté par  . Évalué à 2.

    Je suis pas sur de comprendre comment tu sors du son. L'outil rbdrum2midi semble transformer ce qui vient de la batterie via USB en messages MIDI. Mais d'après la (mauvaise) doc de l'outil, il semblerait que tu dois quand même avoir hydrogen qui tourne qque part afin de jouer les sons correspondant aux instruments. Non ? Cependant, tu dis que tu peux pas lancer hydrogen car tu n'as pas d'écran donc pas d'interface graphique.

    Je pose la question car je suis en train de construire ma propre batterie électronique et j'aimerais pouvoir la brancher à une petite carte (j'ai une CHIP qui traine dans un coin depuis presque 2 ans) plutôt qu'au PC portable. Mais je sais pas comment me passer d'hydrogen et je ne connais pas de logiciels en ligne de commande qui sachent recevoir des messages MIDI et jouer les sons correspondants (idéalement des sons issus un "drumkit").

    Joli projet en tout cas :)

    • [^] # Re: Drumkit ?

      Posté par  . Évalué à 2.

      C'est bien cela. Rbdrum2midi génère des messages midi. J'utilise au final h2cli (qui est livré avec hydrogen) pour générer les sons à partir du midi. C'est un outil en ligne de commande qui utilise le même moteur qu'hydrogen sans en avoir l'interface graphique. Cela devrait pouvoir te servir.

      • [^] # Re: Drumkit ?

        Posté par  . Évalué à 2.

        Ah génial, je savais pas que hydrogen avait une interface CLI ! Merci du tuyau, je pense que c'est exactement ce que je cherchais :)

    • [^] # Re: Drumkit ?

      Posté par  (site web personnel) . Évalué à 2.

      Une autre possibilité (peut être plus légère que hydrogen/h2cli, je ne sais pas), pourrait être d'utiliser le greffon LV2 DrMr qui permet de jouer des kits de batterie au format hydrogen. Je ne sais pas si ça peut correspondre à l'utilisation de h2cli ici, mais vu qu'il me semble (si j'ai bien compris) que h2cli/hydrogen est uniquement utilisé comme expandeur / lecteur d'échantillon, ça peut peut être faire l'affaire en état possiblement moins gourmand (à tester).

      Pour lancer un greffon LV2 en CLI, il est possible d'utiliser l'hôte de greffon jalv.

      C'est juste une idée, je ne sais pas si elle est pertinente dans votre cas ou pas.

      https://librazik.tuxfamily.org - http://linuxmao.org - https://liberapay.com/trebmuh

  • # Chouette journal

    Posté par  (site web personnel) . Évalué à 2.

    Vraiment intéressant à lire, merci !

    Je l'avais mise en signet il y a plusieurs jours et vient seulement de le lire, mais j'aurai du le lire avant.

    Je l'ai relayé sur linuxmao.

    Bon tapage à toi et tes enfants :)

    https://librazik.tuxfamily.org - http://linuxmao.org - https://liberapay.com/trebmuh

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.