Pure Data – Construire un Séquenceur pas-à-pas MIDI (Step Sequencer)

Nous continuons notre exploration de Pure Data Vanilla en programmant 3 Séquenceurs pas-à-pas MIDI (Musical Instrument Digital Interface)

Contenu de cet article :

  • Avant-propos
  • Séquenceur 16-pas (Step Sequencer) – Numéro MIDI vers Fréquences (Audio)
  • Séquenceur 16-pas (Step Sequencer) – Numéro MIDI vers Synthétiseur (Midi)
  • Séquenceur 16-pas (Step Sequencer) – Numéro MIDI vers Synthétiseur (Midi) – v.2
  • Organisation et rendu visuel des patches dans Pure Data Vanilla et ses variantes
  • Courte introduction à Purr Data (aussi connu comme Pd-L2ork v.2.x)

♦ Avant-propos

Cet article est la suite d’Introduction à la programmation MIDI avec Pure Data. Si vous ne connaissez pas Pure Data, commencez d’abord par là.

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, utilisée ici, est développée par Miller Puckette depuis plusieurs décennies. Pure Data est multi-plateforme et il est disponible pour les systèmes d’exploitation libres GNU/Linux, ici Linux Mint 19, et les propriétaires macOS et Windows.

Les trois séquenceurs pas-à-pas MIDI présentés dans cet article se basent sur les mécanismes décrits en particulier dans les deux articles suivants et plus généralement dans le manuel de Pure Data :
  • Building a Simple Sequencer: A step by step guide – Pure Data FLOSS Manual (anglais)
    Créer un commutateur, Réguler le timing, Mettre en place un compteur, Mettre en place un canal de distribution, Convertir un numéro midi en fréquence, Envoyer la fréquence à l’audio, et Envoyer le son sur une carte Audio.
  • Building a 16-Step Sequencer – Pure Data FLOSS Manual (anglais)
    Un compteur, Entrées chaudes et froides, Stockage et récupération de valeurs de notes MIDI, et Le patch fini du séquenceur 16-pas.
  • Pure Data – Manuel FLOSS – Version complète en français (HTML) pour votre référence
    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 avec des ficelles (comme sur nos vieilles consoles analogiques).

♦ Séquenceur 16-pas (Step Sequencer) – Numéro MIDI vers Fréquences (Audio)

Ce séquenceur MIDI permet de produire 16 sons (fréquences) en boucle à un rythme donné (Metro) sur la carte Audio de son ordinateur à partir de 16 valeurs (notes) MIDI.

Le GIF animé ci-dessous est composé de 4 captures d’écran (Slides)
  • SLIDE 1 – Ouverture du Patch dans Pure Data avec tous les Compteurs et Sliders mis à 0, sauf Réglage-Metro.
  • SLIDE 2 – Lancement du Patch par clic sur bouton _ON/OFF_ (objet ‘Toggle’) avec envoi valeurs d’initialisation (peuvent être changées). Le séquenceur 16-pas démarre avec les valeurs par défaut.
  • SLIDE 3 – L’utilisateur peut maintenant agir sur le ‘Hslider’ – Réglage Metro, les 16 ‘Vslider’ – Nb MIDI et le ‘Hslider’ – Curseur Volume pour voir et entendre en temps réel (avec décalage position séquenceur) la transformation des 16 valeurs MIDI en fréquences Audio.
  • SLIDE 4 – Idem que pour Slide 3.
    Pour arrêter le patch, un clic sur le bouton _ON/OFF_  (objet ‘Toggle’).

Pure Data (Pd Vanilla) : Séquenceur 16-pas (Step Sequencer) Notes MIDI vers Fréquences sous GNU/Linux (GIF animé)

