Purr Data 2.9 (Pd-l2ork) – Carte de référence des objets MIDI (MAO)

Après la présentation de Purr Data et la réalisation d’un lecteur-enregistreur simple (live + fichiers MIDI), nous allons nous intéresser aux objets MIDI qui sont disponibles dans ce logiciel libre

Cet article est la suite de :

‘Purr Data’ = Environnement de programmation visuelle Pure Data Vanilla enrichi porté sur une interface graphique HTML5 (la dernière révision majeure du HTML) et fonctionnant au moins sous les systèmes d’exploitation libres GNU/Linux, et propriétaires macOS et Windows

Contenu de cet article :

  • Avant-propos
  • Objets MIDI inclus dans Pure Data Vanilla
  • Carte de référence des objets MIDI v.0.7 de Purr Data – Présentation détaillée
  • Carte de référence des objets MIDI v.0.7 – fichier PDF (en français)
    Cette liste des objets MIDI de Purr Data (applicable aussi à Pure Data Vanilla si ‘externals’ installés) n’est pas exhaustive. Elle sera complétée et étendue lors de prochaines mises à jour.
  • Cyclone v.0.3.x – External de Pure Data Vanilla – qui fait cruellement défaut à Purr Data v.2.9.0 qui n’intègre que la très vieille v.0.2 qui est obsolète

♦ Avant-propos

Avant de nous lancer dans des projets plus ambitieux, il faut essayer de faire la synthèse des objets MIDI et apparentés que nous avons à notre disposition dans la version actuelle de Purr Data, la 2.9.0.
La compilation réalisée ici s’applique aux distributions libres GNU/Linux. Sous les systèmes d’exploitation propriétaires macOS et Windows, les choses peuvent être différentes avec certains objets non-existants et/ou avec fonctionnements différents.

Il faut garder en mémoire que la documentation de Purr Data est un ‘work in progress’ (travail en cours) lié à son histoire. Après avoir parcouru les documentations (toutes en anglais, plus ou moins complètes et à jour) de Purr Data, de Pure Data Vanilla, de Pd-l2ork v.1 et de Max, j’ai identifié une cinquantaine d’objets qui sont disponibles et utiles pour développer des projets MIDI, sans compter bien entendu les objets de base (la ‘glue’ au sens large) que nous utiliserons aussi.

Comme l’ensemble de ces objets MIDI (Musical Instrument Digital Interface) ou orienté MIDI et MAO (musique assistée par ordinateur) n’est pas regroupé en un seul endroit dans la documentation de Purr Data, je les ai tous réunis dans un Carte de référence (une page A4 au format PDF) que nous pouvons avoir sous la main durant les développements d’applications MIDI. Dans cet article, je l’ai décomposée en 3 captures d’écran que nous allons parcourir.

NOTA BENE : Comme cette carte de référence objets MIDI est une compilation d’informations provenant de différentes sources, parfois contradictoires entre elles, elle est sujette à être améliorée, complétée et/ou amendée. De plus, sur la cinquante d’objets MIDI que contient cette carte, le fonctionnement d’une vingtaine demande encore à être documenté. Cela se fera lors de prochaines mises à jour de celle-ci.

Au cours de cet article je vais essayer de mettre en situation certains de ces objets MIDI en couvrant les bases de l’utilisation du protocole de communication MIDI. Nous verrons comment recevoir les informations MIDI des périphériques d’entrée, les envoyer à un autre matériel ou logiciel et sélectionner le périphérique qui obtiendra les informations envoyées.

Alors que la prévalence des systèmes de musique exclusivement logiciels a réduit le besoin de périphériques MIDI, le protocole et le format de fichier MIDI sont toujours nécessaires pour travailler avec des synthétiseurs et des échantillonneurs matériels et logiciels. Le MIDI est également de plus en plus utilisé par les artistes travaillant avec des interfaces physiques, car il fournit un protocole de communication compact et facile à utiliser permettant de recevoir des informations sur les capteurs et de produire des messages de contrôle pour les moteurs, les systèmes de lumière et autres dispositifs contrôlables.

♦ Objets MIDI inclus dans Pure Data Vanilla

