|
|
hexterYamaha DX7 modeling DSSI plugin |
2007/4/11: hexter version 0.6.1 released! hexter now includes emulation of the DX7 LFO, plus amplitude and pitch modulation! Other new features include configurable performance parameters, better patch bank loading code, and a 0.5.x compatibility mode. (If you're already using the 0.6.0 release, you probably don't need to upgrade, but if you are distributing a 0.6.0 package, please do upgrade soon -- the installation paths in 0.6.0 were broken.)
2006/1/18: hexter version 0.5.9 released! New features include real-time control of the coarse frequency parameters, plus fixes for RPM, gcc 2.9x and 4.x, and Mac OS X 10.4 'Tiger'.
2004/12/29: hexter version 0.5.8 released! New features include a 'volume' control and MIDI CC volume handling, GTK+ 2.x or readline UIs, project directory handling, better error messages, and some new patches.
2004/11/16: Some recordings comparing hexter and a real TX7 are available here.
hexter is a software synthesizer that models the sound generation of a Yamaha DX7 synthesizer. It can easily load most DX7 patch bank files, accept patch editing commands via MIDI sys-ex messages (ALSA systems only), and recreate the sound of the DX7 with greater accuracy than any previous open-source emulation (that the author is aware of....)
hexter operates as a plugin for the Disposable Soft Synth Interface (DSSI). DSSI is a plugin API for software instruments (soft synths) with user interfaces, permitting them to be hosted in-process by audio applications. More information on DSSI can be found on the DSSI main page.
hexter is written by Sean Bolton, and copyright (c)2007 under the GNU General Public License, version 2 or later. While this software is 'free' within the requirements of that license, I (Sean) would appreciate any or all of the following should you find hexter useful:
hexter benefited greatly from previous open-source efforts, most notably Juan Linietsky's rx-saturno, and FluidSynth by Peter Hanappe, et al. See the AUTHORS file in the hexter distribution for more details.
hexter requires the following:
hexter may be downloaded from here.
hexter uses GNU autoconf and automake, and pkgconfig, so
installation is only slightly more complicated than
`./configure && make && make install'. See the
README file for specifics.
This mostly-boring screenshot shows the GUIs for three instances of hexter. Note that sys-ex editing is currently being used in the channel 1 instance (details below).

To run the hexter plugin under the jack-dssi-host provided
in the DSSI distribution, I do the
following:
Start JACK.
Start jack-dssi-host, supplying the correct
plugin path and filename (substitute <prefix>
as appropriate):
$ DSSI_PATH=<prefix>/lib/dssi sudo jack-dssi-host hexter.so
jack-dssi-host should start, and moments later the hexter
graphic user interface should appear.
Use qjackctl
or aconnect to connect jack-dssi-host to a MIDI
source, such as vkeybd.
Begin playing sounds! If you get no response, try clicking
the `Send Test Note' button in the hexter GUI. This sends a
note directly via the host to the plugin, so if you hear sound
now, look for a problem between the host and your MIDI source.
If you still don't hear sound, I'd look for a problem between
the host and your output device. If you continue having
trouble, you might recompile with DSSP_DEBUG bit 2
set, which will cause the plugin to continuously output a quiet
buzz to help debug your outgoing signal path.
hexter starts up with a default set of sound presets, or `patches', that you can select either by selecting the GUI `Patches' tab and clicking on the patch name, or by sending a MIDI program change from your MIDI source with the appropriate program number.
hexter can import DX7 patch bank files in several formats:
The standard 32-voice bulk dump sys-ex format. These are 4104 bytes long, and you can find a million of them by Googling for "dx7 patches". hexter places no restrictions on their filenames.
The standard single-voice (edit buffer) sys-ex format. These are 163 bytes long.
Raw packed patch data. These are 128 bytes per patch, and may
contain any number of patches (although hexter can only load up to
128 of them.) Note, though, that if the file is 8192 bytes long
and has the filename suffix ".tx7" or
".TX7", the second half of the file will be ignored
(Dr. T TX7 format).
Standard MIDI files containing either a 32-voice bulk dump sys-ex message or a single voice dump sys-ex message. If the file contains more than one qualifying sys-ex message, only the first will be used.
Voyetra SIDEMAN DX/TX format (9816 bytes long).
Two concatenated 32-voice bulk dump sys-ex messages (8208 bytes long.)
You may use the "Import Patch Bank..." option in
the File menu to import patches. After selecting the
filename, you will need to specify the program number (0 to 127)
at which to begin importing the patches.
Several patch bank files are installed with hexter in
<prefix>/share/hexter/.
You may also export patch banks using the File menu
"Export Patch Bank..." option. You can then select
which of the formats to save in, and what range of patches to
export. Finally, select the filename to which you want to save,
and click 'Ok'.
On the `Configuration' tab of the hexter GUI, there are six controls for configuring hexter:
tuning: sets the tuning of this instance of the plugin, as Hz for A-above-middle-C.
volume: adjusts the output volume for this instance, from -70dB to +20dB relative to a nominal reference level (-18.1dB per voice, which permits approximately 8 voice polyphony within -1.0 to +1.0 float.)
polyphony (instance): Sets the maximum polyphony for this instance of the plugin. If you attempt to play more notes than this setting, already-playing notes will be killed so that newer notes can be played.
polyphony (global): Sets the maximum polyphony for all hexter instances running on this host. If you are getting xruns, try reducing this setting.
monophonic modes: sets poly/mono operation for this instance of the plugin to one of the following:
disable LFO/Mod/Perf (0.5.x compatibility): selecting this check box will disable the LFO, amplitude modulation, pitch modulation, and performance parameter enhancements provided by hexter 0.6.0 and later versions, forcing it to sound just like the 0.5.9 version. This is provided for backward compatibility with existing projects that used hexter 0.5.9.
hexter does not include a user interface for editing patches, but on
ALSA systems, it can receive MIDI system exclusive messages from you
favorite patch editor/librarian.
JSynthLib works well in
combination with the ALSA virmidi device, or you can
try the ncurses-based editor included with hexter (see
extra/tx_edit.c).
Sys-ex patch editing is enabled on the `Configuration' tab by depressing the `Enable Sys-Ex Editing' button. The hexter GUI then creates an ALSA MIDI client and displays its client and port number in the status window below the `Sys-Ex Receive Channel' slider. Set the channel appropriately and route your patch editor to this port using aconnect or similar, and the hexter instance will be ready to receive patch edits.
Patch edits accumulate as an `overlay' replacing the current patch. Clicking the `Discard Changes' or selecting another patch from the `Patches' tab will discard the edits. Clicking `Save Changes into Patch Bank' will allow you to do just that.
Note that hexter only receives MIDI sys-ex messages, and does not send them. Also, it only receives single patch dumps and voice parameter changes, so any `get patch data from synth' or `send 32 voices to synth' functions of your librarian will not work -- any patch you wish the edit must originate in your librarian, or you must export it from hexter first as a file, then load it into your librarian from that.
The 'Performance' tab of the hexter GUI contains controls for the DX7/TX7 Performance Parameters:
pitch bend range: sets the response to MIDI pitch bend messages, in semitones.
portamento time: sets the portamento time. Note that as of version 0.6.1, the portamento code is still unfinished.
mod wheel sensitivity: sets the depth of response to MIDI modulation wheel control change messages (MIDI control change 1).
mod wheel assign: these three check boxes set which destinations the modulation wheel affects: selecting 'P' routes the LFO to pitch modulation (vibrato), 'A' routes the LFO to amplitude modulation (tremelo or wah), and 'E' routes the modulation wheel value itself to amplitude modulation.
foot sensitivity, foot assign, pressure sens., pressure assign, breath sens., and breath assign: these set the sensitivity and routing as described above for the foot controller (MIDI CC 4), for pressure (both channel and key pressure), and for the breath controller (CC 2), respectively.
In addition to the performance parameter MIDI messages mentioned above, hexter responds to MIDI volume (MIDI control change 39), sustain pedal (MIDI CC 64), and all-sounds-off, all-notes-off, and reset-controllers control messages (CCs 120, 123, and 121, respectively). The 'coarse frequency' parameter for each operator can also be controlled in real time via the following MIDI control change mappings:
Q. The plugin seems to work fine, but the GUI never appears. Why?
A. Make sure the hostname of your machine is resolvable (if not, the OSC messages can't be sent between host and GUI). If your machine's hostname is 'foo.bar.net', make sure you either have an entry for 'foo.bar.net' in /etc/hosts, or that your DNS server can resolve it. Test this with e.g. 'ping foo.bar.net'. To test that the GUI itself works, you can start it by itself (without a DSSI host) by giving it the '-test' option, for example:
$ <prefix>/lib/dssi/hexter/hexter_gtk -test