Dual/Stereo Data Editor

For 6 Operator FM Synthesizers

DX7-Edit.zip CRC32/MD5 codes: 6B0DE4C2/461565BF5A1286770E15E60ED4FB5540

Note: There have been a few minor bugs recently due to some big internal changes. The advantages of the changes are many and various, aimed at more programs to come, including an emulation of the DX5 based on this editor, and a much bigger project that may take months or years to finish. I have done all the work I need to do on DX7-Edit. I'll leave this note here for a while to remind anyone who wants it to replace any copy they have if they want to be sure those bugs are gone. If it's any consolation, the bugs were not all mine! Microsoft have a bad memory problem with the 'updown class' controls, so I have replaced all the code for those entirely with my own. Coronavirus lockdown time has given me a huge chance to make much better code in general, so have at it. :) If you have original Yamaha 6-operator hardware, you need this, probably a lot more than you think you do.

DX7-Data.zip CRC32/MD5 codes: F0EAB7A5/55955619D60AFEE850753A9DEEF0A109

This is version 2.1, which uses two instruments as a stereo pair.
The old single-instrument wxLua version can be found here.

Compatibility and context:

DX7-Edit is a DX7 MIDI System Exclusive patch editor. It works with these Yamaha instruments: DX7, TX7, DX5, DX1, TF1 (TX816 module), DX7 II S, D and FD, TX802, FS1R. It works with Native Instruments FM7 and with anything that uses standard DX7 MIDI SysEx data. Its data can be converted for the Yamaha SY77, SY99 and TG77 if you have a way to do it.

This program is for any 32 bit version of Windows, and will probably run on WINE in Linux. It will need a MIDI driver and hardware but no other support is needed. Unzip DX7-Edit.exe to wherever you want it, and run it. If it hasn't got a required file, it will make one with default data. More than one copy of DX7-Edit can be run at the same time if each has its own base directory and data files. This HTML page is the manual. After using DX7-Edit a few times, a lot of this stuff will come naturally, and you'll need this manual only to help you understand why stuff was done.

Data is saved and verified during every edit. Like the DX7, the program will shutdown and re-start with the current patch or edit state, including on-screen location. If you want it re-centred after moving it, put its top left corner beyond the top left corner of the screen before closing it. It will be centred next time it's used. Anyone familiar with a DX7's edit, init and recall buffers for copy and compare techniques will find those working as expected here, with extensions to mute, compare and copy sub-structures between different instruments, patches and algorithms.

Editor controls:

DX7-Edit is easy and fast, closely following the structure of the SysEx data while grouping things on pages for visual navigation. There are few buttons, but they do a lot. There is tooltip and status bar help for each of these, so after a few minutes of use you'll know what everything does. There are keyboard shortcuts for most operations, to help people who like speed in repeated tasks.

If JavaScript is enabled, clicking a page button will show its control page.

A parameter has a 'spincontrol', selected by clicking its buttons or its display, or by keyboard shortcuts. Its value is changed by using its buttons, the up/down arrow keys, a scroll wheel, or by double-clicking text for keyboard entry followed by the Tab or Enter key. When a parameter is selected, the Tab key will move to the next control in a loop that follows the order of parameters in a DX7 SysEx patch, moving to a new control page if it needs to. It will also select the text. Press the ESC key if you want to cancel an edit in mid-entry. Click and HOLD the left mouse button while hovering over either the text box or the buttons, then move the mouse up or down, to change a value with both speed and precision. People familiar with Cakewalk's Sonar and other high quaility software will recognise this trick, as they will recognise what happens if they double-click the spincontrol buttons, both of which will flash while the value is reset to a default that can be modified by editing the INIT file if you want a different default. Entering '*' or '-' will set the value to the upper or lower extreme of its range. Additional keyboard shortcuts are described on the inbuilt help pages, and are especially useful if you prefer keyboard access for speed instead of a using a mouse. These methods allow very fast data entry.

