This is a bit-accurate emulation of the classic 1980's era Yamaha TX816 rack-mounted synthesizer for Linux under X11 and Jack, It can contain up to 8 TF1s, the module version of the synthesis engine used in the original DX7. The emulator engine is based on my VDX7 synth.
Running the same voice on eight slightly detuned DX7s, panned across the stereo field, creates a rich, organic sound with a vibrant chorusing effect. Another common application is to layer several different voices, creating a multitimbral effect not possible on the single DX7.
Screenshot
See INSTALL.md.
By default the vtx816 command starts up with a fully-loaded rack of 8 TF1 modules. The -N flag will set the number of modules, from 1 to 8. For example, a TX216 has two modules and can be started by "vtx816 -N2".
The synth looks for a ram image file, usually under ~/.config/vtx816/vtx816.ram, but the path can be configured, and another ram file can be specified on the command line. It will autoconnect stereo audio output and MIDI inputs. Each TF1 has two separate MIDI in, one MIDI out, and one stereo audio out jack ports.
The best way to learn the synth's features is to refer to the original Owner's Manual, readily available online.
The TF1 module has a very rudimentary user interface - essentially 2 8-segment LEDs for the display, 5 status LEDs, and three pushbuttons. A long press (hold down) on the select button will cycle through 4 main "menus". Within each menu, short presses cycle through various submenu functions. The 2 LEDs display some often cryptic symbols to indicate what is happening. The top 2 buttons are used for inputs (yes/no, increment/decrement), in addition to MIDI switching and memory protect functions. The original system provided a pull out summary sheet of the menus and display functions, and that can be viewed by pushing the Pull Out button. The Owner's Manual is the key reference source.
TF1 modules are not the most user-friendly devices, to say the least. Back in the day, if you could afford one of these, you could presumably afford a full-time roadie to program it for you.
Apart from a few basic functions (e.g. MIDI channel, patch number, master tune, etc.), most of the synth's functions need to be programmed through MIDI sysex messages. The VDX7 soft synth, or even a hardware DX7, can be used to generate the sysex messages. Once programmed, TX816 does work as a standalone synth driven by a MIDI keyboard. It will respond to program change messages to change patches.
The TX816 MIDI implementation is documented in Midi Spec. Bear in mind that the TX816 uses a foot controller and breath controller, in addition to the sustain pedal, channel aftertouch, modwheel, and pitchbend wheel. Some voices depend on use of these controllers, so you should assign appropriate knobs, sliders or what-have-you on your MIDI keyboard.
In addition to the TX816, for convenience the app includes a simple mixer allowing you to set gain, stereo pan, and mute/solo for each module. The original TX816 required an external mixer to mix down the modules.
Each TF1 module presents a stereo audio out (through the mixer), two MIDI In ports, labeled midi_com and midi_ind, and one MIDI Out port midi_out. The active MIDI In port can be selected using the top front panel button, and the selection is indicated by the LEDs.
The synth autoconnects only the midi_com port. The midi_ind and midi_out ports are not autoconnected. By default the chassis "OUT SLOT" selector is disabled, and all of the midi_out ports are active. Jack will properly multiplex the messages together if connected to a single port.
There is a command line option to activate the "OUT SLOT" selector, whose only function is to disable MIDI send on all but the selected module. Apart from nostalgia, there is no real point to using this option on a modern virtual synth. It is only available to model the historic functionality of the chassis, from the days before MIDI multiplexing was technically feasible.
The command line -h option returns:
Usage: tx816
-N --modules <1-8> : Number of modules
-a --noauto : Don't autoconnect Jack midi
-r --rom <file> : Filename (load a firmware ROM)
-b --bank : Load factory voice banks
-s --save <file> : Filename (save/restore RAM memory file, default ~/.config/vtx816/vtx816.ram)
-p --port <regex> : Port (jack audio port to connect to)
-i --midi-in <regex> : Midi-in (jack midi in port regex to connect to)
-o --midi-out <regex> : Midi-out (jack midi out port regex to connect to)
-c --crystal <0-50> : Randomize Crystal frequency tolerance to PPM
-O --outslot : Use chassis's MIDI out slot setting (otherwise send on all modules)
-q --quiet : Quiet (no terminal stdout)
-v --version : Version
-h --help : This help
The synth will try to autoconnect to all Jack audio sink ports. The "-p" option allow you to specify a specific port or ports (using a regex).
The synth will also try to autoconnect Jack MIDI ports (the "-a" option prevents this). The "-i" and "-o" options allow you to specify which MIDI ports to connect to for input and output respectively. Jack allows these to be regular expressions (though the exact regex syntax is evidently not documented). The TF1 transmits MIDI, but not notes, only sysex messages intended be sent to a DX7 or saved to files for backups.
With no option, the synth will try to read a file in the user's home directory "~/.config/vtx816/vtx816.ram", which contains the persistent state of the synth's RAM.
The "-s" option allow you to use a different RAM image file, rather than the one saved in .config.
The "-r" option allows you to load an alternative firmware ROM into the synth.
The "-c " option allows you to specify a tolerance in parts-per-million for TF1's master clock crystal. The default is 0, so each TF1 runs on an exact 9.4265 Mhz frequency. A tolerance value of up to 50 will randomize each module by up to +/- that PPM tolerance. Real crystals vary slightly, and this may contribute slight frequency and phase differences between the modules.
You can preload a factory patch bank with the "-b" option.
It's best to start with one of the predefined RAM images and modify it with SYSEX messages, but if you want to build a RAM from scratch, these are the lengthy and painful steps:
-
First be sure you have Jack running, and check that your keyboard and audio interface are working.
-
Start vtx816 using and empty RAM file, either using "-s newfile.ram" or delete (and backup!) ~/.config/vtx816/vtx816.ram.
-
Test the audio output by selecting the Utility menu (long presses on the Select button until the 4th menu appears on the LED readout, then short presses to the Audio Check submenu, then press the Yes button to turn on the 440 hz test tone).
-
You should see the top LED flash when you play notes on the keyboard, indicating the TF1 is receiving the messages, but there will be no sound yet.
-
Turn off Memory Protect, and send a 32 voice DX7 sysex message (these are always 4104 bytes) to the TF1 you are working on. You can use a DAW, a VDX7, a midi sysex utility, or even a real DX7 (if you have the appropriate MIDI interface). The LED display changes to indicate a successful receipt of the file.
-
Select a voice using the Edit menu and Select Program Number for Edit submenu (or send a MIDI Program Change message to set a voice).
-
Initialize the Performance parameters, either by sending a sysex containing the appropriate data (confusingly, these sysex are also 4104 bytes, but a different type of message). Or just initialize the defaults using the Utility Menu, Clear And Initialize All Functions submenu (and press Yes).
-
Set the Attenuation volume to something above 0 (typically the maximum, 7) using the Edit menu, Attenuate submenu.
-
Set Key Limit ranges The Low Limit defaults to the minimum key (C-2), but the High Limit has the same default (and you will not get any sound), so raise it by holding the + button, typically to the maximum (G8).
-
Be aware that some patches use the foot controller or breath controller to set the volume, and on any patch change they are initially 0, so if still no sound, send 127 on MIDI controller 4 (foot) and/or 2 (breath).
-
You should now finally get sound out of the TF1, but the Master Pitch will be at its minimum, which is about 75 cents flat. Use the Program Number (first) menu, Tune Master Pitch submenu to raise it up to typically 0 for standard concert pitch.
-
At this point it should be working. Now repeat for the other 7 modules :-)
The TF1's MIDI protocol, including sysex formats, is documented in the Owner's Manual.
With 8 modules running, the synth generates a very high CPU load. Jack will run each module in a separate thread, so all the cores on a computer can be used. Neither Jack nor the synth try to pin modules to specific cores, but depend on the Linux scheduler to manage the load.
The synth can run on a fairly modest 64-bit laptop without incurring xruns, but the system needs to be carefully configured. Some tips to avoid xruns:
- Set up Jack to run in real-time mode mode with a high priority (typically 95).
- Run the system as lean as possible (no open browsers, etc.).
- Turn off any CPU frequency scaling.
- While not absolutely necessary, a low-latency kernel optimized for pro audio can be very beneficial.
Note that when you select Mute on the mixer, not only is the audio muted, but also the TF1 stops clocking the CPU intensive EGS and OPS chips, resulting in a considerable savings in CPU load. The TF1 will still respond and reply to MIDI messages and user interface actions. Muting all the modules may be helpful in saving CPU cycles when programming voices. Note also that if you Solo a module, all the others are muted, so a quick way to stop all audio is to both Solo and Mute one module.
The following original documents can be readily found online in various archives:
- Yamaha TX816/TX216 FM Tone Generator System - Owner's Manual
- Yamaha TX816/TX216 FM Tone Generator System - Operations Directory
- Yamaha TX816/TX216 FM Tone Generator System - Service Manual
- Yamaha TX816/TX216 FM Tone Generator System - Performance Notes
General DX7 manuals:
- Yamaha DX7 Digital Programmable Algorithm Synthesizer - Operation Manual
- Yamaha DX7 Digital Programmable Algorithm Synthesizer - Voice Library with Performance Notes
- Yamaha DX7/9 Digital Programmable Algorithm Synthesizer - Service Manual
- "The Complete DX7." by Howard Massey
There are a great deal of archives with DX7 voice banks and assorted trivia information.
