Introduction à la programmation MIDI avec Pure Data

Nous allons découvrir Pure Data, dans sa version originale Vanilla, puis nous l’utiliserons pour nous initier à la programmation MIDI (Musical Instrument Digital Interface)

Contenu de cet article :

  • Avant-propos
  • Au sujet de Pure Data (Pd)
  • Documentation, ressources et installation de Pure Data, y compris les ‘externals’
  • Toujours MIDI au cadran de ma montre
  • Quelques Patches MIDI
  • Générateur de notes-accord MIDI
  • Générateur de notes-accords MIDI « amélioré »

♦ Avant-propos

Cet article s’inscrit dans la lignée de la série Introduction à la programmation MIDI avec Python, MidO et RtMidi (1 à 5, et 6 à venir).

Il reprend les configurations Audio/MIDI pour les logiciels suivants : QjackCtl, Qsynth avec SoundFonts, Virtual MIDI Piano Keyboard et Patchage.

MidO (Midi Objets) et Pure Data sont tous les deux des langages de programmation orientés objet. MidO est une bibliothèque pour travailler avec les messages et les ports MIDI en tant qu’objets Python mais en programmation textuelle. Pure Data, en plus du MIDI, gère aussi l’Audio et la Vidéo (multimédia) et il se programme graphiquement.

Seulement pour information : Pour essayer d’avoir le meilleur de ces deux mondes, il est possible d’utiliser Python / MidO directement dans Pure Data. Cela se fait en installant un ‘external’ dans Pure Data. Cette bibliothèque d’objets py/pyext fournit une intégration complète du langage de script Python dans le système temps réel Pure Data.
Cette bibliothèque contient deux objets externes principaux :
py qui charge les modules Python et permet d’y exécuter des fonctions, et
pyext qui utilise les classes Python pour représenter des objets de message complets.
Le multithreading (‘detaching’) est pris en charge pour les opérations en arrière-plan.

♦ Au sujet de Pure Data (Pd)

Pure Data (ou tout simplement Pd, prononcez Pidi) est un langage de programmation visuel libre (licence BSD) pour la création musicale et multimédia (Audio, MIDI, Vidéo et autres) en temps réel. Sa distribution principale, appelée Pd Vanilla, est développée par Miller Puckette depuis plusieurs décennies. Pure Data est multi-plateforme et il est disponible pour les distributions libres GNU/Linux et les systèmes d’exploitation propriétaires macOS et Windows.

Purr-Data / Pd-L2ork est une distribution alternative et/ou complémentaire avec une interface graphique remaniée et de nombreuses bibliothèques externes (‘externals’) incluses. À l’origine, elle était basée sur le projet Pd-Extended qui est maintenant non maintenu, déprécié et donc obsolète.

Pure Data est un environnement de programmation graphique libre fonctionnant sur des ordinateurs personnels ainsi que sur des appareils intégrés (Raspberry Pi) et des smartphones (via libpd, DroidParty (Android) et PdParty (iOS)). Il s’agit d’une branche majeure de la famille des langages de programmation Patcher connus sous le nom de Max (Max/FTS, ISPW Max, Max/MSP, etc.), développés à l’origine par Miller Puckette à l’IRCAM dans les années 1980.

Pure Data permet aux musiciens, artistes du visuel, interprètes, performeurs, chercheurs et développeurs de créer graphiquement des logiciels sans écrire de lignes de code. Pd peut être utilisé pour traiter et générer du son, de la vidéo, des graphiques 2D/3D, des capteurs d’interface, des périphériques d’entrée et le MIDI (objet de cet article). Pd peut facilement travailler sur des réseaux locaux et distants pour intégrer une technologie portable, des systèmes moteurs, des installations d’éclairage et d’autres équipements. Il convient à l’apprentissage des méthodes de traitement et de programmation graphique du multimédia ainsi qu’à la réalisation de systèmes complexes pour des projets de grande envergure.

Les fonctions algorithmiques sont représentées dans Pure Data par des zones visuelles appelées objets, placées dans une fenêtre d’assemblage/correction, appelée canevas. Le flux de données entre les objets est réalisé via des connexions visuelles appelées cordons de brassage. Chaque objet exécute une tâche spécifique dont la complexité peut varier depuis des opérations mathématiques de très bas niveau jusqu’à des fonctions audio ou vidéo complexes telles que la réverbération, les transformations FFT (fast Fourier transform) ou le décodage vidéo. Les objets disponibles incluent les objets principaux de Pd Vanilla, les objets externes ou les ‘externals’ (objets Pd compilés à partir de C ou C++) et les abstractions (patches Pd chargés en tant qu’objets).

