Yamaha Music Disk Recorder Emulator+ (MDR-E+)

• Music Disk Recorder Emulator+ (MDR-E+) is an improved, free/libre software emulator of the Yamaha MDR-3 (Music Disk Recorder) expander built with Purr Data. It is cross-platform and working at least under free/libre GNU/Linux, and proprietary macOS & Windows operating systems.

Music Disk Recorder Emulator+ (MDR-E+) est un émulateur logiciel amélioré libre/gratuit de l’expandeur Yamaha MDR-3 (Music Disk Recorder) développé avec Purr Data. Il est multi-plateforme et fonctionne au moins sous les systèmes d’exploitation libres GNU/Linux, et propriétaires macOS & Windows.

MDR-E+ is a FLOSS software published under GPL v3 license written with Purr Data (Pd-l2ork v2), an improved fork of Pure Data Vanilla, with a modern HTML5 GUI written in JavaScript using NW.js.

MDR-E+ est un logiciel FLOSS publié sous licence GPL v3 écrit avec Purr Data (Pd-l2ork v2), un fork amélioré de Pure Data Vanilla, avec une interface graphique HTML5 moderne écrite en JavaScript en utilisant NW.js.

Purr Data v.2.11.0 (Pd-l2ork v.2) is a free & open source (FLOSS) visual programming environment for real-time music and multimedia creation using Pure Data Vanilla v.0.48-0 engine and carrying on an HTML5 GUI (the last major revision of HTML). It is cross-platform and working at least under free/libre GNU/Linux, and proprietary macOS & Windows operating systems. Its GUI is available in 3 languages: English (default), French and German.

Purr Data v.2.11.0 (Pd-l2ork v.2) est un environnement de programmation visuelle libre/gratuit et open source (FLOSS) pour la création musicale et multimédia en temps réel utilisant le moteur Pure Data Vanilla v.0.48-0 et une interface graphique HTML5 (la dernière révision majeure de HTML). Il est multi-plateforme et fonctionne au moins sous les systèmes d’exploitation libres GNU/Linux, et propriétaires macOS & Windows. Son interface graphique utilisateur est disponible en 3 langues : allemand, anglais (par défaut) et français.

• The Yamaha MDR-3 expander was targeting (at least) the owners of the vintage Yamaha Electone HS Series (Hi-Style MIDI electronic organs) released in the late ’90s.

L’expandeur Yamaha MDR-3 ciblait (au moins) les propriétaires de la série vintage Yamaha Electone HS (orgues électroniques MIDI Hi-Style) commercialisée à la fin des années 90.

  • See the Electone HS brochure: in English
  • Consultez la brochure des Electone HS : en Français

• Performers who are willing to test the MDR-E+ project and to give feedback are the welcome!

Les performeurs qui sont désireux de tester le projet MDR-E+ et de donner un retour d’information sont les bienvenu·e·s !

• The next αlpha (5th) release of MDR-E+ is forecasted to be published during summer 2020. The MDR-E+ project is a Work in Progress (WIP)…

La prochaine version (5ème) αlpha de MDR-E+ devrait être publiée au cours de l’été 2020. Le projet MDR-E+ est un travail en cours…

◊ MDR-E+ project – Table of contents

The Control panel (normal+extended) of the original Yamaha MDR-3

MDR Emulator+ | An improved, Free/Libre and multi-platform S/W emulator of the Yamaha MDR-3 expander

MDR-E+ project could be also tailored
to other Yamaha Electone Series
by anyone who is interested!

♦ Current version as of 2019/11/24

• The current version of MDR-E+ is the 0.3.4 (αlpha 4th release).

mdr-emulator034.zip Build.20191124 File size ~ 130 KB

MDR-E+’s GUI is optimized for 16/9 screens with 1,920 x 1,080 resolution. As its GUI is freely zoomable on 15 levels + full screen without any definition loss, the performer can easily adapt it to her/his specific screen/taste. Bigger will be the screen better will be the readability.
As for all MIDI/Audio environment and Home Studio, I suggest to split MDR-E+ and the associated software across multiple screens and/or multiple virtual desktops (like under GNU/Linux systems).