Les 21 objets MIDI de base ci-dessous sont inclus par défaut dans Pure Data Vanilla.

MIDI-IN midiin notein pgmin ctlin bendin touchin polytouchin
  sysexin           midirealtimein
MIDI-OUT midiout noteout pgmout ctlout bendout touchout polytouchout
Notes – Construction
makenote poly        
Notes-off – Filtrage
stripnote          
Midi<->Fréquence
mtof ftom        

Tous les autres objets MIDI proviennent de bibliothèques externes (‘externals’) fournis par la communauté.

♦ Carte de référence des objets MIDI v.0.7 dans Purr Data

• CAPTURE 1/3 – 13 Objets MIDI

Purr Data (Pd-l2ork v.2) v.2.9.0 : Carte de référence des objets MIDI v.0.7 (1/3)

[midin] et [midout] pour travailler avec des données MIDI brutes (raw)

[midiin] reçoit des données MIDI brutes en écoutant sur un port MIDI spécifié et les transmet à l’intérieur du patch. [midiout] transmet des données MIDI brutes à l’extérieur du patch à un port spécifié.

Outre les périphériques MIDI physiques connectés à notre ordinateur, certains ports MIDI virtuels sont également visibles sous GNU/Linux grâce à QjackClt, en fonction de sa configuration. L’un des ports virtuels les plus utiles est la sortie vers le synthétiseur logiciel Qsynth. Elle nous permet de générer des sons échantillonnés à partir de messages MIDI sans avoir besoin de connecter un synthétiseur physique ou un échantillonneur à l’ordinateur.

[notein] et [noteout] sont un exemple d’objets MIDI spécifiques à un message. Ils acceptent l’entrée d’un flux MIDI, ceux qui sont généralement produits par les touches d’un clavier MIDI ou les pads d’un déclencheur de batterie, et ignorent tous les types de message autres que les messages de note.

[pgmin] et [pgmout] sont un autre exemple d’objets MIDI spécifiques à un message, ici Program Change (PC). Ils permettent de recevoir et d’envoyer des commandes de changement de sonorités depuis-vers un synthétiseur (logiciel et/ou matériel).

[ctlin] et [ctlout] sont des objets MIDI spécifiques au message Control Change (CC). Ils permettent de recevoir et d’envoyer des messages de contrôleur en continu depuis-vers des équipements MIDI, comme des faders et contrôleurs rotatifs MIDI, ainsi que par des interfaces plus centrées sur la musique, telles que les pédales de maintien.

En résumé, le contenu de base d’un flux MIDI entrant peut être récupéré à l’aide de l’objet [midiin] et un flux MIDI peut être envoyé à l’aide de l’objet [midiout]. Cependant, dans la plupart des cas, il est plus facile de traiter des types de message individuels à l’aide de leurs objets spécifiques. Les objets [notein] – [noteout] / [pgmin][pgmout] et [ctlin] – [ctlout] permettent de traiter facilement les messages associés, sans avoir à décoder l’entrée MIDI brute ni à créer une sortie MIDI brute.

[midiparse] et [midiformat] avec des fonctionnalités étendues de programmation MIDI

[midiparse] peut être utilisé pour examiner-décomposer les composants d’un flux MIDI brut, tandis que [midiformat] est utilisé comme guichet unique pour la création des messages MIDI les plus couramment pris en charge.

Lors de la création d’un patch important contrôlé par MIDI, il peut être nécessaire d’avoir accès à toutes les notes, modifications de contrôleur et autres messages générés par un périphérique MIDI. Plutôt que d’utiliser de nombreux objets individuels (tels que [notein], [pgmin], [ctlin] et autres), nous pouvons utiliser l’objet [midiparse] pour analyser le flux MIDI entrant. Nous pouvons également utiliser l’objet [midiformat] pour générer un flux MIDI sortant pouvant contenir une grande variété de messages MIDI. Ces deux objets sont très utiles pour les patchs de contrôle MIDI complexes.