Vue d’ensemble de la création d’un patch avec Pd 0.48.1 sous GNU/Linux

Pure Data (Pd Vanilla) : Création d’un nouveau fichier, puis écriture d’un Patch très simple

Création d’un nouveau Patch simple en quelques clics

  • Lancement de Pure Data
    • Menu principal de Linux Mint -> Son et vidéo -> Pure Data
  • Création d’un nouveau Patch
    • Menu Pd -> File -> New
    • Canevas Pd (mode Édition) -> Menu Pd -> Put -> Object (autant de fois que nécessaire)
    • Établir les connexions entre tous les objets Pd
    • Test du Patch (mode Édition désactivé)
  • Et voilà, c’est fait !

Tous les Objets disponibles dans Pure Data en un coup d’œil

Pure Data (Pd Vanilla) : la Carte de référence qui liste l’ensemble des Objets internes au logiciel sur une page A4

♦ Documentation, ressources et installation de Pure Data

Veuillez consulter les liens suivants où vous pouvez trouver des ressources pour commencer votre apprentissage de Pure Data, des livres sur Pd, des manuels et plus encore !

  • La page de documentation de Pure Data – une vraie caverne d’Ali Baba (mais dont certaines entrées sont obsolètes !)
  • Pour Commencer – Si vous démarrez avec Pure Data voici quelques fondamentaux
    Attention : N’utilisez plus Pd-extended car il est obsolète et cette page n’est plus à jour ! Vous DEVEZ choisir Pd Vanilla (pour tous) ou Purr-Data (besoins spécifiques).
  • Pure Data – Manuel FLOSS – version complète en français (HTML)
    Pure Data (souvent abrégé Pd) est un logiciel de création multimédia interactive couramment utilisé dans les domaines artistique, scientifique et pédagogique. Sa popularité réside notamment dans sa facilité d’utilisation. Plutôt qu’un langage de programmation textuel, Pure Data propose un environnement de programmation graphique dans lequel l’utilisateur est invité à manipuler des icônes (objets) représentant des fonctionnalités et à les brancher ensemble (comme sur nos vieilles consoles analogiques).
  • Pure Data – Manuel – version complète en français 207 pages de Juin 2017 (PDF)
  • Pure Data – FLOSS Manual – version beaucoup plus complète en anglais (HTML)
    C’est la version recommandée si vous n’êtes pas fâché avec la langue de Shakespeare.
  • Carte de référence Pure Data – Formulaire des mots-clés de Pure Data en français
  • Pure Data Patch Repository – le Référentiel de Patchs Pure Data
  • Ye Olde Gem Manual – Manuel complet de GEM (Graphics Environment for Multimedia) en anglais
    GEM est un ensemble d’ ‘externals’ (librairie) permettant à l’utilisateur de créer des graphiques OpenGL directement dans Pure Data. Il a été écrit à l’origine par Mark Danks pour générer des graphiques informatisés en temps réel, en particulier pour les compositions audiovisuelles. Tout comme Pure Data, GEM est un environnement de programmation visuel, les utilisateurs n’ont donc pas besoin d’expérience des langages informatiques traditionnels (textuels).

Installation sous distributions GNU/Linux

Pure Data (avec ses dépendances) est disponible dans la Logithèque officielle de la plupart des distributions libres GNU/Linux et il s’installe facilement en quelques clics de souris.

Sous Linux Mint 19.1 (mon cas), c’est le paquet logiciel Puredata (Pd Vanilla) version 0.48.1-3 qui est directement installable. Sur le site de Pure Data, la dernière version en date est la 0.49.1 du 25/10/2018.

Si Pure Data n’est pas disponible dans le Gestionnaire de logiciels de votre distribution préférée, rendez-vous sur la page Téléchargement de Pure Data et après avoir fait votre choix suivez les instructions pour l’installer sur votre ordinateur.

Nota bene : Une fois familiarisée avec Pure Data et en fonction de vos besoins et objectifs, GEM (Graphics Environment for Multimedia), la bibliothèque graphique OpenGL, qui s’exécute directement dans Pure Data (voir plus haut dans Documentation) est aussi disponible dans la Logithèque des principales distributions GNU/Linux.
Pour Linux Mint 19.1, c’est GEM version 0.93.3 qui est proposée. Sur le site de GEM, la dernière version en date est la 0.94 du 15/03/2019.