MDR-E+ project under GNU/Linux

Yamaha MDR Emulator+ – Alpha v.0.3.4 | The last version of the improved Control Panel under GNU/Linux

• Purr Data

NOTE that before using Music Disk Recorder Emulator+ (MDR-E+)Purr Data v.2.10.0 or higher (a free graphical data-flow programming environment which is geared towards real-time interactive computer music and multimedia applications) must be installed on your computer under:
– either GNU/Linux with the recommended OBS/JGU (Open Build System / Johannes Gutenberg University) procedure,
– or Apple macOS or Microsoft Windows.

Make sure to read at least the following chapters of Purr Data Installation for setting up your fresh install:
  • macOS & Windows
  • GNU/Linux
  • Running Purr Data: First-Time Setup, macOS and Windows Users, Linux Users, Using JACK MIDI with Purr Data
  • – as well as- ‘Meet the Cat’ Tutorial – A quick introduction to Purr Data, how it came about, and how to use it, including Configuration: Audio and MIDI Devices, GUI and Startup Options and Getting Help

• MDR-E+ zipped file

The MDR-E+ project consists of 2 files: the program itself (a main module with about 20 integrated sub-modules) and an Electone HS image. The whole thing, after decompression, weighs only about 400 KB, of which 1/4 is for the image. These 2 files, after decompression, are to be deposited into the same folder of your choice on your computer.
Once on your computer with Purr Data installed and configured, to run MDR-E+, simply double-click on its *.pd file which will first launch Purr Data and then the program itself. And you are ready to go!

As always, the MDR-E+ project can be used as it is or freely modified – adapted by anyone to her/his particular taste. Do It Yourself (DIY) and tailor Music Disk Recorder Emulator+ to your particular needs and to your MIDI/Audio environment.

MDR-E+ project under Windows 10

Yamaha MDR Emulator+ – Alpha v.0.3.4 | The last version of the improved Control Panel under Windows

• Once « this crucial workaround » (which is only a workaround!) will have been implemented into all MDR-E+ project’s sub-patches containing a GOP (Graph-on-Parent)…

We could expect that MDR-E+ will include various improvements and bugs fixes as well as new major functionalities, which are not available on the physical Yamaha MDR-3 expander, like:
  • an Electone HS Voices Volume & Balance module,
  • a MIDI Channels Transposition module,
  • an Audio/Voice Recorder & Player module, and
  • a Last used Files & MIDI Chords Detector module,
  • but also the removal of [pd kbs] module (see after the picture)!
  • The default zoom level will be increased to offer a better readability to the performer.

The next αlpha (5th) release of MDR-E+ could look like this one

Yamaha MDR Emulator+ – Alpha v.0.3.34 | A preview of what the next release of the project could be!

NOTE that even with the implementation of Purr Data’s proposed workaround for its Audio engine, I am obliged to remove the [pd kbs] module and don’t add [Audio Effects] which are still too much demanding on CPU load when using real-time data flow (MIDI as well as Audio). These functions/modules could be reintegrated into MDR-E+ once Purr Data would have been able to fix the bad RT behavior of its Audio engine, in fact how badly the GUI is impacting the Audio engine performances.

♦ Main features

Summary for the current αlpha 0.3.4 version of MDR-E+ and the next αlpha*.