En résumé, lors de la création d’un patch complexe contrôlé par MIDI, nous voudrons souvent utiliser tous les messages MIDI disponibles. Plutôt que d’avoir un grand nombre d’objets spécifiques à un message, nous pouvons utiliser les objets [midiparse] et [midiformat] pour diffuser des données MIDI depuis et vers les périphériques tout en ayant accès à tous les types de message. L’utilisation conjointe de [midiparse] et de [midiformat] est au cœur de tout système de ‘patching’ complexe et d’envergure basé sur le MIDI.

[seq] pour le séquençage des flux MIDI

L’enregistrement et la lecture d’événements MIDI (généralement appelés séquençage) est une tâche importante pour de nombreux programmes basés sur MIDI. Plusieurs objets peuvent accomplir des tâches de séquencement MIDI, mais [seq] fournit l’interface la plus simple tout en permettant l’enregistrement et la reproduction de notes, de contrôleurs et de tous les autres messages MIDI.

[seq] est un outil de séquencement robuste, qui nous permet de lire des séquences MIDI à différentes vitesses. Une des raisons pour lesquelles le séquençage MIDI est si utile est que nous pouvons modifier la vitesse de lecture avec peu d’effet sur le son de sortie. Le destinataire MIDI est responsable de la création du son et ne fait que répondre au flux de données fourni par le séquenceur. Ainsi, le changement de la vitesse de lecture est une partie importante du séquençage MIDI.

La sortie de [seq] doit être acheminée via [midiflush] (voir plus bas), de sorte que l’arrêt de la lecture stoppe également les notes en cours de lecture.

En résumé, [seq] est idéal pour la lecture de boucles courtes, de phrases de note/contrôleur voire de séquences beaucoup plus complètes.

[mtr] un séquenceur multi-piste à usage multiple

[mtr] est un autre objet qui permet d’accomplir des tâches de séquencement MIDI. Il agit comme un enregistreur multi-piste pour tout type de message, MIDI inclus. L’entrée la plus à gauche de [mtr] est une entrée de contrôle pour toutes les pistes. Vous pouvez également envoyer les mêmes messages à des pistes individuelles. Chaque piste enregistre ce qui entre dans son entrée et la reproduit à travers la sortie directement sous l’entrée.

[sysexin] lecture de messages système exclusif MIDI (F0h… …F7h)

[sysexin] reçoit les messages exclusifs du système (SYSEX) MIDI envoyés par la sortie d’un périphérique MIDI. Il prend un argument optionnel pour la sélection du port. Si un message exclusif au système MIDI est reçu, [sysexin] génère des octets MIDI bruts octet-par-octet, sous forme de nombre entiers.

Pour rappel, un message SYSEX débute toujours par F0h (240d) et se termine toujours par F7h (247d). Il est composé d’une série d’octets plus ou moins long propres à chaque fabriquant/matériel et inclut toujours l’identifiant MIDI unique du fabricant (délivré par Midi.org), comme 43h pour Yamaha.
Un exemple de message SYSEX Yamaha pour son Séquenceur matériel MDR-3 :
– F0h, 43h, 70h, 70h, 10h, F7h = message ‘Request to Send all RAM Data’ envoyé au récepteur, ici ses orgues électroniques Electone des séries HS et HX,
qui en retour répondent à la demande du MDR-3 en lui envoyant
– F0h, 43h, 70h, nnh*, 00h, Data, Checksum, F7h = message ‘Bulk Data (Reg.Mem, CSP/RSP, URP, UVD, FMP)’ reçu (avec nnh* = modèle dans la série et Data = suite d’octets de données spécifiques), soit un ‘DUMP’.

Purr Data (Pd-l2ork v.2) v.2.9.0 : Test d’une fonction [sysexout] en combinaison avec l’objet [sysexin]

[sysexout] envoie de messages système exclusif MIDI (F0h… …F7h)

[sysexout] ou [sxformat] n’existe pas (encore) en tant qu’objet dans Purr Data.
Il faut donc le créer à la volée ou construire un sous-patch / une abstraction pour une réutilisation aisée. [sysexout] est le pendant de [sysexin] mais pour les SYSEX sortants. Il peut envoyer un message exclusif système MIDI complet octet-par-octet sous la forme d’une séquence (valeurs séparées par une virgule), et non d’une liste (valeurs sans virgule), à [midiout].
Ci-dessus un exemple de réalisation de la fonction à adapter selon nos besoins.