Fonctionnement : Tempo + Compteur 16-pas (séquences) + Distribution des 16-pas du séquenceur
QUOI Rythme Compteur Séquence Séquence
FONCTION Tempo 16 séquences Affichage Sélection
OBJET Pd metro float + mod Hradio select + f (float)
Fonctionnement : Réglage Tempo + 16 valeurs MIDI-IN + Conversions
QUOI IN IN Conver.1 Conver.2 OUT OUT
FONCTION Tempo +/- 16 Nb Midi +/- Nb Midi -> Fréquence Fréq. -> Oscillat. sinus Volume +/- Digital -> Analog
OBJET Pd Hslider Vslider mtof osc~ Hslider dac~

Pure Data utilise ‘metro’ (métronome) pour faire battre son cœur et faire circuler les informations dans ses patches, mais exprimé en durée (ms). Il peut être utile de connaître son équivalence musicale en BPM (beat per minute). Pour cela nous utilisons l’objet ‘expr’ suivi de la formule ad-hoc.

La plage de sortie de chaque ‘Vslider’ et ‘Hslider’ peut être réglée dans les Propriétés de l’objet. Ici, nous avons pour les 16 ‘Vslider’ Nb MIDI : Lower=36 et Upper=96, pour le ‘Hslider’ Metro : Lower=100 et Upper=600, et pour le ‘Hslider’ Volume : Lower=0 et Upper=1.

Tous les Sliders utilisés en IN (entrée), comme les 16 ‘Vslider’ (Curseurs Réglage Nb Midi) ainsi que les ‘Hslider’, sont initialisés avec un valeur prédéfinie (qui peut être changée) au lancement du patch avec la paire ‘s init’ + ‘r init’ afin d’avoir quelque chose de cohérent dès le début.

Pour être plus proche de la philosophie « Séquenceur », nous pourrions remplacer les 16 ‘Vslider’ (Curseurs Réglage Nb Midi) par des ‘Vradio’ et/ou des ‘Hradio’ qui pourraient être organisés en octave (12 demi-tons). Voir le 3ème séquenceur plus bas dans l’article utilisant des ‘Vradio’.
Par exemple :

Db Eb   Gb Ab Bb  
C# D#   F# G# A#  
C D E F G A B
Do Mi Fa Sol La Si

Pour ne pas surcharger le patch avec des ficelles de connexions qui nous gâchent le paysage, nous utilisons les objets ‘send’ ou ‘s’ nommé et ‘receive’ ou ‘r’ nommé du même nom à chaque fois que cela sera nécessaire.
Pour mémoire la paire ‘send y’ + ‘receive y’ = ‘s y’ + ‘r y’ = une ficelle de connexion spécifique nommée ‘y’. Une paire donnée peut être utilisée autant de fois que nécessaire dans un patch.

Les objets ‘float’, ‘Hslider et ‘Vslider’ génèrent des nombres non-entiers. Comme en MIDI toutes les valeurs doivent être entières, nous avons besoin d’utiliser l’objet ‘div’ pour ne garder que la partie entière des nombres générées après traitement.

Tous les objets Pure Data ayant un ‘~’ à leur fin, comme ‘osc~’, ‘dac~’, ‘+~’, etc., sont des objets traitant les informations Audio.

♦ Séquenceur 16-pas (Step Sequencer) – Numéro MIDI vers Synthétiseur (Midi)

Ce séquenceur MIDI permet de produire 16 sonorités (MIDI) en boucle à un rythme donné (Metro) sur un Synthétiseur (logiciel et/ou matériel) avec son ordinateur à partir de 16 valeurs (notes) MIDI.

Le GIF animé ci-dessous est composé de 4 captures d’écran (Slides)
  • SLIDE 1 – Ouverture du Patch dans Pure Data avec tous les Compteurs et Sliders mis à 0.
  • SLIDE 2 – Lancement du Patch par clic sur bouton _ON/OFF_ (objet ‘Toggle’) avec envoi valeurs d’initialisation (peuvent être changées). Le séquenceur 16-pas démarre avec les valeurs par défaut.
  • SLIDE 3 – L’utilisateur peut maintenant agir sur les 16 ‘Vslider’ – Nb MIDI et les 3 ‘Hslider’ – Vélocité, Durée et Canal pour voir et entendre en temps réel (avec décalage position séquenceur) la transformation des 16 valeurs MIDI en sonorités synthétisés.
  • SLIDE 4 – Idem que pour Slide 3.
    Pour arrêter le patch, un clic sur le bouton _ON/OFF_  (objet ‘Toggle’).