Some controls convert numbers to a more complex form as the DX7 does. For those controls, a direct text entry must be its numeric value. It is not always obvious what that is, but a bit of trial and error is harmless. This is useful when entering scaling break points from a paper data sheet, for example... Remember that text entry must be followed by pressing either the Enter or Tab key, or by clicking in another control. All other data entry methods directly update the stored value. Note! The Oscillator Tuning display is different, compounded from three controls, Tuning Mode, Tuning Coarse, and Tuning Fine, and although the Tuning Mode control is fully accessible, the other two are only reached through buttons or Tab order, the display between them is read-only. In a selected control, including the hidden tuning inputs, Ctrl+A will select all content to allow clean text entry.

Another way to help with paper data sheets is to re-arrange the envelope generator controls.

DX7 envelopes are not easy to understand. They can be arranged in two ways. One is to think of temporal progression of each rate to its associated level. This is useful when thinking about how they work, and is ideal for making sounds, but it's not the only way. Patch sheets usually follow the SysEx data structure, putting rates together, then levels. This is awkward for programming from scratch, but ideal when entering existing data by hand, so you can choose which way you need to see them. (Another quirk, not adequately covered in any texts I've seen, is that rates are not times. It takes less time for a fixed rate to go between closer levels. If levels are equal, the rate is often left at the default of 99, but that causes audible glitches in older instruments. To remove them, set the intervening rate to 72 instead of 99. This cleans the sound up a lot on slow envelopes.)

Files, patches and banks:

It's easier to load existing data than to edit from scratch. The toolbar's Load button will do this for a single patch file, but holding Shift while clicking it, or double-clicking it, opens the bank's Load panel. A single click, or pressing Esc, will go back to the editor, but repeating the last action will open a file dialog to find a bank file. If you select a patch file instead, it will tell you, but not load it. Both files have the extension '.syx' but a DX7 bank file has 4104 bytes, and a single patch file has 163 bytes. DX7-Edit has several ways to be sure it gets the right file type, and that the data is valid.

DX7-Edit protects other files as well as its own. When saving, a file must be absent, empty, or the right format. Overwriting inappropriate files will be denied. This prevents very nasty accidents!

Yamaha 6-operator DX patches or banks in other programs, saved as files with extension '.syx', will probably work with DX7-Edit. If not, they can be transfered by MIDI as described later.

Each '.syx' file is saved with a second file with extension '.xdx', meaning Extended DX. The DX7 standard patch and bank does not hold the settings on the Controls page, nor was there ever a standard method to hold all the settings in one SysEx message. The 'xdx' files hold the extra data.

Each of the two editors in DX7-Edit is an instrument that makes no sound on its own. Each has its own bank, patch selection, and edit state. Each editor is protected. Yamaha default to protecting bank data when starting, and DX7-Edit is the same. To change data in a bank, the 'Protect' setting on the Controls page must be switched off. The original DX7 cartridge 1, bank A, is shown here. Instrument 2 could hold bank B, but that's best for stereo sounds, one bank for each audio channel.

The 'Bass 1' patch is very good (and famous). Clicking on it selects it, and the patch number LED's light up. If MIDI is set up on the Config panel, it can be played. Clicking Load or pressing Esc will restore the existing edit state. To copy the bass patch to the editor, press the Enter key, or double-click the patch selection area. The Edit button will be disabled, but the first edit will enable it again for Compare mode, and an 'E' appears on the first digit of the instrument LED's. Clicking the Edit button or pressing Ctrl+E will switch to Compare mode, indicated by a 'C'. This makes it easy to listen for changes caused by multiple edits at once. Repeat the action to go back to Edit mode.

If enough edits are done, comparisons may be needed between the current state and some new minor edits. In this case, open the bank's Load panel and close it. The existing edit will be copied for Compare mode. New edits can be compared with it. To compare with another patch, select it on the bank's Load panel with a single click, then return to the existing edit. The DX7 would allow this trick, but only by using the Recall buffer after loading a saved patch.

The first edit blanks the patch number LED because the data is not the same as the original. Even if it becomes so, the link is broken. The patch number indicates that the data IS the same, and has not been touched, by you, by MIDI, or anything else. If the bank itself has been changed by storing a patch, a small LED to the right of the patch number will stay lit until the bank is saved manually to an external file. The bank is saved as local data, but the LED warns that backup is wise.