‘EXTERNALS’ : L’installation de Bibliothèques externes (‘externals’) est grandement facilitée depuis la version 0.47 de Pure Data qui intègre désormais par défaut le plugin Deken, un gestionnaire d’externals. Cela évite d’aller à la pêche sur Internet en offrant depuis l’intérieur même de Pd une façon efficace de rechercher puis d’installer des ‘externals’ populaires.

Menu de Pd -> Help -> Find externals -> Entrer le nom de l’external dans le champ de recherche et valider par la touche Entrée -ou- laisser le champ vide et valider par Entrée pour lister tous les ‘externals’ disponibles à l’installation -> Cliquer sur l’external retenu pour l’architecture/système de son ordinateur ->  Valider son choix.

Astuce : Après l’installation de certains ‘externals’, un ou plusieurs objet de tel ou tel external pourraient ne pas être disponibles pour la réalisation des patchs. Il faut paramétrer correctement Pd afin que tous les ‘externals’ soient bien accessibles à Pd.
Installer sur votre ordinateur que des ‘externals’ fournis par des personnes/sources dignes de confiance !

Avant l’installation d’externals (ici Linux Mint avec nom utilisateur ‘joe’)
Menu de Pd -> Edit -> Preferences -> Path…
-> Pd Documents Directory -> /home/joe/Pd
-> Externals Install Directory -> /home/joe/Pd/externals

Après l’installation d’externals
Menu de Pd -> Edit -> Preferences -> Path… -> Vérifier et/ou ajouter
-> New -> Créer une entrée pour tous les dossiers d’externals installés, si elle n’existe pas, y compris le dossier external lui-même
Menu de Pd -> Edit -> Preferences -> Startup…
-> Pour les ‘externals’ récalcitrants comme Zexy ou d’autres
-> New -> Dans la fenêtre Add new library, entrer juste le-s nom-s des externals concerné-s afin qu’il-s soi-en-t chargé-s en mémoire dès l’ouverture de Pure Data

Une fois terminée, pensez à sauvegarder proprement la nouvelle configuration :
Menu de Pd -> Edit -> Preferences -> Save all preferences !

♦ Toujours MIDI au cadran de ma montre

Le Musical Instrument Digital Interface (FR) ou MIDI (EN plus complet) est un protocole de communication -ET- un format de fichier dédiés à la musique numérique, et utilisés pour la communication entre instruments électroniques, contrôleurs, séquenceurs, et logiciels de musique.
La Musique assistée par ordinateur (MAO) regroupe l’ensemble des utilisations de l’informatique comme outil associé à la chaîne de création musicale depuis la composition musicale jusqu’à la diffusion des œuvres, en passant par la formation pédagogique au solfège ou aux instruments.
Le MIDI est à la base de toute la MAO (Rien à voir avec le boucher chinois, sanglant dictateur communiste !).

Le MIDI (Musical Instrument Digital Interface) est utilisé pour la MAO (Musique assistée par ordinateur) et d’autres applications

♦ Quelques Patches MIDI

Pure Data permet l’utilisation du MIDI afin de recevoir des messages (notes, changements de programmes (PC), changements de contrôleurs (CC), etc.) depuis un clavier ou des interfaces MIDI standards, ainsi que des façons d’envoyer des informations en MIDI vers d’autres programmes ou des appareils MIDI.

Mise en route de Pure Data avant de commencer à utiliser le MIDI

Menu de Pd -> Media -> MIDI Settings…, puis sélectionnez le périphérique souhaité comme entrée/sortie MIDI. Par défaut, aucun périphérique n’est activé. Si le périphérique n’apparaît pas, débranchez-le, puis reconnectez-le au port USB de l’ordinateur ou au port MIDI de la carte son, puis relancez Pure Data.
L’utilisation d’une baie de brassage logiciel peut vous aider, comme ici Patchage ou celui de QjackCtl.

Pure Data (Pd Vanilla) : focus sur Patchage, une baie de brassage Audio/MIDI – JACK/ALSA sous GNU/Linux utilisée dans cet article sous GNU/Linux

Canaux et ports MIDI de Pure Data

Une fois le périphérique MIDI sélectionné, il faut s’assurer qu’il fonctionne convenablement. Pour cela, mieux vaut en savoir un minimum sur le concept de canaux MIDI (MIDI channels).
Les canaux MIDI sont utilisés pour identifier les périphériques, afin de recevoir et envoyer des notes vers des interfaces physiques ou virtuelles spécifiques. En général, un périphérique utilise un seul canal pour envoyer et recevoir ses informations, mais pas toujours. Traditionnellement, il y a 16 canaux MIDI au total.
Dans Pure Data, certains messages peuvent avoir un canal qui est plus grand que 16. Pure Data nous indique ainsi le numéro du port MIDI de Pd sur lequel chaque appareil est branché. En effet, Pure Data ajoute 16 à chaque nouveau port au chiffre du canal de l’appareil (voir la documentation de Pd).

