MDR Emulator Alpha v.0.1 – L’émulateur de MDR-3 pour Yamaha Electone
MDR Emulator = Projet d’émulation libre et multi-plateforme de l’expandeur MDR-3 (Music Disk Recorder) de Yamaha réalisé avec Purr Data
MDR Emulator = Free/libre and multi-platform emulation project of the Yamaha MDR-3 (Music Disk Recorder) expander built with Purr Data (an improved version of Pure Data Vanilla)
L’expandeur matériel MDR-3 de mon orgue électronique Electone HS-6 de Yamaha continue de rendre l’âme après 30 ans de fidèles et loyaux services. J’ai donc décidé de programmer un émulateur logiciel pour essayer de le remplacer en utilisant Purr Data v.2.9.0 sous GNU/Linux (Linux Mint 19.2). Nous verrons si cela est faisable ou pas avec les objets proposés par cet environnement de développement…
Purr Data v.2.9.0 (Pd-l2ork v.2) est un environnement de programmation visuelle libre pour la création musicale et multimédia en temps réel. C’est un ‘fork’ enrichi basé sur Pure Data Vanilla v.0.48-0, 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 avec quelques adaptations / différences.
Contenu de cet article :
- Avant-propos
- Configuration Yamaha Electone HS / Expandeurs MIDI / Baie de brassage / PC MAO
- Fonctionnalités du MDR Emulator
- Séquenceurs du MDR Emulator
- Écriture et lecture des fichiers vers/depuis un média de stockage
- Commandes du MDR Emulator
- Vue d’ensemble du Projet MDR Emulator
- Liste des choses à faire pour l’Alpha v.0.2, puis les versions suivantes
♦ Avant-propos
Après avoir analysé tous les objets disponibles, dont ceux spécialisés MIDI, dans Purr Data pour ce projet MIDI (Musical Instrument Digital Interface) d’envergure, deux principaux sont sortis du lot, [SEQ] et [MTR] de la bibliothèque Cyclone (ici en v.0.2).
[seq] pour le vrai séquençage des flux MIDI bruts
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 types de messages MIDI, incluant les SYSEX (System Exclusive messages).
[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 généraliste 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. Nous pouvons également envoyer les mêmes messages à des pistes individuelles. Chaque piste enregistre ce qui entre dans son entrée et la reproduit à travers sa sortie directement sous l’entrée.
Après de nombreux tests effectués en Live, il ressort que [mtr] n’est pas capable de gérer proprement et avec fiabilité tous les flux MIDI bruts (raw) que nous lui présentons en temps réel. Seul [seq] est vraiment capable de le faire fiablement en temps réel.
Cela est confirmé par le développeur de [mtr] qui écrit : « The [mtr] object is not well designed to record raw MIDI data, please use [cyclone/seq] instead. On the other hand, [mtr] is perfectly suited for recording sequences of numbers, lists, or symbols from virtually any object in Pure Data / Purr Data such as: specialized MIDI objects ([notein] / [pgmin]), GUIs (number box / slider), etc. ». C.Q.F.D. !
[seq] a l’avantage de gérer fidèlement tous les flux MIDI bruts.
Par contre, il est mono-piste mais avec 16 canaux voire plus. Tant que nous travaillons dans la RAM de l’ordinateur il n’y a aucun souci. Mais pour les Read/Write fichiers des pistes individuelles des séquenceurs, il faudra obligatoirement jongler avec les conversions entre eux (voir plus bas). C’est plutôt contraignant.
Ce sera donc l’objet [seq] (au nombre de 19 !) qui sera la cheville ouvrière de mon projet MDR Emulator mais cela rend la réalisation de celui-ci moins flexible et plus compliqué !
Afin d’assurer un maximum de compatibilité du MDR Emulator entre Purr Data et Pure Data Vanilla, j’ai utilisé des bibliothèques d’objets (externals) qui sont disponibles dans les deux environnements de programmation.
Ce sont Cyclone, Maxlib et Zexy. Ces 3 bibliothèques sont intégrées par défaut dans Purr Data (PRD). Pour Pure Data Vanilla (PDV), il faudra les importer en utilisant le plugin Deken, intégré par défaut depuis la version 0.47.
L’Alpha v.0.1 de MDR Emulator tient actuellement sur un écran d’ordinateur. Pour être lisible confortablement, l’utilisation d’un écran 24″ minimum est souhaitable. Cela permet en un coup d’œil d’avoir une vision complète du projet mais limite l’implémentation de certaines fonctionnalités. L’Alpha v.0.2 répartira grosso modo le projet sur deux écrans, un pour les commandes et un autre pour les séquenceurs.
PRD et PDV utilisent des gestionnaires graphiques différents, incluant les niveaux de zoom. Afin de garder une lecture cohérente et identique à l’écran entre les deux, j’ai utilisé le niveau de zoom 8 (sur 15) de PRD qui est directement compatible avec celui 1 (sur 2) de PDV.
♦ Configuration Electone HS / Expandeurs MIDI / Baie de brassage / PC MAO
À ce jour, MDR Emulator Alpha v.0.1 est compatible avec l’implantation MIDI des orgues électroniques Yamaha Electone des séries HS et HX (attention aux différences/subtilités entre modèles dans la même série), voire d’autres, en utilisant une simple interface matérielle de qualité comme le M-Audio Uno USB/MIDI 1-IN/1-OUT entre l’Electone (MIDI-In-Out) et l’ordinateur de MAO (USB).
Au cours des années, la configuration des connexions MIDI entre mon orgue électronique Electone HS-6 et mes deux expandeurs AVS-10 (sons échantillonnés) et MDR-3 n’a pas réellement changée. Avec la montée en puissance des ordinateurs, il était devenu intéressant de faire aussi de la MAO (musique assistée par ordinateur). D’abord sous système d’exploitation propriétaire Windows, puis sous libre GNU/Linux, comme avec Rosegarden ou MusE des séquenceurs logiciels généralistes -ou- Ardour une puissante station audionumérique – DAW.
Du fait que nous utilisons maintenant un ordinateur, nous pouvons aussi associer d’autres utilitaires à notre projet comme QjackCtl, Qsynth + FluidSynth + SoundFonts SF2, Virtual Midi Piano Keyboard, Patchage, Midisnoop, Gmidimonitor et Qmidiroute.
MDR Emulator remplacera avantageusement nos MDR-3 et ramènera à la vie nos Electone vintage et/ou nos Expandeurs avec de nombreuses fonctionnalités MIDI avancées.
♦ Fonctionnalités du MDR Emulator
Pour mémoire : Les données numériques enregistrées avec le MDR-3 de Yamaha sont bien compatibles avec le standard MIDI (Carte d’implantation MIDI) et avec au moins les Yamaha Electone Organs des séries HS/HX (Carte d’implantation MIDI) ainsi que les expandeurs Electone AVS-10 et CVS-10 (Caractéristiques) pour lesquels il a été développé.
Mais du fait que les Electone HS/HX et le MDR-3 ont été conçus il y a un peu plus de 3 décennies, ils ne sont PAS compatibles avec les normes General MIDI (GM) / General Standard (Roland GS) / Extended MIDI (Yamaha XG) qui -elles- ont été finalisées qu’à partir de 1991 !
L’Alpha v.0.1 est la 1ère version fonctionnelle du projet MDR-E.
L’objectif premier du projet MDR Emulator est de reproduire aussi fidèlement que possible le fonctionnement du MDR-3 de Yamaha. Cependant l’utilisation exclusive de l’objet séquenceur [seq] (voir chapitre précédent) nous oblige à faire quelques concessions. Mais elles sont compensées par la flexibilité que procure Purr Data et ses deux douzaines de bibliothèques d’objets additionnelles.
[SEQ] | 1 PISTE | 16 + 1 PISTES | 1 PISTE | Commentaire |
NOM |
[seq MIDI Type 0] | [seq T1] à [seq T16] + [seq TREG] | [seq TRAM] | soit 19 [seq] au total |
FONCTIONS | Lecteur-Enregistreur MIDI + Conversion 1P => 16+1P | Performance MIDI Electone + SysEx REG + Conversion 16P+1P => 1P | SYSEX ALL RAM HS/HX | |
MIDI IN/OUT | √ | √ | √ | [midiin] [midiout] [sysexin] |
Canal/Piste | 16 | 1 | 1 | |
Real Time RECORD | √ | √ | √ | (record) |
PLAY | √ | √ | √ | (bang) (start) |
Conversion | √ | √ | [seq1] <=> [seq16+1] | |
File disk R/W | √ | √ | [openpanel] [savepanel] | |
Affichage durée | √ m:ss | √ m:ss | [clock] | |
Tempo +/- | √ 40-240 bpm | √ 40-240 bpm | (start) [metro] | |
Tempo sync | interne/externe | interne/externe | ||
Lit SMF | √ | Type 0 et 1 |
Nota bene : Un certain nombre d’objets et de glue Purr Data ne sont pas nécessaires au fonctionnement du MRD Emulator. Ils sont uniquement présents pour vérifier la bonne marche du projet et faciliter son débogage.
♦ Séquenceurs du MDR Emulator
MDR Emulator est constitué de 3 principaux blocs de séquenceurs avec 19 objets [seq] au total.
L’enregistrement de flux MIDI bruts est l’un des points forts de [seq]. Il peut travailler et stocker presque n’importe quel type de message MIDI. [seq] attendant un flux MIDI brut, notre entrée d’enregistrement provient donc directement de [midiin]. Ces flux sont stockés temporairement par les [seq] dans la RAM du PC. Pour les entrées/sorties MIDI vers/de l’ordinateur, en plus de [midiin], le projet utilise [midiout] et [sysexin]. [sxformat] n’existant pas sous Purr Data / Pure Data, un équivalent a été créé.
[SEQ] – la gestion horloge interne (ms) / horloge externe (tick) / tempo (bpm)
Horloge interne : [seq] fonctionne avec le système de chronométrage métrique intégré à Purr Data / Pure Data qui diffuse des informations temporelles vers d’autres objets qui attendent des informations de chronométrage. Le temps de base est exprimé en ms, à convertir en bpm et/ou tick quand nécessaire.
Le mot ‘start’ par lui-même a le même effet que ‘bang’. ‘start’, suivi d’un nombre, joue la séquence mémorisée à un tempo déterminé par le nombre. Le message ‘start 1024’ indique un tempo normal. Si le nombre est ‘512’, [seq] lit la séquence à la moitié de la vitesse enregistrée d’origine, ‘start 2048’ la lit deux fois plus vite, et ainsi de suite.
Pour faire varier le TEMPO-I (40 à 240 bpm) pendant la lecture d’une séquence, nous utilisons ici [Hslider] avec ‘start $1’ et un peu de [glue].
Horloge externe : Cependant, lorsque le message ‘start’ a l’argument ‘-1’, le transport de l’objet [seq] est désengagé de l’horloge interne et dépend des messages ‘tick’ entrants pour faire avancer la séquence enregistrée.
Après avoir reçu un message ‘start -1’, [seq] attend des messages ‘tick’ pour avancer son horloge. Afin de jouer la séquence à son tempo enregistré d’origine, [seq] doit recevoir 48 messages ‘tick’ par seconde. Cela équivaut à 24 ticks par noire (la norme pour un message d’horloge MIDI) à un tempo de 120 BPM. En utilisant les messages ‘tick’ pour faire avancer le séquenceur, nous pouvons modifier le tempo de la lecture ou synchroniser [seq] avec une autre source d’horloge (comme les messages MIDI Clock entrants).
Pour faire varier le TEMPO-E (40 à 240 bpm) pendant la lecture d’une séquence, nous utilisons ici [Hslider] avec [metro] + [expr] et un peu de [glue].
[seq MIDI Type 0] – le séquenceur pour lire/écrire depuis/sur le disque interne/externe
Ce séquenceur est principalement utilisé pour les Read/Write des fichiers de performance depuis/vers le disque dur. Néanmoins, il peut aussi lire des fichiers SMF (Standard Midi File de Type 0 et 1). [seq] gère toujours en interne les flux MIDI en Type 0.
[seq T1] à [seq T16] – le séquenceur principal Performance
Lors d’une performance Live sur l’Electone, ce sont ces séquenceurs qui enregistrent les données de performance de l’utilisateur. L’enregistrement se fait pour toutes les pistes en même temps ou pour la-les piste-s sélectionnée-s individuellement. Néanmoins, ils peuvent aussi servir à enregistrer une performance depuis un autre équipement MIDI, tels un clavier-maître ou un clavier-synthétiseur.
L’utilisation de [seq] au lieu de [mtr] (voir plus haut) nous oblige à convertir les [seq T1] à [seq T16] vers [seq MIDI Type 0] avant de pouvoir sauvegarder la performance sur disque.
[seq TREG] – le séquenceur du Registre courant (message SysEx)
Lors d’une performance Live sur l’Electone, ce séquenceur gère le Registre courant.
[seq TRAM] – le séquenceur ALL RAM (message SYSEX)
Ce séquenceur permet de sauvegarder séparément la totalité de la RAM des Electone HS/HX.
Celle-ci est composé de : Données mémorisées dans la mémoire de registres (Registration Memory), Données du C.S.P. (Chord Sequence Programmer) / R.S.P. (Rythm Sequence Programmer) pour la série HS ou du Séquenceur pour la série HX, Données des motifs du rythme de l’utilisateur ou des motifs rythmiques de l’utilisateur (série HS uniquement), Données des voix de l’utilisateur (User Voices), Données F.M.P. (Full Music Programmer) pour la série HS, et Données du registre courant (Actual Registration).
♦ Écriture et lecture des fichiers vers/depuis un média de stockage
Le MDR-3 sauvegardait directement sur disquette 3.5″ 2DD de 634 Ko (après formatage) la performance, le registre courant et toute la RAM de l’Electone dans une paire de fichiers avec les extensions .R00/.EVT.
16 paires maximum numérotées de MDR_00 à MDR_15 pouvaient être sauvegardées sur une disquette, voire moins si il n’y avait plus assez de place disponible dessus. Il fallait tenir sa base de données bien à jour pour s’y retrouver dans la bibliothèque de disquettes/fichiers de son Electone.
Avec le MDR Emulator, ce temps passé est révolu.
Le stockage de la performance, du registre courant et de toute la RAM de l’Electone se fait d’abord dans la RAM du PC, puis quand le performeur le juge opportun sur un média, interne tel que le disque dur ou SSD de son PC, voire externe sur une clé USB ou un disque USB. De plus, le nom des fichiers est libre et est uniquement ‘limité’ par le système d’exploitation utilisé (GNU/Linux, macOS ou Windows).
[savepanel]
Associé à un peu de [glue], [savepanel] ouvre le Gestionnaire de fichiers du système d’exploitation pour SAUVEGARDER le fichier de travail (RAM PC) sur disque (dur, SSD ou USB).
[openpanel]
Associé à un peu de [glue], [openpanel] ouvre le Gestionnaire de fichiers du système d’exploitation pour CHARGER le fichier dans la RAM du PC.
♦ Commandes du MDR Emulator
Le MDR-3 avait ses propres contraintes et limites, le MDR Emulator a aussi les siennes. De ce fait, le fonctionnement du MDR-E sera légèrement différent du MDR-3 tout en offrant de nouvelles possibilités.
Pour référence, affichez le panneau de contrôle du MDR-3, à deux étages (Normal and Extended Control Panels).
[seq MIDI Type 0] – le séquenceur pour lire/écrire depuis/sur le disque interne/externe
Ce séquenceur possède un jeu de 6 commandes principales : REC / PLAY / P+C / ST / PA / CO.
- REC = RECORD : Enregistrement de la performance en RAM du PC, demande 2 clics pour bien confirmer le lancement de l’action
- PLAY : Lecture de la performance depuis la RAM du PC
- P+C = PLAY+CONVERSION : Lecture + Conversion vers [seq T1]-[seq 16]+[seq TREG] de la performance en RAM du PC, demande 2 clics pour bien confirmer le lancement de l’action
- ST = STOP : Arrêt de l’enregistrement ou de la lecture
- PA = PAUSE : Pause de l’enregistrement ou de la lecture
- CO = CONTINUE : Continue l’enregistrement ou la lecture
[seq T1] à [seq T16] – le séquenceur principal de Performance
Ce séquenceur, constitué en fait de 16 [seq] individuels – 1 par canal MIDI, possède comme le précédent un jeu de 6 commandes principales ici synchronisées pour toutes les 16 pistes ensemble : REC / PLAY / P+C / ST / PA / CO.
De plus, chaque [seq] peut être réglé séparément avec un jeu de 8x 2 commandes REC/PLAY pour les pistes individuelles : UK (Ch.1) / LK (Ch.2) / PK (Ch.3) / CTL (Ch.16) / LD (Ch.4) / ACC (Ch.5) / KP (Ch.15) / OTH (Ch.6-14).
[seq TREG] – le séquenceur du Registre courant (message SysEx)
En fonction de l’état du [Hradio] AR/AM (Arrêt/Marche), ce séquenceur enregistre/joue le Registre courant depuis/vers l’Electone.
[seq TRAM] – le séquenceur ALL RAM (message SYSEX)
Ce séquenceur indépendant avec ses 3 commandes REC / ST / SD gère l’enregistrement / l’envoi de la totalité de la RAM (SYSEX) des Electone HS/HX.
[Hradio] SQ1 / RAM
Avant d’enregistrer sur disque ou de charger en RAM PC un fichier, il faut choisir le séquenceur ad-hoc avec lequel nous allons travailler.
- SQ1 = [seq MIDI Type 0]
- RAM = [seq TRAM]
RAPPEL : Le groupe de séquenceurs [seq T1] à [seq T16] + [seq TREG] n’est pas directement enregistrable/chargeable sur/depuis le disque. Il faut d’abord les convertir comme un ensemble vers [seq MIDI Type 0] pour les Enregistrer et faire l’inverse pour les Charger !
[savepanel]
Un clic sur le message ‘bang’ (= dossier par défaut de l’utilisateur) ou le message ‘symbol chemin_du_dossier’ (ici ‘symbol /home/joe/Musique/MDR-3) ouvre le Gestionnaire de fichiers du système d’exploitation à l’endroit choisi. Puis, nous procédons de la manière habituelle pour sauvegarder le fichier sur disque.
Je suggère les extensions de fichiers suivantes : .mdx = Performance avec Registration (SysEx), .mdr = Performance sans Registration et .ram = Electone All RAM (SYSEX). Tout autre choix personnel fera aussi l’affaire, mais évitons les extensions déjà utilisées par le système et les applications.
[openpanel]
Un clic sur le message ‘bang’ (= dossier par défaut de l’utilisateur) ou le message ‘symbol chemin_du_dossier’ (ici ‘symbol /home/joe/Musique/MDR-3’) ouvre le Gestionnaire de fichiers du système d’exploitation à l’endroit choisi. Puis, nous procédons de la manière habituelle pour charger le fichier en RAM du PC.
♦ Vue d’ensemble du Projet MDR Emulator
Le patch complet du MDR Emulator en Alpha v.0.1 qui tient pour l’instant avec l’aide d’un chausse-pied sur un seul écran.
Par rapport aux 3 captures d’écran précédents du projet, nous trouvons en plus ici : les messages SysEx utilisés par les séquenceurs [seq TREG] et [seq TRAM], le bout de patch TEMPO-E (en bas à gauche) ainsi que le bout de patch Affichage des flux PC (Program Change) + CC (Control Change) MIDI-IN (en bas à droite).
Il est vraiment dommage que l’objet [mtr] ne gère pas correctement-fiablement les flux MIDI bruts. Son utilisation aurait grandement simplifié la conception et le fonctionnement de ce projet !
♦ Liste des choses à faire pour l’Alpha v.0.2
Cette liste n’est pas exhaustive et sera amendée comme et quand nécessaire.
- PROJET : Disposer sur 2 écrans les Commandes / Séquenceurs afin de pouvoir ajouter les fonctions manquantes et peaufiner le fonctionnement
- PROJET : Correction des bogues connus et ajout de commentaires
- SEQ16 : Faire 2 versions des Commandes, Electone + MIDI généraliste ou un Mix des deux afin que le projet soit aussi utilisable avec d’autres équipements MIDI (compatibles GM/GS/XG ou pas)
- SEQ16 : Ajouter le désarmement réciproque des boutons REC/PLAY des pistes individuelles
- SEQ16 : Modifier les commandes REC/PLAY+CONVERSION pour rendre leur fonctionnement identique à celui du MDR-3 (REC+PLAY au lieu de 2xREC)
- SEQ16 : Ajouter la gestion de FIN pour PLAY All
- SEQ16 : Voir comment utiliser FIN des pistes individuelles pour arrêt automatique
- SEQ16 : Implémenter la fonction ‘Tempo interne’ PLAY MIDI
- SEQ16 : Implémenter la fonction ‘Tempo externe’ PLAY MIDI
- SEQ1 : Peaufiner la fonction ‘Tempo interne’ PLAY MIDI
- SEQ1 : Peaufiner la fonction ‘Tempo externe’ PLAY MIDI
- SEQ TRAM : Voir comment ajouter la vérification ‘Checksum’ du SYSEX ALL RAM
- SEQ TREG : PLAYBACK – il manquerait ‘SysEx Send Current Reg Data’
- SYSEX : Vérification et nécessité des timings ‘delay’
NOTA BENE : Si l’Alpha v.0.2 du MDR-E ne permet pas d’atteindre une émulation satisfaisante du fonctionnement du MDR-3, alors une version Lite du MDR-E verra le jour dont les caractéristiques restent à finaliser.
♦ Liste des choses envisageables pour les versions à venir
- PROJET : Voir l’utilisation des sous-patches, abstractions et GOP (Graph-on-Parent) afin de ‘cacher’ tout ce qui n’est pas utile au performeur
- SEQ16 : Investiguer sous Pure Data v.0.50-0 (quand il sera disponible en version stable) l’objet [MTR] en v.0.3.x versus v.0.2 de Cyclone pour voir si il y a des améliorations dans la gestion des flux MIDI bruts
- SEQ16 : Voir à ajouter la mesure de la durée individuelle pour REC/PLAY par piste
- SEQ1 et SEQ16 : Implémenter la fonction ‘Ajout enregistrement à la fin de l’enregistrement actuel’ sans affecter ce dernier
- SEQ1 <=> SEQ16 : Transposeur de canaux MIDI + Program Change + Drums HS/MIDI en lecture
Dans un premier temps, QMidiRoute, Routeur et utilitaire de filtrage/transposition MIDI (notes / vélocité / canaux / PC / PB / CC / etc.), est le bon candidat, avant d’essayer de l’implémenter directement dans le projet - SEQx : Investiguer la possibilité de lecture des fichiers .R00/.EVT, ceux des disquettes du MDR-3, afin de pouvoir utiliser nos bibliothèques de performances
♦ Lire la suite
• MDR Emulator Alpha v.0.2 – L’émulateur de MDR-3 pour Yamaha Electone
• Pour suivre l’évolution de ce projet MIDI/Audio :
- visitez la page dédiée au projet MDR-E+
Music Disk Recorder Emulator+ (MDR-E+) est un travail en cours (WIP)…