Pure Data (Pd Vanilla) : Séquenceur 16-pas (Step Sequencer) Notes MIDI vers Synthétiseur sous GNU/Linux (GIF animé)

Fonctionnement : Tempo + Compteur 16-pas (séquences) + Distribution des 16-pas du séquenceur (identique au synthétiseur précédent)
QUOI Rythme Compteur Séquence Séquence
FONCTION Tempo 16 séquences Affichage Sélection
OBJET Pd metro float + mod Hradio select + f (float)
Fonctionnement : Réglage Tempo + 16 valeurs MIDI-IN + Assemblage Notes
QUOI IN IN IN IN 1-16
Assemblage
OUT
FONCTION Durée note +/- 16 Nb Midi +/- Vélocité note +/- Canal note +/- Affiche note jouée Nb Midi + Vél. + Durée + Canal envoie Note MIDI
OBJET Pd Hslider Vslider Hslider Hslider Vslider
makenote
noteout

Les commentaires faits sur le premier synthétiseur 16-pas MIDI s’appliquent aussi au deuxième ci-dessus, avec quelques modifications et ajouts.

La fonctionnalité ‘mtof -> osc~ -> +~ / Hslider -> dac~’ (Midi -> Audio) est supprimée.
Elle est remplacée par ‘makenote -> noteout’ (Midi -> Midi). Il faut bien entendu brancher un synthétiseur MIDI (logiciel et/ou matériel) à la sortie du patch comme Qsynth (synthé logiciel) avec des SoundFonts (vu dans le précédent article – Introduction à la programmation MIDI avec Pure Data).

Nous ajoutons les réglages-contrôles ‘Hslider’ – Vélocité note : Low=0 / Up= 127 et ‘Hslider’ – Canal note : Low=1 / Up=16 ainsi qu’une visualisation ‘Vslider’ – Hauteur notes MIDI jouées : Low=36 / Up=96.

♦ Séquenceur 16-pas (Step Sequencer) – Numéro MIDI vers Synthétiseur (Midi) – version 2

Ce séquenceur MIDI, comme le précédent, permet de produire 16 sonorités (MIDI) en boucle à un rythme donné (Metro) sur un Synthétiseur (logiciel et/ou matériel) avec son ordinateur à partir de 16 valeurs (notes) MIDI.

Par contre, les 16 curseurs (Vslider) d’entrée ont été remplacés par des Vradio (8x 1 octave + 8x 1 octave), 1 octave = 12x 1/2 tons. L’affichage du numéro MIDI de la note jouée est décomposé en numéro d’octave (2 à 9) + nom musical de la note (de C à B – Do à Si).
Le GIF animé ci-dessous est composé de 5 captures d’écran (Slides)
  • SLIDE 1 – Ouverture du Patch dans Pure Data avec tous les Compteurs, Vradios, Hradio et Sliders mis à 0.
  • SLIDE 2 – Lancement du Patch par clic sur bouton _ON/OFF_ (objet ‘Toggle’) avec envoi valeurs d’initialisation (peuvent être changées). Le séquenceur 16-pas démarre avec les valeurs par défaut.
  • SLIDE 3 – L’utilisateur peut maintenant agir sur les 16 ‘Vradio’ – Hauteur notes MIDI et les 3 ‘Hslider’ – Vélocité, Durée et Canal pour voir et entendre en temps réel (avec décalage position séquenceur) la transformation des 16 valeurs MIDI en sonorités synthétisés.
  • SLIDE 4 – Idem que pour Silde 3.
  • SLIDE 5 – Idem que pour Slide 4.
    Pour arrêter le patch, un clic sur le bouton _ON/OFF_  (objet ‘Toggle’).