Configuration Audio et MIDI dans Pure Data

Chaque système informatique est spécifique, tout comme chaque utilisateur est différent. Si vous souhaitez utiliser Pure Data pour gérer du signal Audio, il vous faudra préalablement configurer vos appareils Audio. Si vous décidez de recevoir ou d’envoyer des messages (notes, contrôles, sysex, etc.) MIDI, il sera également nécessaire de configurer vos appareils MIDI (vu précédemment).

Tester le MIDI dans Pure Data – Pensez-y !

Une fois la configuration MIDI et/ou Audio/MIDI terminée, il faut vérifier que Pure Data a bien accès aux bonnes ressources.

Pure Data (Pd Vanilla) : Test Audio and MIDI… (testtone.pd) – MIDI IN permet de vérifier les Notes + les Control Changes (CC) reçus et pour MIDI OUT d’envoyer une série de Notes – Cliquez sur ‘pd midi’ ou ‘pd audio’ ou ‘pd tests’ pour voir le détail de chaque patch

Le Patch dédié (testone.pd), intégré à Pure Data, qui sert à tester l’Audio sert également à tester le MIDI : Menu Pd -> Media -> Test Audio and MIDI… -> le Patch s’ouvre. Si tout est bien configuré, les nombres affichés sous les objets Pd ad-hoc dans ce patch devraient changer lorsque vous appuierez sur les touches (notein) et/ou les contrôleurs (ctlin) de votre clavier MIDI (physique ou virtuel).

Quelques Objets MIDI de Pd : notein, pgmin, cltin et noteout en action

En parcourant la documentation de Pure Data, nous trouvons des exemples d’implémentation d’objets MIDI. Il suffit de les mettre en œuvre et de les tester sur son ordinateur. C’est simple et très efficace !

Pure Data (Pd Vanilla) : quelques exemples de patches MIDI fonctionnels sous GNU/Linux (Linux Mint 19, QjackCtl, Qsynth avec SoundFonts, Virtual MIDI Piano Keyboard et Patchage en arrière plan)

J’ai réuni ces Objets MIDI dans un même patch Pd et je les ai testés avec VMPK (Virtual MIDI Piano Keyboard v.0.7). Ils fonctionnent tous correctement.

Pour en savoir plus sur la configuration matérielle / logicielle utilisée ici, reportez-vous à mon article Introduction à la programmation MIDI avec Python, MidO et RtMidi dont il reprend les bases.

Sous GNU/Linux, la taille d’affichage du contenu de la fenêtre d’édition peut être x2 (CTRL + +) ou ÷2 (CTRL + -)

Pure Data (Pd Vanilla) : gros plan sur quelques exemples de patches MIDI fonctionnels sous GNU/Linux

♦ Générateur de notes MIDI

En prenant quelques Objets MIDI (comme makenote et noteout) et spécialisées (Hslider, Vslider) de Pd puis en y ajoutant un peu de glue (Bang, metro, random, …), il est facile de réaliser un générateur simple de notes-accords MIDI.

ASTUCE : Nous pourrions appliquer le même principe pour créer un Contrôleur simple de Program Change (PC) en utilisant l’objet Pd pgmout, de Control Change (CC) avec l’objet Pd ctlout, de Pitch Bend (PB) avec l’objet Pd bendout, etc.

Références :

Pure Data (Pd Vanilla) : un Générateur simple de notes MIDI sous GNU/Linux (Linux Mint 19, QjackCtl, Qsynth avec SoundFonts et Patchage en arrière plan)

La programmation graphique de Pure Data est conviviale et très efficace mais tous ces fils de connexions qui se croisent même pour un patch simple, ce n’est vraiment pas terrible pour la compréhension de la structure du programme.

Nous allons améliorer cette situation dans le prochain paragraphe où je vais aussi entrer dans le détail du fonctionnement du patch.

Sous GNU/Linux, la taille d’affichage du contenu de la fenêtre d’édition peut être x2 (CTRL + +) ou ÷2 (CTRL + -)

Pure Data (Pd Vanilla) : gros plan sur le patch du Générateur simple de notes-accords MIDI sous GNU/Linux (GIF animé)