The 'Ref's Whistle' was particularly feeble... Best replace it with a bass! This lights that bank edit LED. Single clicks on the Save panel will audition patches as on the Load panel, but double-clicking commits to saving data. There is no 'Undo' here! This is why backup is wise. It always is! The different colours help to warn that this is where dangerous work may be done. Editing the Config file can change the colours, but they exist for good reason. Back it up, then explore at will.

The Save panel, unlike the Load panel, does not modify Compare mode data. Complex edit sessions may need multiple saved patch variants for tests. All Save methods protect the editor.

One last detail on Bank mode panels... Selecting patches may be done without clicking. Arrow keys will scan rows or columns, or scan the entire bank if Ctrl is held while using the Left/Right arrow keys. MIDI Program Change messages will also select patches, but only the lowest five bits of the number are used. Rather than use larger banks, it is easier to manage patches in different instruments, or load new banks. This is another good reason to get into the habit of saving them.

Program configuration:

Changes to the config are always saved, so what you see is what you get, there is no 'save' or 'cancel' here. Close the Config panel (or any panel) by pressing Esc, clicking its toolbar button, or clicking the Close (X) button at top right on the title bar, or by using Alt+F4.

Each setting is explained by text in its own control, but a summary of purpose is as follows:

The bank panels group patches in rows or columns. Envelope mode groups controls by stage or type. MIDI status is indicated by LED at the top right corner, MIDI monitor on the status bar, or both. Auto-send mode reduces delays by selecting how to send data according to hardware ability. MIDI Src and Dst are source and destination ports. MIDI input channels are one of sixteen, also accepting all (as 00). SysEx channels direct data to instruments at the far end of a MIDI output connection. Data Entry sets the 'control change' number for MIDI editing.

The toolbar:

Some detail is explained elsewhere, but this section covers the purposes for all buttons. Most programs can't use double-clicks on tool buttons. This one can, for three standard buttons for New (Initialise), Load and Save, and also for the two with antenna symbols. The purpose of double-clicks, or single-clicks while holding the Shift button, is to act on a bank instead of a single patch.

If at any time a button is useless or confusing, it is inactive to prevent harm to data.

New will load initialised patch data from 'INIT.syx' in the Data directory. DX7-Edit generates this file with Yamaha DX7 data, but you can make your own initialised data and save it in this file.

Load will import a patch file, or load a patch from the bank. If the Load panel is open, a second bank load call will open a new bank file after warning if the current bank has been changed.

Save exports the editor's data to a patch file, or saves it in the bank. If the Save panel is open, a second bank save action will save the bank to a file, and the bank edit LED, if lit, goes out.

Recall restores the last edit session. A DX7 saves to the recall buffer if you load a new patch. DX7-Edit allows editing of the new patch, recall is still possible if the new edit is not yet replaced.

Transmit sends a whole patch, or bank, on demand. Auto-send may be slow, especially if hardware can't use individual parameter SysEx. If Auto-send fails to work as expected, this won't.

Receive will request a patch or bank. Requested data always comes to the instrument that asks for it if it arrives promptly, even if the remote instrument is set to send it on a different channel.

Edit will close a Bank mode panel and return to the editor's previous state, then, if in Edit mode, it will alternate with Compare mode, which is always protected from direct input, and MIDI.

Algorithm displays a selector of DX7 algorithms which define the routing of signals in the synthesizer core and have more effect on sound than anything else, so these small maps are useful.

Config opens a panel of program settings which are self-explained in its controls, but colours can be edited if you close the program and edit the 'DX7-Edit.cfg' file (carefully) in a text editor.

Help opens a reference system. It is minimal, with tables of vital information like control label meanings and details of keyboard actions aimed at fast editing or bypassing a broken mouse.

There is also the instrument selector. This is not a standard method for a toolbar, but it's a very good place to put it. At any time while the edit control deck is visible, this will select the current instrument for display or editing. It has three digits to allow for future plans, but the one to watch is the first. It is either blank, or will be an 'E' or a 'C' during an edit to indicate Edit or Compare mode.

Operator copy and muting:

There are six numbered Operator buttons arrayed on the left side of three of the editor's pages.