CONTROL PANEL General Purpose Sequencer Performance + Cur-Reg Sequencers SysEx Bulk Sequencer Comment
[seq MIDI Type 0] [seq T1] to [seq T16] + [seq TREG] [seq BULK] i.e. 19 [seq] in total
FEATURES MIDI Recorder-Player + Conversion 1xTK => 16+1xTK Electone MIDI Performance + Cur-Reg SysEx + Conversion 16+1xTK => 1xTK HS ALL RAM SYSEX Much more than the original MDR-3
MIDI IN/OUT √ [midiin] + [midiout] √ [midiin] + [midiout]
+ [sysexin]
√ [sysexin]
+ [midiout]
MIDI THRU   Built-in loopback
Channel/Track 16×1 1×16 + 1xSysEx 1xSYSEX  
RT RECORD √ track by track or all Real Time
Write SMF √ Format 0     Std MIDi File
PLAYBACK √ track by track or all [bang) [start)
Read SMF √ Format 0 & 1     Std MIDi File
Conversion √ [seq0] <=> √ <=> [seq1-to-16 + cur-reg]   Mono/Multi TKs
File disk Read/Write
.txt + .mid
Use System File Manager
Chrono display √ mm:ss √ mm:ss   [clock]
Play Tempo √ +/- 40-240 bpm √ +/- 40-240 bpm   [start) [metro]
Full Music Programmer
√ Separate Playback commands for CSP/RSP + FMP   Electone HS Series
Synchro Tempo   √ internal/external   Auto / Manual
* HS Voices Volume + Balance
UK + LK + Arp. Chord + Rhythm UK + LK + Arp. Chord + Rhythm   * in next Alpha
* MIDI Channels Transposition from among CH1-to-16 <=> to among <=> CH1-to-16   * in next Alpha
* Audio/Voice Recorder & Player Can be used in standalone mode or in synch. with General Sequencer   * in next Alpha
* MIDI Chords Detector Recognizes several hundreds of chords Chords names + Associated notes + Bass   * in next Alpha
** MIDI HS Keyboards
has been removed until Audio engine RT issues are fixed   ** removed & postponed
** Audio Effects
Chorus, Reverb, Vibrato & Vocoder as above ** postponed

Note: A number of Purr Data objects and glue are not really required for the good operation of the MDR Emulator+. They are only present to check the smooth running of the project and facilitate its debugging.

♦ Project Synoptic

This synoptic is presenting the principal parts (modules) of the MDR-E+. It allows the performer to better understand how the project works for easy use and appropriation.

Yamaha MDR Emulator+ – Alpha v.0.3.18 | Project Synoptic

♦ Releases History & Changes Log (in English & French)

• 2019/12/12 — MDR Emulator+ Alpha v.0.3.4
   The MDR-3 Emulator for Yamaha Electone HS Series
(English version)

  • 4th release
  • Optimization of the Control panel ergonomics which is always flexible, zoomable on 16 levels including full screen
  • Added contextual messages for the performer in most modules
  • Added HS – All and None (Tracks) choices to the Individual Tracks Performance Sequencer
  • The File Manager is now fully integrated directly into the two concerned modules (General Purpose Sequencer & SysEx Bulk Data Sequencer)
  • Fixed known bugs
  • Improvement and optimization of the different modules operation
  • Addition of flow control mechanisms (SysEx-In/Out and Midi-In/Out)
  • Strengthening mechanisms against crashes
  • Improved documentation in the different modules (for easy reuse in other projects)
  • The rest of the (invisible) work was essentially done under the hood

• 2019/11/27 — MDR-E+ Alpha v.0.3.4(French version)

• 2019/09/22 — MDR-E+ Alpha v.0.3(French version)

  • 3ème publication
  • Introduction d’un nouveau Panneau de Contrôle (Control Panel) complet, modulable, zoomable ainsi que plein écran
  • Utilisation de Modules (sous-programmes / sous-patches) afin de séparer l’interface utilisateur des modules de programmation Purr Data / Pure Data
  • Ajout de la fonction Lecture en boucle pour les modules ‘Performance Sequencer’ et ‘In/out Sequencer’
  • Ajout du module Get (Obtenir) le modèle de l’Electone HS Series (HS-8/7/6/5/4)
  • Ajout du module Memorized Registration on Electone = Changement mémoire de registration sur l’Electone HS
  • Ajout du module Expression Pedal = Contrôle du volume audio de l’Electone HS
  • Ajout du module Full Music Programmer (F.M.P.) du panneau de l’Electone HS
  • Amélioration des possibilités du module Electone HS-Series ‘Pseudo’ Keyboards
  • Ajout d’une Documentation d’utilisation
  • Correction de bogues connus
  • Optimisation du fonctionnement des différents modules
  • Amélioration de la documentation des différents modules