♦ Générateur de notes-accords MIDI « amélioré »

Pour améliorer la compréhension de la structure d’un patch Pd donné, il faut bien entendu l’organiser au mieux, comme pour tout programme informatique, et aussi essayer de diminuer au maximum le nombre des fils de connexions entre les objets Pd, surtout ceux qui se croisent.

Pour ce faire, Pure Data nous propose deux objets fort pratiques
  • send ou s : envoie un message à un objet nommé du même nom qui peut exister plusieurs fois, par exemple send nb ou s nb, et
  • receive ou r : reçoit les messages du même nom envoyés par send ou s, par exemple receive nb ou  r nb.

Comparez le GIF animé ci-dessous avec celui ci-dessus. C’est maintenant nettement moins brouillon ci-dessous et ce n’est plus un mauvais jeu de ficelle que l’on a du mal à défaire, n’est-ce pas ?

Pure Data (Pd Vanilla) : gros plan sur le patch « amélioré » du Générateur simple de notes-accords MIDI sous GNU/Linux (GIF animé)

Fonctionnement du Patch amélioré

Le bout de routine ‘Charge_CPU_en_%_(0-10)’ à droite dans le GIF animé est basé sur le patch ‘load-meter.pd’ (légèrement adapté) inclus dans Pure Data. Il est utile pour déboguer le patch MIDI en cas d’emballement du CPU suite à une incohérence de programmation.

Nous pouvons maintenant clairement identifier 4 blocs principaux dans le patch Pd
  • un générateur de nombres aléatoires compris entre 24 et 96 (Do1 à Do7) pour produire la hauteur de la note MIDI fondamentale (objets metro, random, …, send),
  • trois curseurs horizontaux (objets Hslider, …, send) pour régler manuellement, pendant l’exécution du patch, la vélocité et la durée des notes ainsi que leur canal MIDI de transmission,
  • trois assembleurs (objets receive, makenote) de notes MIDI complètes (note + vélocité + durée + canal) pour créer (objet noteout) un accord parfait majeur + 3 sliders horizontaux avec Led On/Off (objets Hslider, Bang) utilisés pour afficher la hauteur (numéro MIDI) et l’état des notes en temps réel, et
  • Un slider vertical (objet receive, Vslider) + un (objet) VU Meter (en dB) pour afficher en temps réel la vélocité/durée des notes MIDI jouées.
  • Voir aussi les commentaires sur les slides du GIF animé ci-dessus.
  • SLIDE 1 – Ouverture du Patch dans Pure Data
    • Tous les compteurs, sliders et VU Meter sont initialisés à 0.
  • SLIDE 2 – Lancement du Patch avec 3 Valeurs d’initialisation (peuvent être changées)
    • Le patch est lancé en cliquant sur le bouton M/A_NOTES-MIDI (objet Toggle).
    • Le générateur de nombres aléatoires démarre pour produire les premiers accords en combinaison avec les objets makenote / noteout, avec les valeurs d’initialisation des notes : Vélocité = 100, Durée = 300 ms et Canal = 1.
  • SLIDE 3 – Curseurs Réglage Manuel 1
    • Le générateur de nombres aléatoires continue de produire les accords avec les objets makenote / noteout.
    • L’utilisateur peut maintenant bouger à sa convenance les curseurs Vélocité, Durée et Canal des notes MIDI pour changer leurs valeurs.
  • SLIDE 4 – Curseurs Réglage Manuel 2
    • Idem que pour Slide 3.
    • Pour arrêter le patch, un clic sur le bouton M/A_NOTES-MIDI (objet Toggle).

ASTUCE : Pour voir les accords joués en temps réel sur un clavier, nous pouvons utiliser le logiciel VMPK (Virtual MIDI Piano Keyboard) que nous avons vu plus haut dans cet article.

• Avec cette « Introduction à la programmation MIDI avec Pure Data » (Pd Vanilla), nous n’avons fait qu’effleurer les immenses possibilités de ce langage de programmation graphique, orienté objet, pour la création musicale et multimédia en temps réel…

Lire la suite

  • Pure Data – Construire un Séquenceur pas-à-pas MIDI (Step Sequencer)
    Outre l’utilisation d’un curseur ou d’un clavier MIDI, une autre façon de contrôler un synthétiseur consiste à utiliser un séquenceur pas-à-pas, qui stocke les notes MIDI (fixes et/ou variables) et les reproduit dans l’ordre, à une vitesse (tempo) qui peut être modifiée du plus rapide au plus lent…