ReceiveMIDI & SendMIDI Monitors / Purr Data [shell] object

ReceiveMIDI et SendMIDI sont deux utilitaires performants multi-plateforme en ligne de commande qui facilitent, à partir de votre ordinateur, la réception, l’envoi et le contrôle rapide des messages MIDI depuis/vers des appareils MIDI

Le gros du travail est effectué par la puissante bibliothèque JUCE (un framework multi-plateforme pour les applications Audio / MIDI / Vidéo) en version 6.x (sous Personal Free License).

ReceiveMIDI & SendMIDI (sous GNU General Public License v3.0) peuvent être utilisés comme des applications autonomes ou interfacées avec d’autres applications comme ci-dessous avec Purr Data (un logiciel libre et interactif de programmation visuelle pour la Musique assistée par ordinateur (MAO) et le Multimédia) sous GNU/Linux.

◊ Au sommaire

  • ReceiveMIDI — un Moniteur MIDI en ligne de commande
  • SendMIDI — un Moniteur MIDI en ligne de commande
  • Purr Data — un Patch graphique avec ReceiveMIDI & SendMIDI
  • ReceiveMIDI & Purr Data — un exemple d’utilisation
  • SendMIDI & Purr Data — un exemple d’utilisation
  • Alsa-Utils — Advanced Linux Sound Architecture – Utilities

ReceiveMIDI — Moniteur

Cet outil est principalement destiné à surveiller rapidement les messages envoyés à votre ordinateur à partir d’un appareil MIDI particulier. En fournissant des commandes de filtre, il est possible de se concentrer uniquement sur des messages MIDI particuliers.

Pour l’utiliser, tapez simplement receivemidi (GNU/Linux et macOS) ou receivemidi.exe (Windows) dans un Terminal et suivez-le avec une série de commandes (bien fournies) que vous souhaitez exécuter. Ces commandes ont été délibérément choisies pour être concises et faciles à mémoriser, de sorte qu’il est extrêmement rapide et intuitif de recevoir ou d’écouter rapidement des messages MIDI.

Parmi les nombreuses utilisations envisageables, il est possible d’utiliser ReceiveMIDI comme un Séquencer MIDI basique (Recorder) en enregistrant en temps réel un flux MIDI entrant (avec ts – time stamp) directement dans un fichier texte. Du fait de la structure de ce fichier texte, il peut être lu et édité en toute simplicité avec votre Éditeur de texte préféré, puis sauvegardé avec vos modifications pour être réutilisé avec SendMIDI.

Par défaut, les nombres sont interprétés dans le système décimal, cela peut être changé en hexadécimal en envoyant la commande hex. De plus, en suffixant un nombre avec M ou H, il sera interprété respectivement comme décimal ou hexadécimal.

Compatibilité avec SendMIDI

L’entrée MIDI de ReceiveMIDI est compatible avec la sortie MIDI de SendMIDI, cela vous permet de stocker des séquences de messages MIDI et de les lire plus tard. En utilisant des syntaxes de style Unix sur la ligne de commande, il est même possible d’enchaîner les commandes receiveremidi et sendmidi afin de transférer des messages MIDI.

ReceiveMIDI 1.0.6 & SendMIDI 1.0.14 | Listes des commandes en ligne actuellement disponibles

SendMIDI — Moniteur

Cet outil est principalement destiné à la configuration ou à l’installation via des messages MIDI de changement de commande, RPN et NRPN, mais de nombreux autres messages MIDI peuvent aussi être envoyés.

Pour l’utiliser, tapez simplement sendmidi (GNU/Linux et macOS) ou sendmidi.exe (Windows) dans un Terminal et suivez-le avec une série de commandes (bien fournies) que vous souhaitez exécuter. Ces commandes ont été délibérément choisies pour être concises et faciles à retenir, de sorte qu’il est extrêmement rapide et intuitif d’envoyer ou de diffuser rapidement des messages MIDI.

Parmi les nombreuses utilisations envisageables, il est possible d’utiliser SendMIDI comme un Séquencer MIDI basique (Player) en lisant le flux MIDI sortant d’un fichier texte (préalablement enregistré avec ReceiveMIDI ou créé de toutes pièces et dans les 2 cas contenant ts – time stamp) en l’envoyant vers un synthétiseur MIDI (interne ou externe).