• CAPTURE 2/3 – 12 Objets MIDI

Purr Data (Pd-l2ork v.2) v.2.9.0 : Carte de référence des objets MIDI v.0.7 (2/3)

[bendin] – [bendout] / [touchin] – [touchout] / [polytouchin] – [polytouchout]

Ces 6 objets sont un nouvel exemple d’objets MIDI spécifiques à un message. Ils seront utilisés quand nous aurons besoin de gérer spécifiquement des messages de PitchBend (PB), d’AfterTouch (AT) et de Poly-AfterTouch (PAT).

[makenote] pour la construction de notes

[makenote] génère un message MIDI de note (note-on) associée à une valeur de vélocité suivie par un message de fin de note (note-off) après une durée spécifiée. Cet objet utilise la syntaxe du format ‘time’. L’intervalle utilisé par [makenote] pour spécifier le délai entre les notes-on et notes-off peut être fixe ou relatif au tempo (il doit s’agir d’une valeur unique). Un troisième argument supplémentaire peut être utilisé pour spécifier un canal de sortie MIDI.

[midiflush] envoie des notes-off pour les notes-on suspendues dans flux MIDI brut

[midiflush] analyse un flux MIDI (par exemple à partir de [midiin] ou [seq]), en comptant le nombre de notes-on reçues pour chaque note et canal MIDI. Quand il reçoit un ‘bang’, des messages MIDI note-off sont envoyés pour toutes les notes qui n’ont pas été désactivées (force notes-on -> notes-off). Ceci est utile en conjonction avec [seq], qui ne désactive pas ses notes lorsqu’il reçoit le message ‘stop’. À tout moment, [midiflush] répète son entrée sur sa sortie.

[stripnote] filtrage des notes-off et laisse passer que notes-on

[stripnote] ne transmettra que les messages de note-on détectées comme ayant une vélocité supérieure à 0.

[pitch] fournit des informations concernant la hauteur de la note

[pitch] fournit en particulier des informations sur la note actuelle : le numéro MIDI, le nom, la classe et l’intervalle par rapport à la note précédente.

[chord] détection d’accords

[chord] essaie de deviner les accords joués en analysant le flux MIDI des messages notes-on reçues. Il affiche les notes jouées et le nom de l’accord qu’il en a déduit.

[score] suiveur de partition musicale

[score] est un suiveur de partition qui tente de faire correspondre les données MIDI entrantes avec une partition stockée dans un tableau (array).

• CAPTURE 3/3 – 23 Objets MIDI + Liste complète

Purr Data (Pd-l2ork v.2) v.2.9.0 : Carte de référence des objets MIDI v.0.7 (3/3)

Liste complète des 48 OBJETS MIDI et Apparentés présentés ici

Dans la capture d’écran ci-dessus, nous avons résumé les 48 (25 + 23) objets MIDI et apparentés disponibles dans Purr Data 2.9.0 qui sont présentés dans cet article.

23 OBJETS – FONCTIONNEMENT à développer

Ces 23 objets MIDI et apparentés sont aussi disponibles dans Purr Data 2.9.0 mais avec une documentation succincte, ou contradictoire, ou imprécise ou manquante. Il faudra préciser dans le temps leur fonctionnement au fur et à mesure que des informations deviendront accessibles et/ou après des tests d’utilisation.

D’autres OBJETS Purr Data peuvent aussi être utiles pour le MIDI

Nous les ajouterons à cette carte de référence après en avoir testé un certain nombre lors de prochaines mises à jour.

♦ Carte de référence des objets MIDI v.0.7 dans Purr Data 2.9.0

Actuellement, il y a 48 objets MIDI et Apparentés qui sont référencés dans cette carte. Ils proviennent majoritairement de Pure Data Vanilla v.0.48-0 ainsi que des 4 ‘externals’ Cyclone v.0.2.x, Jmmmp v.0.48, Maxlib v.1.5.x et Zexy v.2.2.x.

