<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<title>hexter DSSI plugin</title>
<link rel="stylesheet" href="screen.css" media="screen">
<table summary="visual layout"><tr><td>
<img src="hexter-icon.jpg" width=144 height=144 alt="hexter icon">
<h2>Yamaha DX7 modeling DSSI plugin</h2>
<a href="index.html">DSSI main page</a>
<a href="download.html#hexter">hexter download</a>
<p>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, and
recreate the sound of the DX7 with greater accuracy than any
previous open-source emulation (that the author is aware of....)</p>
<p>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 Linux audio applications. More information on DSSI
can be found on the <a href="index.html">DSSI main page</a>.
<p>hexter is written by Sean Bolton, and copyright (c)2004 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:</p>
<li> an email stating where you're from and how you're using
hexter, sent to <musound /at/ jps /dot/ net>.
<li> copies of or links to music you've created with hexter.
<li> any favorite patches you create for hexter, or any patches
that work on a real DX7 but not on hexter.
<li> suggestions for improving hexter.
<p>hexter benefited greatly from previous open-source efforts, most
notably Juan Linietsky's rx-saturno, and <a
href="http://www.fluidsynth.org/">FluidSynth</a> by Peter
Hanappe, et al. See the AUTHORS file in the hexter
distribution for more details.</p>
<p>hexter requires the following:</p>
<li> <a href="download.html">DSSI</a> version 0.4 or greater.
<li> <a href="http://plugin.org.uk/liblo/">liblo</a> version
0.12 or greater, a library implementing the Open
Sound Control protocol.
<li> <a href="http://www.freedesktop.org/software/pkgconfig/">
pkgconfig</a> with PKG_CONFIG_PATH set appropriately to pick
up DSSI and liblo.
<li> <a href="http://www.gtk.org/">GTK+</a> version 1.2.x.
<li> the <a href="http://www.ladspa.org/">LADSPA</a> v1.x SDK.
<li> the <a href="http://www.alsa-project.org/">ALSA</a>
headers (DSSI plugins use ALSA structures, but not
the actual drivers, so you don't necessarily need the
<li> a working DSSI host. hexter has been tested with the
jack-dssi-host available in <a href="download.html">the DSSI
<h2>Download and Installation</h2>
<p>hexter may be downloaded from <a
<p>hexter uses GNU autoconf and automake, and pkgconfig, so
installation is only slightly more complicated than
`<code>./configure && make && make install</code>'. See the
README file for specifics.
<p>This mostly-boring screenshot shows the GUIs for two instances of
hexter. Note that sys-ex editing is currently being used in the
channel 1 instance (details below).</p>
<img src="hexter-screenshot.png" alt="hexter screenshot">
<p>To run the hexter plugin under the <code>jack-dssi-host</code> provided
in <a href="download.html">the DSSI distribution</a>, I do the
<li><p>Start <a href="http://jackit.sourceforge.net/">JACK</a>.</p>
<li><p>Start <code>jack-dssi-host</code>, supplying the correct
plugin path and filename (substitute <code><prefix></code>
$ DSSI_PATH=<prefix>/lib/dssi sudo jack-dssi-host hexter.so
<p><code>jack-dssi-host</code> should start, and moments later the hexter
graphic user interface should appear.</p>
<li><p>Use aconnect or <a href="http://www.suse.de/~mana/kalsatools.html">
kaconnect</a> to connect <code>jack-dssi-host</code> to a MIDI
source, such as <a
<li><p>Begin playing sounds! If you get no response, try selecting the
`Configuration' tab in the hexter GUI, and click the `Send Test
Note' button. 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
<code>DSSP_DEBUG</code> bit 2 set, which will cause the plugin
to continuously output a quiet buzz to help debug your outgoing
<p>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.</p>
<p>hexter can import DX7 patch bank files in two formats:</p>
<li><p>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.</p>
<li><p>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.) These must have the filename suffix
"<code>.dx7</code>" for hexter to recognize them.</p>
<p>You may use the "<code>Import Patch Bank...</code>" option in
the <code>File</code> 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.
<p>Several patch bank files are installed with hexter in
<p>You may also export patch banks using the <code>File</code> menu
"<code>Export Patch Bank...</code>" 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 --
hexter will not (yet) supply the "<code>.dx7</code>" extension for
raw patch dumps, so make sure you do.
<p>On the `Configuration' tab of the hexter GUI, there are four
controls for configuring hexter:</p>
<li><p>tuning: sets the tuning of this instance of the plugin,
as Hz for A-above-middle-C.</p>
<li><p>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.</p>
<li><p>polyphony (global): Sets the maximum polyphony for all hexter
instances running on this host. If you are getting xruns, try
reducing this setting.</p>
<li><p>monophonic modes: sets poly/mono operation for this instance of
the plugin to one of the following:</p>
<li>`Off' - polyphonic operation.
<li>`On' - monophonic operation, where the envelopes are
retriggered upon each incoming note on event.
<li>`Once' - monophonic operation, where the envelopes are triggered
only on the first note on of a legato phrase -- that
is, if you hold one note while playing a second, the
envelopes will not be retriggered for the second note.
<li>`Both' - monophonic operation, where the envelopes are
retriggered at each note on, and upon note off when
other keys are still held.
<h2>Sys-Ex Patch Editing</h2>
<p>hexter does not include a user interface for editing patches, but it
can receive MIDI system exclusive messages from you favorite patch
href="http://www.jsynthlib.org/">JSynthLib</a> works well in
combination with the ALSA <code>virmidi</code> device, or you can
try the ncurses-based editor included with hexter (see
<p>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.</p>
<p>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.</p>
<p>Note that hexter only <i>receives</i> 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.</p>
<h2>MIDI Controller Mapping</h2>
<p>Currently, hexter responds to pitch bend and sustain pedal controls.
Other controls will be implemented soon....</p>
<div align=right><small>Page hosted by <br><a href="http://sourceforge.net/"><img src="http://sourceforge.net/sflogo.php?group_id=104230&type=1" border="0" alt="SourceForge.net Logo"/></a></small></div>