Each 'operator' in a DX7 is a sinewave oscillator with its own tuning, envelope generator, level scaling, etc. There are six, linked in ways much more complex than most earlier synthesizers which rarely went beyond something called 'cross modulation'. The DX7 starts with such complexity as a minimum for most sounds. Problems that big are best considered in modules. This is why DX7-Edit has no standard Undo/Redo controls. They make little sense if you need to mute whole structures or move and copy them between parts of one or more instruments!

The DX7 can mute operators so we can hear what's left and edit it without distraction. Mutes are reset when power is switched off and on again. DX7-Edit is the same, but is much more useful...

The DX7 is complex. An editor must not be! It should not make things worse than they are already. Eye candy for envelope and level scaling display rarely helps more than ears and sounds and fingers. It actually maintains the illusion that DX7 editing is complex, instead of helping to simplify it. Clear, compact groups of controls help to guide thought better than graphs. As with a real musical instrument, DX7-Edit allows motor memory (muscles, nerves, etc) and good practise to make the most of them. The one exception is FM algorithm selection, because algorithms are hard to remember and because forcing changes of algorithm is a neat way to come up with new sounds.

A stack of operators in one algorithm will usually make the same sound in another but it will often use different numbered operators. Manoeuvring a stack that makes up one element of a sound, importing it to another algorithm that allows a better way to do other things, is extremely useful. A major obstacle in a DX7 was that it could not use its muting for accurate comparison, nor could it copy data between operators, which made the problem extremely awkward to solve.

DX7-Edit was specifically designed to solve this problem. These are the ways to do it:

Double-click the operator button to toggle the mute state. A DX7 mutes in Edit mode, not Compare mode. DX7-Edit does both. Different mutings can be set in each mode.

Left-click the operator button to copy the operator's data. The copy is available while the text persists on the status bar. It survives a change between Edit and Compare, or between instruments.

Right-click moves copied data for the current page to the selected operator, or all three pages if Shift is held. Copies can move from Compare mode but not to it. Compare mode can't be edited.

If an operator is muted while receiving new data, it will automatically be unmuted on the basis that it is important to hear what changed. When replacing Compare mode data with the existing edit (by open/close of the bank Load panel), its mute state will also be copied. If a patch had been selected for the replacement, the Compare mutes will be cancelled because the patch has no mutes.

MIDI, and the protected editor:

DX7-Edit doesn't only protect files, it protects an editor from MIDI. SysEx bulk data never changes an edit session unless it arrives without delay after a direct MIDI request for it. SysEx data normally arrives at the instrument whose number matches the data's SysEx channel, but an answer to a request comes to the instrument that asked for it unless it arrives too late to be redirected.

Standard MIDI data messages are relayed from input to output to allow musical control. Some of these can be intercepted to edit specific parameters under direct user control.

A way to mimic the DX7 data entry slider is to click on a control with one hand, then use the arrow keys with the other, but a real data entry slider, or any MIDI controller from 0 to 95 (set by Config panel), can edit any selected spincontrol. If its parameter specifies a note value, it can take direct input from a MIDI keyboard. Hold the Ctrl key while playing the note you want it to use.

Some DX7-compatible instruments may not use single parameter messages. DX7-Edit sends '.xdx' (Extended DX) data as individual 7-byte SysEx messages if Auto-send mode is set to 'Fast'. This is required for data on the Controls page. Two DX7-Edit programs can even control each other. This looks cool, if a tad pointless. A future version will have a synthesiser engine, where it really does help because it may run on its own dedicated machine, linked only by MIDI. The bank's Protect switch will work for a remote instrument on the selected MIDI output channel.

When an instrument is not in Edit mode it will take any MIDI SysEx messages addressed to it by MIDI channel, as expected of any instrument capable of remote configuration by patch data. This is one way to overcome bank size limits for those who insist on large sources of patch data.

The status bar can display a MIDI monitor, enabled by Config. This may hide other status text but the monitor takes precedence on the assumption that if you want to see it, you probably need it. It shows standard MIDI messages and 7-byte SysEx data. What you make of it depends on how well you know MIDI. This is a diagnostic tool for raw data, best switched off if your greatest need is low CPU usage and clear sighting of ordinary status messages.

Muting sends a message that a Yamaha DX synthesiser should understand if it is enabled for System Exclusive reception. It will do this even if Auto-send has disabled parameter messages.

Last words:

There are no more words. Unless you really don't understand, in which case you need this.