Pure Data (Pd Vanilla) : Séquenceur 16-pas v.2 (Step Sequencer) Notes MIDI vers Synthétiseur sous GNU/Linux (GIF animé)

Nota bene : Sur les 8 octaves disponibles dans ce patch Pd, l’utilisation de l’octave basse (octave 2 / 24-35) et/ou des deux octaves hautes (octave 8 / 96-107 et/ou octave 9 / 108-119) peuvent être impossibles sur certains synthétiseurs (surtout matériels), en fonction de l’étendue des notes MIDI qu’ils sont capables de reconnaître. Consultez leurs spécifications MIDI.

Système de portées musicales avec correspondance MIDI

Mémento correspondance notation musicale française/anglaise avec numéro de notes MIDI

♦ Organisation et rendu visuel des patches

Ils peuvent être grandement améliorés en utilisant 3 fonctionnalités standards de Pure Data (Pd Vanilla)

  • Objet pd qui crée un sous-patch (un nouvel objet comme ‘pd toto‘) directement intégré dans le patch principal (très simple à mettre en œuvre). Une fois créé depuis le patch principal, il s’y affichera sous la même forme qu’un objet standard (une petite boîte) avec une entrée (inlet) et une sortie (outlet). Pour le modifier, il suffit de l’ouvrir directement dans le patch principal et il est sauvegardé avec ce dernier.
  • Objet Abstraction qui est un patch extérieur (un nouvel objet qui peut être plus générique) au patch principal mais que l’on appelle de ce dernier comme un objet Pd standard (simple à mettre en œuvre). Pour ce faire, il suffit de taper le nom du patch ‘Abstraction’ (sans l’extension .pd, comme ‘toto’ pour ‘toto.pd’) dans une zone d’objet. ‘Abstraction’ est beaucoup plus puissant que ‘pd’.
  • GOP (Graph-On-Parent) qui permet d’organiser l’ensemble de son patch avec un système genre « poupées russes » et de cacher tout ce qui n’est pas visuellement utile (moins simple à mettre en œuvre). ‘GOP’ est une propriété des sous-patches et des abstractions où les éléments d’interface graphique du sous-patch ou de l’abstraction sont visibles dans le patch principal, même lorsque ce sous-patch ou cette abstraction n’est pas ouvert. Cela permet une meilleure conception graphique et une plus grande facilité d’utilisation pour les patches complexes.
Pour plus de détails sur ces 3 fonctionnalités, consultez

♦ Courte introduction à PURR DATA (aussi connu comme Pd-L2ork v.2.x)

PURR DATA de Jonathan Wilkes est une variante de Pure Data de Miller Puckette mais basée sur Pd-L2ork v.1.x d’Ico Bukvic. Il offre une toute nouvelle interface graphique en JavaScript et de nombreuses corrections de bogues et améliorations. Contrairement au ‘classique’ Pd-L2ork (Pd Linux Laptop Orchestra) v.1x qui n’est que sous GNU/Linux, Purr Data est multi-plateforme et fonctionne sous GNU/Linux, macOS et Windows.

Purr Data s’appuie sur le code de plusieurs autres projets logiciels :
  • Pure Data (Vanilla) – le puissant moteur historique de scripts multimédia (audio, Midi, vidéo et autres),
  • Pd-extended – une application désormais abandonnée qui livrait Pure Data avec de nombreuses bibliothèques externes mais reprises par Purr Data, et
  • Pd-L2ork v.1 – qui a ajouté à Pure Data des améliorations d’utilisabilité réclamées depuis longtemps, telles que des mécanismes infinis d’annulation et de sauvegarde de l’état.

Purr Data, grâce à ses nombreuses bibliothèques spécialisées incluses par défaut (‘externals’) dont de nouveaux et puissants objets MIDI, va nous permettre de construire graphiquement des projets MIDI dont un Lecteur-Enregistreur de fichiers MIDI ainsi qu’un ‘vrai’ Séquenceur MIDI-IN-OUT…

LIRE la SUITE => Présentation de Purr Data (Pd-l2ork) – Programmation graphique orientée objet