• 2019/09/11 — MDR-E Alpha v.0.2(French version)

  • 2ème publication
  • PROJET : Disposition sur 2 écrans, un pour le Panneau de contrôle (commandes) + un pour les Séquenceurs et Messages SysEx afin de pouvoir ajouter les fonctions manquantes et améliorer le fonctionnement
  • PROJET : Correction des bogues et dysfonctionnements connus, et ajout de commentaires (en anglais pour les non francophones intéressés par ce projet)
  • FICHIERS : Le gestionnaire de fichiers a été simplifié et optimisé
  • AFFICHAGE : Les notes sont affichées sur le panneau de contrôle avec sélection d’une des 3 sources MIDI
  • SEQ16 : Les 16 pistes sont maintenant toutes gérées individuellement pour permettre une utilisation mix orgues Electone ou MIDI généraliste (autres équipements MIDI compatibles GM/GS/XG ou pas)
  • SEQ16 : Ajout LED d’activité REC/PLAY pour chaque piste
  • SEQ16 : Ajout du désarmement réciproque des boutons REC/PLAY des pistes individuelles
  • SEQ16 : Ajout de la gestion de END des pistes individuelles pour PLAY ALL et PLAY/CONVERT
  • SEQ16 : Ajout de la fonction ‘Tempo interne’ PLAY
  • SEQ16 : Amélioration de la fonction ‘Chronomètre’ RECORD/PLAY
  • SEQ1 : Amélioration de la fonction ‘Tempo interne’ PLAY
  • SEQ1 : Amélioration de la fonction ‘Chrnomètre’ RECORD/PLAY
  • SEQ TRAM : Amélioration de son fonctionnement
  • SEQ TREG : Modification de son fonctionnement
  • SYSEX : Modification de la gestion des messages (TRAM et TREG)

• 2019/08/29 — MDR-E Alpha v.0.1(French version)

  • 1ère publication
  • POC – Proof of concept / Démonstration de faisabilité

MDR-E+ project using VMPK (3 instances) for cloning the 3 keyboards (UK + LK + PK) of Yamaha Electone HS Series organs

Yamaha MDR Emulator+ | Pseudo Keyboards vs VMPK (Virtual MIDI Piano Keyboards) under GNU/Linux

♦ MDR-E+ project has been in STAND-BY for six months (~ 1st half of 2020)!

Why that? To make it short…
Purr Data (currently version 2.10.1) has still serious ongoing issues with the proper management of real-time MIDI and Audio data. So, in these conditions it’s making no sense to pursue further the development of this project. It should return to life when the developers of Purr Data will have fixed these major issues, sooner or later.

Pourquoi cela ? Pour faire court…
Purr Data (actuellement la version 2.10.1) a encore de sérieux problèmes en cours avec la bonne gestion en temps réel des données MIDI et Audio. Dans ces conditions, cela n’a donc aucun sens de poursuivre le développement de ce projet. Il devrait reprendre vie lorsque les développeurs de Purr Data auront résolu ces problèmes majeurs, tôt ou tard.

⇒ April 23rd, 2020 — A « workaround » (but not the final solution) was proposed by its development team. See detail at the end of this chapter.

23 avril 2020 — Une « solution alternative » (mais pas la solution finale) a été proposée par son équipe de développement. Voir détail à la fin de ce chapitre.

Short explanation of one of these major Purr Data’s issues

Purr Data has several big issues with the real-time MIDI & Audio data management. The problems are increasing as the project is getting bigger. One of them is a very bad handling of the mouse leading to increase abnormally the CPU load as you just move the mouse on the top of the project’s control panel, up the complete freeze of the project!

Then, when I’m effectively running (with EditMode = Off) such or such GOP(s), the situation is getting worse and worse, leading very quickly to continuous erroneous MIDI values, audio glitches from short to long, random freezes of few seconds and finally totally freezing the whole project by just moving the mouse over the GOPs. This is an undocumented and hidden feature of Purr Data!

Purr Data 2.10.1 / All GOPs = IDLE (except [pd dt]) / DSP = OFF => Moving the Mouse => See the very unexpected bad impact on CPU load on the following 2 screen captures.

It’s the same very bad behaviour under GNU/Linux (Linux Mint 19.3) with/without JACK as well as under Windows 10 (v.1909) with/without JACK or ASIO. There is no error or warning mentioned in the Purr Data’s Console.