Lorsque les notes MIDI peuvent être fournies en tant qu’arguments, elles peuvent également être écrites sous forme de noms de note, par défaut de C-2 à G8, ce qui correspond aux numéros de note 0 à 127. En réglant l’octave pour le C-Do central (C3-Do3 par défaut), la plage de noms de note peut être modifiée. Des éléments dièses peuvent être ajoutés en utilisant le symbole # après la lettre de note, et des bémols en utilisant la lettre b.

Compatibilité avec ReceiveMIDI

La sortie MIDI de SendMIDI est compatible avec l’entrée MIDI de ReceiveMIDI, cela vous permet de lire des séquences de messages MIDI qui ont été stockées précédemment. En utilisant des syntaxes de style Unix sur la ligne de commande, il est même possible d’enchaîner les commandes sendmidi et  receiveremidi afin de transférer des messages MIDI.

Purr Data & ReveiveMIDI – SendMIDI

Nous pouvons utiliser les puissantes fonctionnalités de ReceiveMIDI et SendMIDI depuis des logiciels de programmation en mode textuel ou graphique comme ici Purr Data ou Pure Data avec leur objet [ shell ] (bibliothèque ‘ggee’) sous GNU/Linux.

Ce patch de démonstration Purr Data est divisé en 3 parties :
  • Launch installed Apps — permet de lancer directement depuis Purr Data des applications installées sur les distributions GNU/Linux.
  • ReceiveMIDI — 3 exemples d’utilisation avec Purr Data : Lister les noms des ports MIDI-OUT disponibles, Écouter et afficher (en langage clair) le flux des messages MIDI horodatés du port MIDI sélectionné, -et- Écouter le flux des messages MIDI horodatés du port MIDI sélectionné tout en l’affichant (en langage clair) et en l’enregistrant dans un fichier texte (voir ci-dessous).
  • SendMIDI — 3 exemples d’utilisation avec Purr Data : Lister les noms des ports MIDI-IN disponibles, Envoyer un message ‘Panic!’ (toutes les Notes Offs possibles et les Control Changes (CC) de panique pertinents) sur le port MIDI sélectionné, -et- Lire/Envoyer le contenu d’un fichier texte (préalablement enregistré avec ReceiveMIDI) vers le synthétiseur connecté au port MIDI sélectionné (voir ci-dessous).

Purr Data 2.15.2 | Patch d’interfaçage avec ReceiveMIDI et SendMIDI sous GNU/Linux

Remarques : L’utilisation de l’objet [ shell ] de Purr Data (ainsi que de Pure Data) ne permet pas toujours de satisfaire aux besoins de bonne gestion de ReceiveMIDI et de SendMIDI (comme d’ailleurs d’autres programmes externes). C’est pourquoi il s’avère fort utile et productif d’utiliser des scripts Bash externes (même simples comme dans cet article) pour atteindre facilement les objectifs fixés.
Gardez en mémoire que l’objet interne [ shell ] de Purr Data réinitialise son dossier de travail après chaque exécution d’une commande. Sous GNU/Linux cela correspond à ~/ c’est-à-dire /home/user-folder. Il est donc préférable de toujours utiliser des chemins d’adressage absolus plutôt que relatifs (mais cela complique la compatibilité entre les différents systèmes d’exploitation) !

Lister les ports MIDI-OUT & MIDI-IN

La première chose à faire est de connaître les ports MIDI de votre ordinateur auxquels ReceiveMIDI et SendMIDI ont accès afin d’utiliser les bons paramètres pour le port choisi. Ci-après une 1ère liste de ports MIDI.

Liste des ports MIDI-OUT & MIDI-IN accessibles par ReceiveMIDI & SendMIDI sous Purr Data (Pure Data)

Ci-après une 2ème liste plus exhaustive de ports MIDI reconnus par ReceiveMIDI et SendMIDI. À chaque fois que vous connectez un nouvel équipement MIDI (logiciel et/ou matériel) il faut relancer l’analyse des ports MIDI accessibles par ces deux moniteurs.

ReceiveMIDI et SendMIDI ne trouvent pas toujours le nom complet (exact) de tel ou tel périphérique MIDI. Il faut dans ce cas prendre en compte l’ordre de branchement / lancement de ces équipements pour déterminer leurs noms sous ces deux moniteurs. L’utilisation d’une baie de brassage MIDI peut aussi aider.

