note
Cette page explique comment utiliser un périphérique Série en MIDI, par exemple pour l'utilisation d'un contrôleur fait maison à base par exemple d'Arduino Uno ou Nano, qui ne supportent pas le protocole USB-MIDI nativement mais utilise Serial midi (contrairement à d'autres boards comme le Pro Micro ou les Teensy.
attention
Page en cours d'écriture
Table des matières
Introduction
- Construction d'un contrôleur MIDI basé sur Arduino
- Support USB des différentes boards Arduino et chips ne supportant pas nativement l'USB
- input en Série
- convertir le Série en MIDI avec Hairless ou TTYMidi
- Règle UDEV à la connexion d'un périphérique ttyUSB:
# /etc/udev/rules.d/99-serial-usb.rules # # Un test avec l'action "bind": # ACTION=="bind", SUBSYSTEM=="usb-serial", DRIVER=="ch341-uart", TAG+="systemd", RUN+="/bin/sh -c 'echo == >> /home/zig/Software/udev-env.txt; env >> /home/zig/Software/udev-env.txt; echo attr: >> /home/zig/Software/udev-env.txt; echo $env{DEVNAME} >> /home/zig/Software/udev-env.txt'" # Un autre test avec l'action "add", qui permet d'accéder plus facilement à la propriété DEVNAME: #ACTION=="add", SUBSYSTEM=="tty", ENV{DEVNAME}=="/dev/ttyUSB[0-9]", TAG+="systemd", RUN+="/bin/sh -c 'echo == >> /home/zig/Software/udev-env.txt; env >> /home/zig/Software/udev-env.txt; echo attr: >> /home/zig/Software/udev-env.txt; echo $env{DEVNAME} >> /home/zig/Software/udev-env.txt'" # La vraie règle à utiliser: ACTION=="add", SUBSYSTEM=="tty", ENV{DEVNAME}=="/dev/ttyUSB[0-9]", TAG+="systemd", ENV{SYSTEMD_WANTS}+="ttymidi@$env{DEVNAME}.service" # Un test à la déconnexion: #ACTION=="unbind", SUBSYSTEM=="usb-serial", RUN+="/bin/sh -c 'echo == >> /home/zig/Software/udev-env.txt; env >> /home/zig/Software/udev-env.txt'" # La vraie règle pour la déconnextion: ACTION=="unbind", SUBSYSTEM=="usb-serial", RUN+="/bin/systemctl --no-block stop ttymidi@*.service"
- Service Systemd pour démarrer et stopper ttymidi à la connexion/déconnexion du périphérique
[Unit] Description=TTYmidi to convert Serial to MIDI [Service] ExecStart=ttymidi -b 115200 -n ArduinoPedal -s %I
Le paramètre
%I
est passé par la règle UDEV après le @
de ttymidi@.service
.Liens et commentaires
- http://projectgus.github.io/hairless-midiserial/
- http://www.varal.org/ttymidi/
- https://github.com/cjbarnes18/ttymidi
- http://blog.fraggod.net/2012/06/16/proper-ish-way-to-start-long-running-systemd-service-on-udev-event-device-hotplug.html
- https://wiki.archlinux.org/index.php/udev
- serial2midi, une solution très similaire que j'ai vue sur Reddit un jour après avoir commencé à rédiger cet article