a- with EditMode = OFF (Purr Data + System Monitor together)

Yamaha MDR Emulator+ – Alpha v.0.3.21 | Major real-time issues with Purr Data 2.10.1 just when moving the mouse!

b- with EditMode = OFF (Purr Data + Htop alone)

Yamaha MDR Emulator+ – Alpha v.0.3.21 | Major real-time issues with Purr Data 2.10.1 just when moving the mouse!

• ‘Workaround’ proposed by Purr Data’s Development Team (04/23/2020)

The Real Time big problem was confirmed by Purr Data’s Leader.
There are 2 combined major issues.

The first one is how the Pure Data Vanilla engine (used by Purr Data) is very poorly managing the mouse moves especially in GOPs (Graph-on-Parent) embedded into medium to more complex sub-patches.
The second one is the additional system resources needed by NW.js – the HTML5 graphic engine of Purr Data versus the legacy Tcl/Tk of Pure Data.

Proposed workaround (but not the final solution !)

I will not enter in the detail of Purr Data (Pd-l2ork v2) / Pure Data functioning. There are good articles and books available on the web where you can find all the necessary explanations.

Hereafter the comments from the Team Leader of Purr Data
  • The spikes shown in Gnome Performance Monitor are probably a result of the Audio engine, not the GUI toolkit.
  • Since the Audio engine is the CULPRIT, I would guess the spikes would look roughly the same in Pd Vanilla. The way it works in both pieces of software is this:
    • GUI toolkit calls a routine when mouse motion is detected.
    • The routine forwards a ‘motion’ message to the Audio engine with the mouse coordinates for that particular canvas.
    • The Audio engine iterates over EVERY object on the canvas until it finds the one under those mouse coordinates. (Or if there’s nothing under the mouse it iterates over the entire visible patch.)
  • For GOPs it gets even worse — the Audio engine will get the list of inner objects and iterate through those, too.
  • There’s an outstanding GSoC project to change this algorithm so that you don’t get those spikes.
  • In the meantime: I noticed that some of your GOP canvases have a lot of objects hidden inside which don’t get displayed on the parent. For example — inside the perf-seq subpatch you have over 400 objects. Even if that were the only GOP subpatch being displayed, every time you move the mouse on an empty area of the parent canvas the Audio engine will iterate over 400 objects!
  • That particular GOP subpatch appears to have about 40 Gui objects for display in the GOP window. If you were able to hide away all those other 400 objects in a single [pd] sub-patch you should see a 10x efficiency boost. I see a big 350 object chain in perf-seq which only has two connections going into it. So maybe you could test putting that in a [pd] sub-patch.
  • Depending on how many objects are in your other GOPs that workaround might be enough to avoid dropouts in audio and MIDI.
Proof of Concept for this Purr Data workaround which is not the final solution!

I just finished implementing and testing above proposal as a POC on one part of my MDR-E+ project, using the most demanding one; i.e. [pd perf-seq]. The result is very positive and the CPU spikes up to 100 % are definitively gone down to ± few 10%s, which still need to be reconfirmed and investigated later on when Purr Data will have implemented its new Audio engine behavior. Wait and see.
The principle of Russian (nested) dolls is really a good one to turn around the conceptual limit of Pure Data / Purr Data, but it requires a lot of and too much works to adapt and modify ALL modules (patchs and subpatchs) in my project. In add, with this additional constraint I loose the at-a-glance view of all my sub-patches, which is very bad for a so-called visual programming language.

Main patch (the higher level; i.e. the Control panel) + Sub-patches with GOP (restricted to the strict minimum of visible and no-visible objects) + Main part of each sub-patch into a separated & embedded [pd] sub-patch = a working workaround… until Purr Data will change the very bad behavior of its Audio engine.


MDR Emulator+ (MDR-E+) = An improved software emulator of the MDR-3 (Music Disk Recorder) expander for Yamaha Electone Organs | Un émulateur logiciel amélioré de l’unité d’extension MDR-3 (Music Disk Recorder) pour orgues Electone de Yamaha