Une autre Liste des ports MIDI-OUT & MIDI-IN accessibles par ReceiveMIDI & SendMIDI sous Purr Data

Sous GNU/Linux, l’utilisation d’utilitaires avec baie de brassage MIDI ALSA – voire JACK, comme QJackCtl v.0.6.3+ – Patchage v.1.0.2+ – Carla v.2.2+ ou le très simple AConnectGui v.0.9+, peuvent grandement améliorer la gestion de l’interconnexion / du mappage des différents éléments MIDI de votre Home Studio sur votre ordinateur. Voir leurs disponibilités dans le Gestionnaire de logiciels (Logithèque) de votre distribution préférée.

ReceiveMIDI & Purr Data

Ici nous allons utiliser depuis Purr Data « Écouter le flux des messages MIDI horodatés du port MIDI sélectionné tout en l’affichant (en langage clair) et en l’enregistrant dans un fichier texte ».

L’instruction composée sera envoyée au [ shell ] de Purr Data qui l’enverra au système d’exploitation :
gnome-terminal -- sh ~/Prd/rcvmidi.sh
Cette instruction se décompose comme suit:
  • Message [list Prd( — avec ‘Prd’ le dossier où se trouve ReceiveMIDI.
  • Message [gnome-terminal – – sh ~/$1/rcvmidi.sh( — ouvre un Terminal (ici celui du bureau Gnome) et lui demande d’exécuter le script Bash rcvmidi.sh qui se trouve dans le dossier utilisateur Prd.
  • Ce Script ouvre à son tour un Terminal et exécute les commandes à l’intérieur; à savoir changer de dossier, lancer ReceiveMIDI sur le port ‘MIDI-THRU’ avec l’horodatage (ts), afficher en temps réel tout le trafic MIDI sortant dans la fenêtre Terminal et l’écrire en même temps dans le fichier rcvm.txt.
#! /bin/bash
cd ~/Prd
./receivemidi dev Midi Through Port-0 ts | tee rcvm.txt

Pour arrêter le processus d’écoute du port MIDI-THRU et l’écriture du flux des messages MIDI dans le fichier texte, il suffit de fermer la fenêtre Terminal (par exemple CRTL + C).

ReceiveMIDI 1.0.6 / Purr Data 2.15.2 sous GNU/Linux | Écouter le flux des messages MIDI horodaté du port MIDI sélectionné tout en l’affichant (en langage clair et touches clavier) et en l’enregistrant dans un fichier texte

Structure du fichier TXT

Une fois le fichier rcvm.txt enregistré et correctement fermé par celle du Terminal, nous pouvons l’ouvrir dans notre Éditeur de texte préféré pour le consulter, l’analyser, voire le modifier et l’enregistrer sous un nouveau nom.

Ci-après, nous trouvons le début et la fin de mon fichier ‘rcvm.txt’ ouvert dans mon éditeur de texte. Il comprend 7.021 lignes pour environ 3 minutes et 20 secondes d’enregistrement.
  • La 1ère colonne est le Time Stamp (ts), c’est à dire l’horodatage précis (hh:mm:ss.ms basé sur l’heure de l’horloge du système d’exploitation) des événements qui permet d’avoir une suite ordonnée dans le temps des messages MIDI reçus. Si ts n’est pas présent en argument dans la commande du script Bash ci-dessus, alors il sera impossible de se servir de ce fichier pour le relire/rejouer correctement (voir ci-dessous SendMIDI & Purr Data). Néanmoins, il sera toujours possible d’exploiter ce fichier pour tous les messages MIDI qu’il contient.
  • Les 2/3ème colonnes sont le Canal avec son numéro (1 à 16) du message MIDI reçu.
  • Les 4/5/6ème colonnes sont le Type de messages MIDI (Note numéro et vélocité, PB – Pitch Bend, AT – After Touch, PC – Program Change, CC – Control Change, etc.) et leurs valeurs qui dépendent du type de message reçu.
  • Les messages SysEx (System Exclusive) sont affichés sous la forme d’une suite de nombres (encapsulés entre F0h (début) et F7h (fin) -ou- 240d et 247d) dont le contenu et la longueur dépendent du constructeur (ID #), de l’appareil MIDI et du type de SysEx.

ReceiveMIDI 1.0.6 | Écriture-sauvegarde en temps réel dans un fichier .txt du flux des messages MIDI horodatés reçu sur le port MIDI-OUT sélectionné

Après analyse du fichier texte contenant les messages MIDI, il est très facile de modifier – d’adapter celui-ci à ses besoins – objectifs en utilisant la fonction Rechercher/Remplacer de son éditeur de texte, puis une fois les modifications voulues effectuées de le sauvegarder pour une utilisation ultérieure.

SendMIDI & Purr Data

Ici nous allons utiliser depuis Purr Data « Lire/Envoyer le contenu d’un fichier texte (préalablement enregistré avec ReceiveMIDI) vers le synthétiseur connecté au port MIDI sélectionné ».

L’instruction composée sera envoyée au [ shell ] de Purr Data qui l’enverra au système d’exploitation :
gnome-terminal -- sh ~/Prd/sndmidi.sh
Cette instruction se décompose comme suit:
  • Message [list Prd( — avec ‘Prd’ le dossier où se trouve SendMIDI.
  • Message [gnome-terminal – – sh ~/$1/sndmidi.sh( — ouvre un Terminal (ici celui du bureau Gnome) et lui demande d’exécuter le script Bash sndmidi.sh qui se trouve dans le dossier utilisateur Prd.
  • Ce Script ouvre à son tour un Terminal et exécute les commandes à l’intérieur; à savoir changer de dossier, lancer SendMIDI sur le port ‘in’ (VMPK), lire le fichier rcvm.txt (qui comporte un horodatage pour chaque message) et envoyer son contenu sur le port MIDI spécifié.
#! /bin/bash
cd ~/Prd
./sendmidi dev in rcvm.txt --

Pour arrêter le processus d’envoi sur le port ‘in’, il suffit de fermer la fenêtre Terminal (par exemple CRTL + C).

SendMIDI 1.0.14 / Purr Data 2.15.2 sous GNU/Linux | Lire/Envoyer le contenu d’un fichier texte (préalablement enregistré avec ReceiveMIDI) vers le synthétiseur connecté au port MIDI sélectionné

♦ Alsa-Utils — en complément

Le paquet logiciels Alsa-utils (Advanced Linux Sound Architecture – Utilities) devrait être installé par défaut sur toutes les bonnes distributions GNU/Linux. Si ce n’est pas le cas, faites-le à partir du Gestionnaire de logiciels (Logithèque) de votre distribution préférée.

Ce paquet comprend, entre autres choses, les quatre utilitaires MIDI en ligne de commande suivants :
  • aconnect — Gestionnaire de connexion du séquenceur ALSA  — Pour connecter et déconnecter deux ports existants sur le système séquenceur ALSA. Les ports avec l’autorisation d’abonnement arbitraire peuvent être connectés à n’importe quel port de périphérique MIDI en utilisant aconnect. Voir plus haut pour aconnectgui avec une interface graphique.
  • amidi — Lecture et écriture sur les ports ALSA RawMIDI — Permet de recevoir et d’envoyer des données SysEx (System Exclusive) depuis/vers des appareils MIDI externes/internes. Il peut également envoyer toutes autres commandes MIDI.
  • aplaymidi — Lecteur de fichiers MIDI standard (SMF) — Lit le ou les fichiers MIDI spécifiés sur un ou plusieurs ports de séquenceur ALSA.
  • arecordmidi — Enregistreur de fichiers MIDI standard (SMF) — Enregistre un fichier MIDI standard à partir d’un ou plusieurs ports de séquenceur ALSA.

Tout comme pour ReceiveMIDI et SendMIDI, il est facile d’interfacer ces quatre utilitaires avec Purr Data (ou Pure Data) ou de les utiliser seuls dans un Terminal en ligne de commande.

• Comme nous l’avons vu dans cet article, les moniteurs ReceiveMIDI et SendMIDI permettent de gérer facilement avec un ordinateur (sous GNU/Linux, macOS ou Windows) tous les messages MIDI-IN/OUT incluant les SysEx (en applications autonomes ou applications imbriquées comme ici avec Purr Data ou Pure Data).