Nota bene : Cette carte de référence des objets MIDI s’applique aussi à Pure Data Vanilla v.0.47+ à condition qu’au moins les 4 ‘externals’ ci-dessus soient bien installés dans Pd grâce au Gestionnaire de bibliothèques Deken : Pd => Help => Find externals / Pd => Aide => Installer des objets (bibliothèques) supplémentaires.

Cyclone – Pure Data External

Pour réaliser des projets MIDI dans de bonnes conditions avec Purr Data (Pd-l2ork), il nous manque les dernières versions de Pure Data Vanilla et de l’external Cyclone. Mais malheureusement à ce jour et malgré son dynamisme, Purr Data v.2.9.0 n’intègre que Pure Data v.0.48-0 et Cyclone v.0.2. À ma connaissance, il n’y a pas de plan actuellement pour les intégrer dans Purr Data. C’est plus que dommage pour les performeurs MIDI.

Les versions actuelles de Cyclone sont les 0.3.0 et 0.3.1 et demandent respectivement au moins Pure Data Vanilla 0.49-1 et 0.50-0. De ce fait, avec Purr Data 2.9.0 il est IMPOSSIBLE d’utiliser aussi bien Cyclone 0.3.0 que 0.3.1. Il faudra donc utiliser Pure Data Vanilla 0.49-1+ ou 0.50-0 (actuellement en version Test release).

Au sujet de Cyclone v.0.3.x

L’external Cyclone étend les possibilités de Pure Data Vanilla avec des objets clonés à partir de Max/MSP de Cycling74 et offre un bon niveau de compatibilité entre les deux environnements.

Cyclone 0.3.0/0.3.1 nécessitent au moins Pure Data Vanilla 0.49-1/0.50-0 et ils ne fonctionnent pas complètement ni avec Pd-Extended ni avec Purr Data, ces deux derniers intégrant toujours des versions déjà bien obsolètes de Cyclone. Pd-Extended porte toujours l’antique version 0.1. Purr Data porte toujours la version 0.2 de Cyclone qui, à elle seule, n’a pas encore été intégralement porté sur Purr Data.

L’auteur originel de Cyclone (Krzysztof Czaja) l’a abandonné en 2005 à la version 0.1alpha55. Cyclone a ensuite été intégré et disponible dans Pd-Extended, où il n’a eu qu’une mise à jour mineure en 2013 (0.1alpha56) sous la maintenance de Hans-Christoph Steiner, juste avant que Cyclone et Pd Extended ne soient totalement abandonnés.
Dans le cadre d’une nouvelle phase de maintenance de Fred Jan Kraan, des versions bêta de 0.1alpha57 et du nouveau Cyclone 0.2 ont été publiées, toujours en lien étroit avec les versions précédentes de ‘0.1alpha’ et, pour la plupart, conformes à Max 4.0.

Le but principal de Cyclone 0.3.0 (min. Pure Data Vanilla 0.49-1) était de mettre à jour les objets de Cyclone vers la dernière version de Max 7 (Max 7.3.5). De nombreux bugs ont également été corrigés, la documentation a été réécrite à partir de zéro et de nouveaux objets ont été inclus.

En voici le résultat :
  • 62 objets mis à jour basés sur la dernière version de la branche Max 7 (7.3.5)
  • 65 objets réparés (incluant les objets mis à jour)
  • 40 nouveaux objets (oui-oui)
  • Documentation nouvellement écrite
  • Vous trouverez le journal des modifications détaillé ICI

Recherchez les dernières versions de Cyclone ICI ou directement via le Gestionnaire des ‘externals’ de Pure Data Vanilla (Help => Find externals).
À partir de la version 0.47-0 de Pure Data Vanilla, le Gestionnaire de bibliothèques Deken est inclus par défaut pour offrir un accès facile aux bibliothèques externes (‘externals’) développées par la communauté qui étendent les fonctionnalités de Pd, telles que Cyclone, Zexy et la bibliothèque d’informations graphiques Gem.

Nota bene : Les futures mises à jour correspondant aux fonctionnalités ajoutées à partir de Max 8 pourraient être incluses dans une version 0.4 ou supérieure de l’external Cyclone.