<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<book lang="en">
<!--
Copyright 2006 Milan Digital Audio LLC
Copyright 2009-2024 GrandOrgue contributors (see AUTHORS)
License GPL-2.0 or later (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html).
-->
  <title>GrandOrgue Help</title>
  <titleabbrev>GrandOrgue</titleabbrev>
  <bookinfo>
    <copyright>
      <year>2006</year>
      <holder>Milan Digital Audio LLC</holder>
    </copyright>
    <copyright>
      <year>2009-2024</year>
      <holder>GrandOrgue contributors (see AUTHORS)</holder>
    </copyright>
    <legalnotice>
      <title>License</title>
      <para>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
      </para>
      <para>
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.
      </para>
      <para>
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
      </para>
    </legalnotice>
  </bookinfo>
  <chapter>
    <title>Welcome</title>
    <para>
Welcome to the manual for GrandOrgue.
    </para>
    <itemizedlist mark="bullet">
      <listitem>
        <simpara>
Click the Contents tab to display a list of important topics about the
program.
        </simpara>
      </listitem>
      <listitem>
        <simpara>
Click the Index tab to display an alphabetical listing of topics.
        </simpara>
      </listitem>
      <listitem>
        <simpara>
Click the Search tab to search for a specific word in the help system.
        </simpara>
      </listitem>
    </itemizedlist>
  </chapter>
  <chapter>
    <title>Getting Started</title>
    <indexterm>
      <primary>Getting Started</primary>
    </indexterm>
    <sect1>
      <title>Introduction</title>
      <indexterm>
        <primary>Introduction</primary>
      </indexterm>
      <para>
GrandOrgue allows the user to load and play virtual pipe organs.
Using sample sets, GrandOrgue is able to combine the individual pipe
sounds and organ behaviors to simulate a variety of pipe organs.
      </para>
    </sect1>
    <sect1>
      <title>Sample Sets</title>
      <indexterm>
        <primary>Sample Sets</primary>
      </indexterm>
      <para>
GrandOrgue is capable of loading and faithfully reproducing a variety
of sample sets. The sample set format is described later in this
manual. The format is backward compatible to Hauptwerk&#8482; version
1 sample sets. As such, you won't be able to do anything at all with
GrandOrgue without at least one sample set. Sample sets generally come
packaged or with installers. By default, the software loads organs
from "Organs" in your documents folder, but you may store sample
sets wherever is convenient and space permits.

Please look at https://github.com/GrandOrgue/grandorgue/wiki/Sample-Sets for
more information.
      </para>
      <note><simpara>Some Hauptwerk&#8482; Organ Definition File keywords are not used by GrandOrgue and are reported in a pop-up window. These warning messages can be safely ignored</simpara></note>
    </sect1>
    <sect1>
      <title>Organ Packages</title>
      <indexterm><primary>Organ Package</primary></indexterm>
      <para>
An organ package is a self-contained archive file that can be opened directly
by GrandOrgue. It does not need to be formally installed on disk. It can
contain more than one sample set.
      </para>
      <para>
The software knows about a dedicated folder (by default: "Organ Packages" in
your documents folder) where organ packages can be dropped. Packages dropped in
that directory are automatically registered by GrandOrgue.
      </para>
      <para>See <link linkend="organ_package_format">The GrandOrgue organ package format</link> for a detailed description of the organ package file format.</para>
    </sect1>
    <sect1>
      <title>Features</title>
      <indexterm>
        <primary>Features</primary>
      </indexterm>
      <itemizedlist mark="bullet">
        <listitem>
          <simpara>
High definition output with supporting hardware
          </simpara>
        </listitem>
        <listitem>
          <simpara>
High precision internal processing for optimal sound quality
          </simpara>
        </listitem>
        <listitem>
          <simpara>
Integrated software reverberation
          </simpara>
        </listitem>
        <listitem>
          <simpara>
Polyphony management to avoid CPU overload
          </simpara>
        </listitem>
        <listitem>
          <simpara>
Low latency output with proper hardware support
          </simpara>
        </listitem>
        <listitem>
          <simpara>
Quick and easy MIDI setup, including "Listen for Event" and "Complex MIDI Event detection"
          </simpara>
        </listitem>
        <listitem>
          <simpara>
Lossless compression reduces RAM requirements by up to 40%
          </simpara>
        </listitem>
        <listitem>
          <simpara>
Release sample enhancements for realistic sound
          </simpara>
        </listitem>
        <listitem>
          <simpara>
All features and enhancements configurable
          </simpara>
        </listitem>
        <listitem>
          <simpara>
High speed loading and caching of sample sets
          </simpara>
        </listitem>
        <listitem>
          <simpara>
Save settings per sample set or export to settings files
          </simpara>
        </listitem>
        <listitem>
          <simpara>
Shipped with a small demo organ which is automatically loaded on the very first run of GrandOrgue after installation
          </simpara>
        </listitem>
      </itemizedlist>
    </sect1>
    <sect1>
      <title>Requirements</title>
      <indexterm>
        <primary>Requirements</primary>
      </indexterm>
      <sect2>
        <title>All Platforms</title>
        <itemizedlist mark="bullet">
          <listitem>
            <simpara>
SSE3 capable processor
            </simpara>
            <simpara>
<emphasis>NOTE: A newer, faster processor will permit a higher polyphony</emphasis>
            </simpara>
          </listitem>
          <listitem>
            <simpara>
Sufficient RAM to fully load the largest sample set you wish to use. A
64 bit OS is recommended to support larger sample set
sizes.<footnote><simpara> A 32 bit GrandOrgue is limited to less than
3 GB of loaded sample data and depending on your operation system,
loading more than 1.5 to 2 GB will inhibit some
features.</simpara></footnote>
            </simpara>
          </listitem>
          <listitem>
            <simpara>
A hard disk (or other storage) with enough free space to store sample sets.
The use of the cache increases the necessary disk space.
            </simpara>
          </listitem>
        </itemizedlist>
      </sect2>
    </sect1>
  </chapter>
  <chapter>
    <title>User Interface</title>
    <indexterm>
      <primary>User Interface</primary>
    </indexterm>
    <para>The user interface has a menu bar, a tool bar and a console section where the organ console is displayed.</para>
    <figure>
      <title>GrandOrgue User Interface</title>
      <mediaobject>
        <imageobject>
          <imagedata scalefit="1" width="100%" fileref="images/GO_Main_Frame.png"/>
        </imageobject>
      </mediaobject>
    </figure>
    <sect1>
      <title>Menu bar</title>
      <para>The menu bar has 4 menus:</para>
      <itemizedlist>
        <listitem>
          <simpara>File: file operations, exit</simpara>
        </listitem>
        <listitem>
          <simpara>Audio/Midi: manage settings</simpara>
        </listitem>
        <listitem>
          <simpara>Panel: manage additional panels</simpara>
        </listitem>
        <listitem>
          <simpara>Help: display on-line help</simpara>
        </listitem>
      </itemizedlist>
      <sect2>
        <title>File Menu</title>
        <indexterm>
          <primary>File Menu</primary>
        </indexterm>
        <para>
The File menu contains commands for dealing with the loading and
saving of sample sets.
</para>
        <sect3 id="file_load">
          <title>Load</title>
          <indexterm>
            <primary>Known organs list</primary>
          </indexterm>
          <indexterm>
            <primary>Load</primary>
          </indexterm>
          <figure id="knownorgans">
            <title>Known organs list</title>
            <mediaobject>
              <imageobject>
                <imagedata scalefit="1" width="100%" fileref="images/known_organs_list.png"/>
              </imageobject>
            </mediaobject>
          </figure>
          <para>Open and load a sample set from the known organs list which is updated whenever a new sample set is successfully loaded.</para>
          <para>Select an organ in the list, then click <emphasis role="bold">OK</emphasis>.</para>
          <note><simpara>The known organs list is managed in the <link linkend="manage_known_organs">Organs</link> Settings tab.</simpara></note>
        </sect3>
        <sect3>
          <title>Favorites</title>
          <indexterm><primary>Favorites</primary></indexterm>
          <indexterm><primary>Favorite organs</primary></indexterm>
          <para>This submenu displays the top ten organs in the known organs list. Organs display order is managed in the <link linkend="manage_known_organs">Organs</link> Settings tab.</para>
          <para>Choosing an organ in this menu opens and loads its sample set.</para>
        </sect3>
        <sect3 id="file_open">
          <title>Open</title>
          <indexterm>
            <primary>Open</primary>
          </indexterm>
          <indexterm><primary>Open organ</primary></indexterm>
          <para>
Open and load a sample set stored in a definition file. The location will be
remembered for the next open operation. The most recently used sample sets are
also remembered and available in the "Load", "Open Recent" and "Favorites" menu
items. Loading sample sets takes some time; a progress window will display
indicating estimated time remaining and other indicators.
</para>
          <para>When the sample set loads successfully, it registers in the <link linkend="settingstab">configuration file</link>, thus automatically feeding the known organs list.</para>
        </sect3>
        <sect3 id="file_recent">
          <title>Open Recent</title>
          <indexterm>
            <primary>Open Recent</primary>
          </indexterm>
          <para>This submenu displays the ten last used organs from the known organs list. Organs in this menu are ordered by last used date from newest down to oldest.</para>
          <para>Choosing an organ in this menu opens and loads its sample set.</para>
        </sect3>
        <sect3 id="install_package">
          <title>Install Organ Package</title>
          <para>
Opens a file chooser to navigate to a GrandOrgue organ package file (.orgue).
The package path is registered, and all organ definition files found within the
package are added to the <link linkend="knownorgans">known organs list</link>.
          </para>
          <para>An information popup is displayed when the operation completes.</para>
        </sect3>
        <sect3>
          <title>Organ Properties</title>
          <indexterm>
            <primary>Organ Properties</primary>
          </indexterm>
          <para>
Open a window which displays various characteristics of the loaded sample set
as provided by the sample set producer. If available, there is also a
link to "More Information" which will display additional information in
another application.
</para>
        </sect3>
        <sect3>
          <title>Preset</title>
          <indexterm>
            <primary>Preset</primary>
          </indexterm>
          <para>
Select the saved settings number. A single sample set can create and use up to 11 different saved settings.
          </para>
          <para>
Selecting the preset number triggers a reload of the sample set, using the presets stored at the selected number.
If no saved settings exist for that number, the sample set is reloaded from the organ definition file as provided by the
sample set creator.
          </para>
          <para>
A new saved settings set is created whenever the <link linkend="save">Save</link> menu item is selected.
The file is stored in the directory currently designated by the <link linkend="settingsstore">Settings Store</link>  parameter in the <emphasis>Options</emphasis> tab,
and the file name is meaningless (as in: not related to the sample set/organ/church name) for the user.
        </para>
        </sect3>
        <sect3 id="save">
          <title>Save</title>
          <indexterm>
            <primary>Save</primary>
          </indexterm>
          <para>
Save to the preset number currently in use; create a new file if none in use. The settings consist of the stop and piston MIDI messages; stop
engaged states; divisional, general, and program combinations;
volume spinner value; temperament setting; fine tuning data. Note that this is completely reversible using the <link linkend="resettodefaults">Reset to Defaults</link> option, and is the
recommended method for most users.
          </para>
          <para>
            The size and the screen position of all organ GUI panels are saved
            as well. When this organ is loaded again, all panels appear at the
            same screen positions and with the same size as they were saved.
          </para>
          <note>
            <simpara>
              Restoring the panel size and position may work not correctly on
              Linux with wayland windows system. If you need this feature, start
              your linux session with x11 windows system before launching
              GrandOrgue.
            </simpara>
          </note>
        </sect3>
        <sect3>
          <title>Update Cache</title>
          <indexterm>
            <primary>Update Cache</primary>
          </indexterm>
          <para>
Save the loaded and processed samples to hard disk. Doing so
decreases loading time at the expense of hard disk space.</para>
          <para>The cache file is stored in the directory currently designated by the <link linkend="cachestore">Organ cache</link>  parameter in the <emphasis>Options</emphasis> tab, and the file name is meaningless (as in: not related to the sample set/organ/church name) for the user.</para>
          <para>Creating or updating the cache takes some time; a progress window will
display indicating estimated time remaining and other indicators.
</para>
          <para>
Note that each different preset uses its own cache. The <link linkend="managecache">Manage cache</link> system option manages automatic creation/update of the current cache.</para>
        </sect3>
        <sect3>
          <title>Delete Cache</title>
          <indexterm>
            <primary>Delete Cache</primary>
          </indexterm>
          <para>Delete the current cache from hard disk.
</para>
        </sect3>
        <sect3>
          <title>Reload</title>
          <indexterm>
            <primary>Reload</primary>
          </indexterm>
          <para>Reload the currently loaded sample set from disk. This may be used to
quickly restore a sample set to its saved status. The currently selected preset file is reapplied if it exists on disk.
</para>
        </sect3>
        <sect3 id="resettodefaults">
          <title>Reset to Defaults</title>
          <indexterm>
            <primary>Reset to Defaults</primary>
          </indexterm>
          <para>Reset the currently loaded sample set to the settings as originally
supplied by the sample set provider. You will be asked to verify that
you wish to discard your modifications. Note that the file containing saved settings
currently in use is <emphasis>deleted</emphasis>.
</para>
        </sect3>
        <sect3 id="import_comb">
          <title>Import Combinations</title>
          <indexterm>
            <primary>Import Combinations</primary>
          </indexterm>
	  <para>
	    This menu item opens the file selection dialog that allows the user
	    to select either a yaml-file, created with <emphasis>Export
	    Combinations</emphasis>, or a .cmb-file, created with <emphasis>
	    Export Settings</emphasis>. In the second case apply only the
	    combination part of settings from a  previously exported settings
	    file to the currently loaded sample set. All other settings that
	    might have previously been changed are preserved.
	  </para>
          <para>
	    Note The file selection dialog is opened at the directory where
	    exported combination are stored, not where the settings files
	    are. For selecting a .cmb file you have to navigate to the
	    Export/import directory that is named <emphasis>Settings</emphasis>
	    by default.
	  </para>
          <para>
	    A settings file matches a sample set when the <emphasis>ChurchName
	    </emphasis> property of the settings file matches the <emphasis>
	      ChurchName</emphasis> property of the definition file.
	  </para>
        </sect3>
        <sect3 id="export_combinations">
          <title>Export Combinations</title>
          <indexterm>
            <primary>Export Combinations</primary>
          </indexterm>
          <para>
	    Saves current combination settings to a text file in YAML format.
	    The user can view this file and can import it later with <emphasis>
	    Import Combinations</emphasis>
	  </para>
        </sect3>
        <sect3 id="import_settings">
          <title>Import Settings</title>
          <indexterm>
            <primary>Import Settings</primary>
          </indexterm>
          <para>Apply a  previously exported settings file to the currently loaded
sample set. All current settings and combinations are overwritten.</para>
          <para>Note that settings may only be applied to a matching sample
set, and you will receive a warning if you try to do otherwise. The
location where the settings were imported from will be remembered for the next time.</para>
          <para>
A settings file matches a sample set when the <emphasis>ChurchName</emphasis> property of the settings file
matches the <emphasis>ChurchName</emphasis> property of the definition file.
</para>
        </sect3>
        <sect3 id="export_settings">
          <title>Export Settings</title>
          <indexterm>
            <primary>Export Settings</primary>
          </indexterm>
          <para>Save a settings file including the stop and piston MIDI messages; stop
engaged states; divisional, general, and program combinations;
volume spinner value; temperament setting; fine tuning data.
</para>
          <para><emphasis>Export Settings</emphasis> allows the user to choose a specific file name and folder. The latest location where settings were exported to will be remembered for the next time.</para>
        </sect3>
        <sect3>
          <title id="audiomidisettings">Settings...</title>
          <indexterm>
            <primary>Audio/Midi Settings</primary>
          </indexterm>
          <para>
Displays a tabbed dialog containing the various settings.
 See <link linkend="settingstab">Program Settings</link> for detailed information on this topic.</para>
        </sect3>
        <sect3>
          <title>Close</title>
          <indexterm>
            <primary>Close</primary>
          </indexterm>
          <para>
Close the currently loaded sample set. If you have made any settings
changes, you will be asked if you would like to save them before the
sample set closes. Note that this will also unload the sample set and
free the RAM it required.
</para>
        </sect3>
        <sect3 id="fileExit">
          <title>Exit</title>
          <indexterm>
            <primary>Exit</primary>
          </indexterm>
          <para>
Closes and exits the GrandOrgue app.
</para>
        <para>
          Exit can also be fired by a MIDI message, see Audio/Midi menu &rarr; <link linkend="midiobjects">MIDI Objects</link> (look for type Button, element Exit).
</para>
        </sect3>
      </sect2>
      <sect2>
        <title>Audio/Midi Menu</title>
        <indexterm>
          <primary>Audio Menu</primary>
        </indexterm>
        <para>
The Audio/Midi menu contains commands for dealing with loaded organs and
associated settings.
</para>
        <sect3 id="temperamentsMenu">
          <title>Temperament</title>
          <indexterm>
            <primary>Temperament</primary>
          </indexterm>
          <para>
Opens a bunch of menus and sub menus allowing to select a new tuning temperament.
</para>
          <figure>
            <title>Temperaments</title>
            <mediaobject>
              <imageobject>
                <imagedata scalefit="1" width="100%" fileref="images/temperaments_menus.png" security=""/>
              </imageobject>
            </mediaobject>
          </figure>
          <para>The first menu item is always <emphasis>Original temperament</emphasis>, which allows the user to return to the tuning provided by the sample set creator, including whatever pitch adjustments the user has done via the <link linkend="organsettings">Organ Settings</link> dialog.</para>
          <para>The samples are retuned on the fly when playing. No additional disk storage is required.</para>
          <para>User temperaments that are added in the <link linkend="temperamentTab">Temperaments tab</link> are dynamically displayed at the end of this menu</para>
          <para/>
          <mediaobject><imageobject><imagedata fileref="images/custom_temperaments.png" /></imageobject></mediaobject>
        </sect3>
        <sect3>
          <title>Organ Settings</title>
          <indexterm>
            <primary>Organ Settings</primary>
          </indexterm>
          <para>Displays a dialog which allows to set audio settings (amplitude, gain, tuning, etc.) at every level of the sample set from the whole organ level down to the individual pipe. See <link linkend="organsettings">Organ Settings</link> for detailed information on this topic.</para>
        </sect3>
        <sect3 id="midiobjects">
          <title>MIDI Objects</title>
          <indexterm><primary>Midi Objects</primary></indexterm>
          <figure>
            <title>MIDI Objects</title>
            <mediaobject>
              <imageobject>
                <imagedata fileref="images/Midi_Objects.png" />
              </imageobject>
            </mediaobject>
          </figure>
          <para>Opens a window displaying all GrandOrgue objects which can have a MIDI event assigned to them.</para>
          <para>The <emphasis role="strong">Configure</emphasis> button opens the <link linkend="midieventeditor">MIDI event editor</link> dialog for this element.</para>
          <para>Double-clicking on the element in the list opens the MIDI event editor as well.</para>
        </sect3>
        <sect3 id="accessibility-stops">
          <title>Stops</title>
          <indexterm><primary>Stops</primary></indexterm>
          <figure>
            <title>Stops</title>
            <mediaobject>
              <imageobject>
                <imagedata fileref="images/accessibility_stops.png" />
              </imageobject>
            </mediaobject>
          </figure>
          <para>
	    Opens a window displaying all stops and switches. Unlike GUI Panels,
	    it uses standard checkboxes instead of bitmap images, so it can be
	    used with a screen reader software.
	  </para>
          <para>
	    Checking or unchecking a stop or a switch causes engaging or 
	    disengaging the object in the organ
          </para>
        </sect3>
        <sect3>
          <title>Sound Output State</title>
          <mediaobject><imageobject><imagedata fileref="images/sound_output_state.png"/></imageobject></mediaobject>
          <para>
This popup tries to display <emphasis>actual</emphasis> latency. Note that the
estimate can be based on numbers provided by the audio hardware and drivers and
that it may vary. The RtAudio backend is more likely to display too low numbers.
          </para>
        </sect3>
        <sect3>
          <title>Panic</title>
          <indexterm>
            <primary>Panic</primary>
          </indexterm>
          <para>
The effect of the panic menu item is to reset the sound, stopping all
sound and turning off all notes. It may also be quickly accessed on
the toolbar or via the <emphasis>Escape</emphasis> key on the computer keyboard. This should be generally
unnecessary, although it may be useful if you need to quickly stop the
sound output, or if the sound is breaking up due to CPU overload.
</para>
          <para>
Panic button can also be fired by a MIDI message, see Audio/Midi menu &rarr; <link linkend="midiobjects">MIDI Objects</link> (look for type Button, element Panic).
</para>
        </sect3>
        <sect3 id="memoryset">
          <title>Memory Set</title>
          <indexterm>
            <primary>Memory Set</primary>
          </indexterm>
          <para>Enters memory set mode until the <emphasis role="bold">Memory Set</emphasis> menu option or toolbar
button is selected again. While the memory set is engaged, whenever
you push a divisional or general piston or activate a program change,
the organ will store the current settings to that piston or program
change rather than recalling them. For example, engaging a divisional
piston 1 during memory set will store the state of stops for that
manual into piston 1, which could then be pushed later (after memory
set has been disengaged) to recall those stops. A checkmark appears
next to the menu item, and the toolbar button remains pushed, to
indicate when memory set is active.
</para>
        </sect3>
        <sect3 id="PlayMidi">
          <title>Load MIDI</title>
          <para>
Opens a file chooser to select a recorded MIDI file. The location chosen in
this dialog will be remembered for the next time. The player starts as soon as
a file is selected.
          </para>
          <caution>
            <simpara>GrandOrgue stores MIDI data using a specific internal format that makes the file unsuitable for usage with a regular MIDI sequencer.</simpara>
            <simpara>
When a recorded MIDI file is played in another sample set than the sample set
used for recording, all recorded stop changes are silently <emphasis
  role="strong">ignored</emphasis>, thus preventing unexpected rendition.
            </simpara>
          </caution>
        </sect3>
        <sect3>
          <title>Log MIDI events</title>
          <para>Enables a MIDI monitor which displays all incoming and outgoing MIDI events to the <link linkend="messagelog">message log</link>.</para>
        </sect3>
      </sect2>
      <sect2 id="panel">
        <title>Panel Menu</title>
        <indexterm>
          <primary>Panel</primary>
        </indexterm>
        <para>
GrandOrgue provides additional panels. Some are predefined and contain fixed functions (crescendo, couplers, generals and divisionals). The organ definition can also ship organ specific panels.</para>
      </sect2>
      <sect2>
        <title>Help Menu</title>
        <indexterm>
          <primary>Help Menu</primary>
        </indexterm>
        <sect3>
          <title>Index</title>
          <indexterm>
            <primary>Index</primary>
          </indexterm>
          <para>
Opens this help document. Pressing F1 at other locations in the
program will jump directly to the appropriate topic.
</para>
        </sect3>
        <sect3>
          <title>About</title>
          <indexterm>
            <primary>About</primary>
          </indexterm>
          <para>Displays the splash screen.</para>
        </sect3>
        <sect3>
          <title>Check for updates</title>
          <indexterm>
            <primary>updates</primary>
          </indexterm>
          <para>
            Check if a newer version of GrandOrgue is available. If there is one,
            GrandOrgue will show you <link linkend="update-changelog">what changed</link> in the new version.
          </para>
        </sect3>
      </sect2>
      <sect2 id="update-available">
        <title>Update available!</title>
        <para>That menu appears only if update checking at startup is enabled and a new update is available.</para>
        <indexterm>
          <primary>updates</primary>
        </indexterm>
        <sect3>
          <title>Show changelog</title>
          <para>Opens a window that shows what changed between the installed version and the newest one.</para>
          <mediaobject id="update-changelog">
            <imageobject>
              <imagedata fileref="images/update_changelog.png"/>
            </imageobject>
          </mediaobject>
        </sect3>
        <sect3>
          <title>Download</title>
          <para>Opens the GrandOrgue releases page in the browser.</para>
        </sect3>
      </sect2>
    </sect1>
    <sect1>
      <title>Tool bar</title>
      <para>The tool bar provides a number of controls which can be accessed easily while playing the organ.</para>
      <sect2>
        <title>Memory Set</title>
        <indexterm>
          <primary>Memory Set</primary>
        </indexterm>
        <mediaobject>
          <imageobject>
            <imagedata fileref="images/memory_set.png"/>
          </imageobject>
        </mediaobject>
        <para>
This "button" is a shortcut to <link linkend="memoryset">Memory Set</link> in the <emphasis>Audio/Midi menu</emphasis>.</para>
        <para>The <emphasis>Shift</emphasis> key on the computer keyboard is a fugitive shortcut to this button: when the user clicks on a piston while holding the <emphasis>Shift</emphasis> key, the currently pulled drawstops are stored in the piston memory.</para>
      </sect2>
      <sect2>
        <title>Program Changes</title>
        <indexterm>
          <primary>Program Changes</primary>
        </indexterm>
        <mediaobject>
          <imageobject>
            <imagedata fileref="images/sequencer_control.png" arch=""/>
          </imageobject>
        </mediaobject>
        <para>
The spinner sets the current program number. This might be termed a
"sequencer" on modern computerized organs. It is possible to store up
to 1000 organ states and access them sequentially via the predefined
MIDI events, or access any setting directly through the spinner. You
may also use the left and right keys on the computer keyboard to scroll through
the programs, and down to reactivate the current program (if you have
changed the stops since last activating it, for example). Note also
that when memory set is engaged, the target program will be stored to,
i.e. if you push Shift + Right then the program would be advanced and
the current settings would be saved to this same next program.
</para>
        <para>More options are available on the <emphasis>Combination Setter</emphasis> panel.
</para>
      </sect2>
      <sect2 id="volumecontrol">
        <title>Volume Control</title>
        <indexterm>
          <primary>Volume Control</primary>
        </indexterm>
        <mediaobject>
            <imageobject>
              <imagedata fileref="images/volume_control.png"/>
            </imageobject>
        </mediaobject>
        <para>
The volume control sets the volume control <emphasis>in dB</emphasis>.
Left and right audio monitors are displayed next to the spinner. The clip indicator at the far right will turn red if
clipping occurs, and will stay red until the volume is adjusted.</para>
      </sect2>
      <sect2 id="releasetaillength">
        <title>Release Tail Length</title>
        <mediaobject>
          <imageobject>
            <imagedata fileref="images/release_control.png"/>
          </imageobject>
        </mediaobject>
        <para>
The release tail length control sets the duration the sound engine uses to play
the release section of the sample. The values are: Max, and a range from 50 ms
to 3000 ms by increments of 50 ms.
        </para>
        <para>The <emphasis>Max</emphasis> value makes the sound engine play the complete release section as provided by the sample set creator.</para>
        <para>The other values are used by the sound engine as the fade out duration of the sample release section.</para>
      </sect2>
      <sect2 id="transposer">
        <title>Transposer</title>
        <mediaobject>
          <imageobject>
            <imagedata fileref="images/transposer_control.png"/>
          </imageobject>
        </mediaobject>
        <para>The transposer control shifts the notes up or down by semitone steps. The allowed range is {-11, +11} semitones.</para>
        <para>Note that the samples are <emphasis>not</emphasis> retuned. This transposer works like the mechanical transposer on genuine pipe organs or reed organs: the <emphasis>keyboard</emphasis>  is shifted up or down, and if the targeted  note is missing (i.e. no sample) there is no sound.</para>
      </sect2>
      <sect2>
        <title>Polyphony Control</title>
        <indexterm>
          <primary>Polyphony Control</primary>
        </indexterm>
        <mediaobject>
          <imageobject>
            <imagedata fileref="images/polyphony_control.png"/>
          </imageobject>
        </mediaobject>
        <para>The polyphony control sets the maximum polyphony before GrandOrgue
will refuse to play any additional samples. To oversimplify, polyphony
is the number of pipes that may sound simultaneously; but polyphony
may also be consumed when a key is released. It is recommended to
experiment with this setting initially, but leave it once you find an
acceptable setting. Your setting should balance between too little
polyphony (where you might not be able to play many notes on large
sample sets) and too much polyphony (where the CPU will overload and
artifacts will appear in the sound). Note that "wet" sample sets
(those with considerable reverberation) will consume polyphony many
seconds after the note is actually released. The default setting of
2048 should provide a reasonable starting point on a 1GHz CPU. The polyphony monitor is displayed next to the spinner. The clip indicator at
the far right will turn red if the polyphony limit has been reached,
and will stay red until the polyphony is adjusted.
</para>
      </sect2>
      <sect2 id="panicButton">
        <title>Panic Button</title>
        <indexterm>
          <primary>Panic Button</primary>
        </indexterm>
        <mediaobject>
          <imageobject>
            <imagedata fileref="images/panic_button.png"/>
          </imageobject>
        </mediaobject>
        <para>The effect of the panic button is to reset the sound, stopping all
sound and turning off all notes. It may also be quickly accessed on
the toolbar or via the <emphasis>Escape</emphasis> key. This should be generally
unnecessary, although it may be useful if you need to quickly stop the
sound output, or if the sound is breaking up due to CPU overload.
        </para>
        <para>
Panic button can also be fired by a MIDI message, see Audio/Midi menu &rarr; <link linkend="midiobjects">MIDI Objects</link> (look for type Button, element Panic).
</para>
      </sect2>
    </sect1>
    <sect1>
      <title>Console Section</title>
      <para>
The console section displays the organ console and all its bells and whistles as provided by the sample set creator.</para>
      <para>Note: the figure above shows the "classical" church organ disposition. It is possible to design any kind of disposition, since all display elements are freely placeable anywhere on the console panel.
</para>
      <sect2>
        <title>Manuals</title>
        <indexterm>
          <primary>Manuals</primary>
        </indexterm>
        <para>
Each manual as well as the pedalboard is displayed in the center of
the screen. The keys are outlined when messages are received, and
can be engaged by clicking the mouse. Right clicking on a manual will
open its corresponding <link linkend="midieventeditor">MIDI Event Editor</link>.
</para>
      </sect2>
      <sect2 id="expressionshoe">
        <title>Expression Shoes</title>
        <indexterm>
          <primary>Expression Shoes</primary>
        </indexterm>
        <para>Expression shoes are displayed directly above the pedalboard, sometimes
referred to as "swell pedals", although they may control any of the
manuals (Great, Swell, Wonderful, etc). On a pipe organ, swell
shutters dampen the sound, and this is simulated in GrandOrgue by
adjusting the volume of the enclosed pipes. While the mouse is over a
pedal, you may
</para>
        <itemizedlist>
          <listitem>
            <simpara>use the mouse wheel to adjust its position, </simpara>
          </listitem>
          <listitem>
            <simpara>left click and drag the shoe to the desired position</simpara>
          </listitem>
          <listitem>
            <simpara>right  click to open its corresponding <link linkend="midieventeditor">MIDI Event Editor</link>.</simpara>
          </listitem>
        </itemizedlist>
        <para>The sample set creator can also provide a crescendo shoe.</para>
      </sect2>
      <sect2>
        <title>Drawstops</title>
        <indexterm>
          <primary>Drawstops</primary>
        </indexterm>
        <para>
The drawstops engage or disengage various components of the organ when
clicked - generally new ranks of pipes which are applied to each
manual. Other drawstops may perform actions such as coupling one
manual to another. This deals with the functionality of pipe organs
and is beyond the scope of this documentation. Right clicking on a
drawstop will open its corresponding <link linkend="midieventeditor">MIDI Event Editor</link>. Any changes
made there may be saved or exported into a settings file.
</para>
        <para>Note: Keep the left button pressed and sweep the mouse over the stop jamb to pull or push multiple drawstops in a single movement.</para>
        <para>Note: The "sweep" feature is usable on  all clickable display elements, and should be very useful with touch screens.</para>
      </sect2>
      <sect2>
        <title>Pistons</title>
        <indexterm>
          <primary>Pistons</primary>
        </indexterm>
        <para>
Pistons generally perform an action when clicked and do not have an
on/off toggle, although some pistons may toggle in this way. Pistons
often recall drawstop combinations, and when used in combination with
the Memory Set, you can store your own combinations in the
pistons. Right clicking on a piston will open its corresponding MIDI
Event Editor. Any changes made there may be saved or exported into a
settings file.
</para>
      </sect2>
      <sect2>
        <title>Panels</title>
        <indexterm>
          <primary>Panels</primary>
        </indexterm>
        <para>
GrandOrgue provides additional panels. These panels work as console extensions and are not displayed by default. They can be accessed via the <link linkend="panel">Panels</link> menu.</para>
      </sect2>
    </sect1>
    <sect1 id="messagelog">
      <title>Message log</title>
      <figure><title>Message Log</title><mediaobject><imageobject><imagedata fileref="images/message_log.png" security=""/></imageobject></mediaobject></figure>
      <para>Whenever GrandOrgue needs to display a message, it opens a pop-up window. Messages are displayed in reverse chronological order : newest on top of the window.</para>
      <para>Messages are displayed with a rating icon.</para>
      <para><inlinemediaobject><imageobject><imagedata fileref="images/warning_message_icon.png" /></imageobject></inlinemediaobject> Warning message</para>
      <para><inlinemediaobject><imageobject><imagedata fileref="images/serious_message_icon.png" /></imageobject></inlinemediaobject> Serious message</para>
      <para>
Right-clicking anywhere in this window displays a small menu which copies the
window's content to the clipboard. When pasted to a file, the messages are
displayed in chronological order: oldest on the first line.
      </para>
    </sect1>
  </chapter>
  <chapter id="midieventeditor">
    <title>MIDI Event Editor</title>
    <indexterm><primary>Midi Event Editor</primary></indexterm>
    <para>
Every console element, including those defined on <link
linkend="panel">panels</link>, is configurable with this editor. The
MIDI Event Editor is invoked by right-clicking on the element.
    </para> 
    <sect1>
      <title>Receive</title>
      <indexterm><primary>MidiEvent.Receive</primary></indexterm>
      <figure><title>MIDI received event</title><mediaobject><imageobject><imagedata fileref="images/midi_event_editor_receive.png" /></imageobject></mediaobject></figure>
      <para>This tab configures which MIDI events will drive the console element.</para>
      <para>
The overall layout is the same for all elements. Depending on the element being
configured, the fields circled in red will be disabled or relabeled.
      </para>
      <para>It is possible to define several received events for the same GUI control. Any of them received at any time will trigger the control.</para>
      <variablelist>
        <varlistentry>
          <term>Event-No</term>
          <listitem><simpara>Event identifier. If the event is associated to a specific MIDI device, the device name is part of the identifier.</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Device</term>
          <listitem>
            <simpara>
The dropdown displays every MIDI input device that was ever known to
GrandOrgue. If a device is selected in the dropdown, GrandOrgue listens only
for that event coming from that device. If no device is selected, GrandOrgue
listens for that event coming from any selected input device (in the <link
  linkend="mididevicestab">MIDI Devices Tab</link>) connected to the computer.
            </simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Event</term>
          <listitem><simpara>The dropdown displays the list of allowed events for the control.</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Channel</term>
          <listitem><simpara>MIDI channel for this event (1-16 or Any). If set to "Any channel", GrandOrgue listens for that event on any channel.</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>New</term>
          <listitem><simpara>This button allows to add a new event to the list of received events. A blank form is displayed with an incremented event number.</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Delete</term>
          <listitem>
            <simpara>
This button allows to delete the currently selected event. <emphasis>It is
enabled only when there are at least 2 events in the list.</emphasis>
            </simpara>
            <note>
              <simpara>
An event can also be marked for deletion by setting its <emphasis>Event</emphasis>
dropdown to <emphasis role="bold"><emphasis>None</emphasis></emphasis>.
It is effectively deleted when the OK button is pressed.
              </simpara>
              <simpara>It is the only way to delete the last event and blank out the list</simpara>
            </note>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Listen&#160;for&#160;Event</term>
          <listitem><para>
Triggers <emphasis>listening mode</emphasis>. GrandOrgue waits for a MIDI event, then fills the dialog with the event's data.
<note><simpara>This legacy configuration technique is useful only for very simple settings. The preferred way to configure MIDI is to use the <emphasis>Detect Complex MIDI Setup</emphasis> functionality.</simpara></note>
          </para></listitem>
        </varlistentry>
        <varlistentry>
          <term>Detect&#160;complex MIDI&#160;Setup</term>
          <listitem><simpara>
Triggers <emphasis>listening mode</emphasis>. GrandOrgue asks for two MIDI
event sequences which define the operating range for the control. More
information is available for each console element in the next section. Suitable
instructions are displayed in the space above the OK / Cancel buttons.
          </simpara></listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Send</title>
      <indexterm><primary>MidiEvent.Send</primary></indexterm>
      <figure><title>MIDI send event</title><mediaobject><imageobject><imagedata fileref="images/midi_event_editor_send.png" /></imageobject></mediaobject></figure>
      <para>This tab configures which MIDI events are sent from the console element.</para>
      <para>
The overall layout is the same for all elements. Depending on the element being
configured, some fields will be disabled or relabeled.
      </para>
      <para>It is possible to define several sent events for the same GUI control. All of them will be sent whenever the control is triggered.</para>
      <variablelist>
        <varlistentry>
          <term>Event-No</term>
          <listitem><simpara>Event identifier. If the event is associated to a specific MIDI device, the device name is part of the identifier.</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Device</term>
          <listitem>
            <simpara>
The dropdown displays every MIDI output device that was ever known to
GrandOrgue. If a device is selected in the dropdown, GrandOrgue outputs that
event only to that device. If no device is selected, GrandOrgue outputs that
event to all selected output devices ( in the <link
  linkend="mididevicestab">MIDI Devices Tab</link>) connected to the computer.
            </simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Event</term>
          <listitem><simpara>The dropdown displays the list of allowed events for the control.</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Channel</term>
          <listitem><simpara>MIDI channel for this event (1-16, defaults to 1).</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Use Note Off (0x8X)</term>
          <listitem><simpara>For MIDI note events the state of this checkbox will decide if the note off message is sent as a Note Off (0x8X) or as a Note On (0x9X) with velocity 0.</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>New</term>
          <listitem><simpara>This button allows to add a new event to the list of sent events. A blank form is displayed with an incremented event number.</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Delete</term>
          <listitem>
            <simpara>
This button allows to delete the currently selected event. <emphasis>It is
enabled only when there are at least 2 events in the list.</emphasis>
            </simpara>
            <note>
              <simpara>
An event can also be marked for deletion by setting its <emphasis>Event</emphasis>
dropdown to <emphasis role="bold"><emphasis>None</emphasis></emphasis>. It is
effectively deleted when the OK button is pressed.
              </simpara>
              <simpara>It is the only way to delete the last event and blank out the list</simpara>
            </note>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Copy&#160;current&#160;receive&#160;event</term>
          <listitem>
            <simpara>
              This button copies the values of the current Receive event
              selected on the Receive page to the current event on the Send page.
            </simpara>
            <simpara>
              If the receive event contains a correct input device specified,
              then GrandOrgue takes the output device set to this input device
              with the MIDI-Output-Device button on the <link
  linkend="mididevicestab">MIDI Devices Tab</link> of the Program Settings window.
            </simpara>
            <simpara>
              If an output device has not been set for this input device then
              GrandOrgue sets "Any Device" value. The user have to select an
              output device manually.
            </simpara>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Keyboard shortcut</title>
      <indexterm><primary>MidiEvent.Shortcut</primary></indexterm>
      <figure><title>Keyboard shortcut</title><mediaobject><imageobject><imagedata fileref="images/midi_event_editor_shortcut.png" /></imageobject></mediaobject></figure>
      <para>This tab is displayed only for enclosures, drawstops and buttons.</para>
      <variablelist>
        <varlistentry>
          <term>Shortcut</term>
          <listitem><para>
This dropdown lists all usable key values.
<note><simpara>According to the platform running GrandOrgue, some keys will be unusable.</simpara></note>
          </para></listitem>
        </varlistentry>
        <varlistentry>
          <term>Listen&#160;for&#160;Event</term>
          <listitem><simpara>Triggers <emphasis>listening mode</emphasis>. GrandOrgue waits for a key to be depressed on the computer keyboard, then sets the dropdown to that key.</simpara></listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Editor by console element</title>
      <sect2>
        <title>Keyboard</title>
        <sect3>
          <title>Receive</title>
          <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_manual_receive.png" /></imageobject></mediaobject>
          <variablelist>
            <varlistentry>
              <term>Event</term>
              <listitem>
                <simpara>The available events are:</simpara>
                <variablelist>
                  <varlistentry>
                    <term>9x Note</term>
                    <listitem>
                      <simpara>
Receive NoteOn / NoteOff with velocity. The velocity value is used to select
the "best" attack sample and alter sound rendering (e.g. piano plays loud/soft
according to velocity).
                      </simpara>
                      <simpara>
This setting honors the key mapping that can be defined in the Organ Definition
File (Manual999, optional <link linkend="midikeyentry">MIDIKey999</link>
entries).
                      </simpara>
                    </listitem>
                  </varlistentry>
                  <varlistentry>
                    <term>9x Note without Velocity</term>
                    <listitem><simpara>Same as 9x Note. The velocity value, if any, is always translated to On = 127, Off = 0.</simpara></listitem>
                  </varlistentry>
                  <varlistentry>
                    <term>9x Note short octave at low key</term>
                    <listitem>
                      <simpara>Same as 9x Note plus hardcoded short octave processing in the lowest octave.</simpara>
                      <simpara>
The lowest octave is that of the lowest C on a full compass keyboard.
<emphasis>Lowest key</emphasis> field value needs to match the actual lowest C
MIDI key number.
                      </simpara>
                      <note><simpara>
The hardcoded processing matches E key to C note, F key to F note, F# key to D
note, G key to G note, G# key to E note, and from A upwards, the key on the
keyboard matches the same note.
                      </simpara></note>
                      <simpara>The main usage of this setting is to quickly convert a full compass keyboard to short octave. See appendix A.</simpara>
                    </listitem>
                  </varlistentry>
                  <varlistentry id="N9xnoteWOmap">
                    <term>9x Note without map</term>
                    <listitem>
                      <simpara>
Ignore the key mapping defined in the Organ Definition File (Manual999,
optional <link linkend="midikeyentry">MIDIKey999</link> entries).
                      </simpara>
                      <simpara>The main usage of this setting is to quickly convert a short octave keyboard to full compass. See appendix A.</simpara>
                    </listitem>
                  </varlistentry>
                </variablelist>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Transpose</term>
              <listitem><simpara>This spinner sets a permanent transposition in semitones. Positive values transpose up, negative values transpose down.</simpara></listitem>
            </varlistentry>
            <varlistentry>
              <term>Lowest&#160;Key</term>
              <term>Highest&#160;Key</term>
              <listitem><simpara>
These spinners set the key number range which GrandOrgue will acknowledge when
listening for MIDI events. Any key number outside the range will be ignored.
The lowest key value designates the lowest octave (where short octave
processing takes place).
              </simpara></listitem>
            </varlistentry>
            <varlistentry>
              <term>Lowest&#160;velocity</term>
              <term>Highest&#160;velocity</term>
              <listitem>
                <simpara>These spinners set the velocity range which GrandOrgue will acknowledge when listening for MIDI events.</simpara>
                <itemizedlist>
                  <listitem><simpara>All events with velocity &gt; "highest velocity" are ignored.</simpara></listitem>
                  <listitem><simpara>All events with velocity &lt; "lowest velocity" are translated to <emphasis>NoteOff</emphasis>.</simpara></listitem>
                  <listitem><simpara>Velocity values between "lowest velocity" and "highest velocity" are rescaled to 0-127</simpara></listitem>
                </itemizedlist>
                <warning><simpara>Lowest velocity must be at least 1, otherwise all key releases will be missed.</simpara></warning>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Debounce&#160;time</term>
              <listitem><simpara>This spinner is always disabled for a keyboard.</simpara></listitem>
            </varlistentry>
            <varlistentry>
              <term>Detect&#160;complex MIDI&#160;Setup</term>
              <listitem>
                <simpara>
Asks to press the lowest and highest keys available on the keyboard. GrandOrgue
uses the values it reads to determine the channel, lowest key number, highest
key number, lowest velocity value. Highest velocity value is always set to 127.
Event is set to
                </simpara>
                <itemizedlist>
                  <listitem><simpara><emphasis role="bold">9x Note short octave at low key</emphasis> if the lowest E is hit</simpara></listitem>
                  <listitem><simpara><emphasis role="bold">9x Note</emphasis> if any other key in the lowest octave is hit</simpara></listitem>
                </itemizedlist>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3>
          <title>Send</title>
          <simpara>This tab controls how the input state of the manual keys is mirrored to an external MIDI device</simpara>
          <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_manual_send.png" /></imageobject></mediaobject>
          <variablelist>
            <varlistentry>
              <term>Event</term>
              <listitem>
                <simpara>The available events are:</simpara>
                <variablelist>
                  <varlistentry>
                    <term>9x Note</term>
                    <listitem><simpara>
Send NoteOn / NoteOff. Velocity is sent, rescaled to the range defined in the
<emphasis>Off Value</emphasis> and <emphasis>On Value</emphasis> fields.
                    </simpara></listitem>
                  </varlistentry>
                  <varlistentry>
                    <term>9x Note without Velocity</term>
                    <listitem><simpara>
Send NoteOn / NoteOff. The velocity value is always set to On = value of
<emphasis>On Value</emphasis> field, Off = value of <emphasis>Off
Value</emphasis> field.
                    </simpara></listitem>
                  </varlistentry>
                </variablelist>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>CTRL/PGM</term>
              <listitem><simpara>This spinner is always disabled for a keyboard.</simpara></listitem>
            </varlistentry>
            <varlistentry>
              <term>Off&#160;Value</term>
              <listitem><simpara>This spinner sets the velocity value sent when a key is released on the keyboard.</simpara></listitem>
            </varlistentry>
            <varlistentry>
              <term>On&#160;Value</term>
              <listitem><simpara>This spinner sets the velocity value sent when a key is depressed on the keyboard.</simpara></listitem>
            </varlistentry>
          </variablelist>
          <note><simpara>Off value <emphasis role="strong">must</emphasis> be set to zero (0) if NoteOff is wished.</simpara></note>
        </sect3>
        <sect3>
          <title>Send Division Output</title>
          <simpara>This tab controls how the state <emphasis role="bold">after coupler processing</emphasis> of the division is sent to an external MIDI device.</simpara>
          <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_division_send.png" /></imageobject></mediaobject>
          <variablelist>
            <varlistentry>
              <term>Event</term>
              <listitem>
                <simpara>The available events are:</simpara>
                <variablelist>
                  <varlistentry>
                    <term>9x Note</term>
                    <listitem><simpara>
Send NoteOn / NoteOff. Velocity is sent, rescaled to the range defined in the
<emphasis>Off Value</emphasis> and <emphasis>On Value</emphasis> fields.
                    </simpara></listitem>
                  </varlistentry>
                  <varlistentry>
                    <term>9x Note without Velocity</term>
                    <listitem><simpara>
Send NoteOn / NoteOff. The velocity value is always set to On = value of
<emphasis>On Value</emphasis> field, Off = value of <emphasis>Off
Value</emphasis> field.
                    </simpara></listitem>
                  </varlistentry>
                </variablelist>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>CTRL/PGM</term>
              <listitem><simpara>This spinner is always disabled for a keyboard.</simpara></listitem>
            </varlistentry>
            <varlistentry>
              <term>Off&#160;Value</term>
              <listitem><simpara>This spinner sets the velocity value sent when a key is released on the keyboard.</simpara></listitem>
            </varlistentry>
            <varlistentry>
              <term>On&#160;Value</term>
              <listitem><simpara>This spinner sets the velocity value sent when a key is depressed on the keyboard.</simpara></listitem>
            </varlistentry>
          </variablelist>
          <note><simpara>Off value <emphasis role="strong">must</emphasis> be set to zero (0) if NoteOff is wished.</simpara></note>
        </sect3>
      </sect2>
      <sect2>
        <title>Rank</title>
        <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_rank_send.png" /></imageobject></mediaobject>
        <para>
This setting allows to send NoteOn / NoteOff data only when a rank has been
activated by pulling the stop it belongs to. This setting is loosely related to
the <emphasis>Manual's Send</emphasis> settings. The following table
summarizes the main use cases for each setting.
<informaltable frame="none">
  <tgroup cols="3">
    <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px"/>
    <colspec colname="c2" colsep="0" rowsep="0"/>
    <colspec colname="c2" colsep="0" rowsep="0"/>
    <tbody>
      <row valign="top">
        <entry>Manual: Send</entry>
        <entry>Mirrors the keyboard input state. The configured MIDI event is sent whenever the key is physically depressed. Couplers defined in GrandOrgue are <emphasis role="bold">ignored</emphasis></entry>
        <entry>Can be used for recording keyboard action to an external MIDI device</entry>
      </row>
      <row valign="top">
        <entry>Manual:&#160;Send&#160;Division&#160;Output</entry>
        <entry>Sends the division state after all couplers have been processed. Even if the key is displayed as depressed in GrandOrgue GUI, the event tied to the manual is <emphasis role="bold">not</emphasis> sent</entry>
        <entry>Can be used to control an external windchest having a single valve per note</entry>
      </row>
      <row valign="top">
        <entry>Rank: Send</entry>
        <entry>Sends the individual pipe state</entry>
        <entry>Can be used to control an external windchest having a valve per pipe</entry>
      </row>
    </tbody>
  </tgroup>
</informaltable>
        </para> 
        <variablelist>
          <varlistentry>
            <term>Event</term>
            <listitem>
              <simpara>The available events are:</simpara>
              <variablelist>
                <varlistentry>
                  <term>9x Note</term>
                  <listitem><simpara>
Send NoteOn / NoteOff. Velocity is sent, rescaled to the range defined in the
<emphasis>Off Value</emphasis> and <emphasis>On Value</emphasis> fields.
                  </simpara></listitem>
                </varlistentry>
                <varlistentry>
                  <term>9x Note without Velocity</term>
                  <listitem><simpara>
Send NoteOn / NoteOff. The velocity value is always set to On = value of
<emphasis>On Value</emphasis> field, Off = value of <emphasis>Off
Value</emphasis> field.
                  </simpara></listitem>
                </varlistentry>
              </variablelist>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>CTRL/PGM</term>
            <listitem><simpara>This spinner is always disabled for a rank.</simpara></listitem>
          </varlistentry>
          <varlistentry>
            <term>Off&#160;Value</term>
            <listitem><simpara>This spinner sets the velocity value sent when a pipe is muted.</simpara></listitem>
          </varlistentry>
          <varlistentry>
            <term>On&#160;Value</term>
            <listitem><simpara>This spinner sets the velocity value sent when a pipe starts playing.</simpara></listitem>
          </varlistentry>
        </variablelist>
        <note><simpara>Rank MIDI configuration can be accessed only via the <link linkend="midiobjects">MIDI Objects list</link>.</simpara></note>
      </sect2>
      <sect2>
        <title>Enclosure</title>
        <sect3>
          <title>Receive</title>
          <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_enclosure_receive.png" /></imageobject></mediaobject>
          <variablelist>
            <varlistentry>
              <term>Event</term>
              <listitem>
                <para>The available events are:</para>
                <variablelist>
                  <varlistentry>
                    <term>Bx controller</term>
                    <listitem>
                      <para>Receive Control Change messages.</para>
                      <para>GrandOrgue expects this message sequence: Bn controller# MSB; controller value.</para>
                    </listitem>
                  </varlistentry>
                  <varlistentry>
                    <term>RPN</term>
                    <listitem>
                      <para>Receive RPN (Registered Parameter Number) messages.</para>
                      <para>GrandOrgue supports: Parameter number MSByte, Parameter number LSByte and only Data Entry MSByte (0x06).</para>
                      <para>GrandOrgue expects this message sequence: Bn 0x65 parameter# MSB; [Bn 0x64 parameter# LSB;] Bn 0x06 parameter value</para>
                    </listitem>
                  </varlistentry>
                  <varlistentry>
                    <term>NRPN</term>
                    <listitem>
                      <para>Receive NRPN (Non Registered Parameter Number) messages.</para>
                      <para>GrandOrgue supports: Parameter number MSByte, Parameter number LSByte and only Data Entry MSByte (0x06).</para>
                      <para>GrandOrgue expects this message sequence: Bn 0x63 parameter# MSB; [Bn 0x62 parameter# LSB;] Bn 0x06 parameter value</para>
                    </listitem>
                  </varlistentry>
                  <varlistentry>
                    <term>Cx Program Change Range</term>
                    <listitem>
                      <simpara>Receive Bank Select and Program Change when the enclosure opens or closes.</simpara>
                      <itemizedlist>
                        <listitem>
                          <simpara>The fields <emphasis>Lower limit</emphasis> and <emphasis>Upper limit</emphasis> are relabeled to <emphasis>Lower PGM number</emphasis> and <emphasis>Upper PGM number</emphasis>.</simpara>
                        </listitem>
                        <listitem>
                          <simpara>
GrandOrgue moves the enclosure when receiving program numbers in the range
{<emphasis>lower PGM number</emphasis>, <emphasis>upper PGM number</emphasis>}
evenly divided in 127 positions.
                          </simpara>
                        </listitem>
                        <listitem>
                          <simpara>
GrandOrgue expects this message sequence: Bn 0x00 &lt;data1&gt;; Bn 0x20
&lt;data2&gt;; Cn prog#. The bank select controllers enable GrandOrgue to use
program numbers higher than 127. Range is [0, 2097152].
                          </simpara>
                        </listitem>
                        <listitem><simpara>
When receiving Bank Select + Program Change, if the MIDI device sends Bn 0x00
&lt;data1&gt;; Bn 0x20 &lt;data2&gt;; Cn prog#, the program number will be
computed as the value of <emphasis>data1</emphasis> shifted left 14 bits ORed
(bitwise) with <emphasis>data2</emphasis> shifted left 7 bits ORed (bitwise)
with prog# + 1 [ math: ((data1 &lt;&lt; 14) | (data2 &lt;&lt; 7) | prog#) + 1 ]. If the
result falls in the range {<emphasis>lower PGM number</emphasis>,
<emphasis>upper PGM number</emphasis>}, the enclosure moves to that value's
position.
                        </simpara></listitem>
                      </itemizedlist>
                    </listitem>
                  </varlistentry>
                </variablelist>
              </listitem>
            </varlistentry>
            <varlistentry id="RPNNo">
              <term>Data</term>
              <listitem>
                <para>Sets the controller (Bx) or parameter (RPN/NRPN) number.</para>
                <para>
When receiving RPN, if the MIDI device sends Bn 0x65 &lt;data1&gt;; Bn 0x64
&lt;data2&gt;, the parameter number will be displayed as the value of
<emphasis>data1</emphasis> shifted left 7 bits ORed (bitwise) with
<emphasis>data2. Range is [0, 16383].</emphasis>.
                </para>
                <para>E.g.: Bn 0x65 1; Bn 0x64 2 will display 130.</para>
                <para>The behavior is identical for NRPN.</para>
                <note>
                  <para>
The label of this field changes according to the event type:
<informaltable frame="none">
  <tgroup cols="3">
    <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px"/>
    <colspec colname="c2" colsep="0" rowsep="0" colwidth="9px"/>
    <colspec colname="c3" colsep="0" rowsep="0"/>
    <tbody>
      <row valign="top">
        <entry>Bx Controller</entry><entry>=&gt;</entry><entry>Controller-No</entry>
      </row>
      <row valign="top">
        <entry>RPN or NRPN</entry><entry>=&gt;</entry><entry>Parameter-No</entry>
      </row>
    </tbody>
  </tgroup>
</informaltable>
                  </para>
                </note>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Lowest&#160;Key</term>
              <term>Highest&#160;Key</term>
              <listitem><simpara>These spinners are always disabled for an enclosure.</simpara></listitem>
            </varlistentry>
            <varlistentry>
              <term>Lower&#160;limit</term>
              <term>Upper&#160;limit</term>
              <listitem>
                <simpara>
These spinners set the controller values range which defines a full open/closed
enclosure. The value is rescaled to the full range (0-127) for that controller.
Values outside the range are translated to their limit values: value&#160;&lt;&#160;lower
limit yields 0, value&#160;&gt;&#160;upper limit yields 127.
                </simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Debounce&#160;time</term>
              <listitem><simpara>This spinner is always disabled for an enclosure.</simpara></listitem>
            </varlistentry>
            <varlistentry>
              <term>Detect&#160;complex MIDI&#160;Setup</term>
              <listitem>
                <simpara>
Asks to move the physical device (usually a shoe) to fully open and close the
enclosure. GrandOrgue uses the values it reads to determine the channel,
controller type and number and the limits of the usable range.
                </simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3>
          <title>Send</title>
          <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_enclosure_send.png" /></imageobject></mediaobject>
          <variablelist>
            <varlistentry>
              <term>Event</term>
              <listitem>
                <para>The available events are:</para>
                <variablelist>
                  <varlistentry>
                    <term>Bx controller</term>
                    <listitem>
                      <para>Send Control Change messages.</para>
                      <para>GrandOrgue sends this message sequence: Bn controller# MSB; controller value.</para>
                    </listitem>
                  </varlistentry>
                  <varlistentry>
                    <term>RPN</term>
                    <listitem>
                      <para>Send RPN (Registered Parameter Number) messages.</para>
                      <para>GrandOrgue supports: Parameter number MSByte, Parameter number LSByte and only Data Entry MSByte (0x06).</para>
                      <para>GrandOrgue sends this message sequence: Bn 0x65 parameter# MSB; Bn 0x64 parameter# LSB; Bn 0x06 parameter value</para>
                    </listitem>
                  </varlistentry>
                  <varlistentry>
                    <term>NRPN</term>
                    <listitem>
                      <para>Send NRPN (Non Registered Parameter Number) messages.</para>
                      <para>GrandOrgue supports: Parameter number MSByte, Parameter number LSByte and only Data Entry MSByte (0x06).</para>
                      <para>GrandOrgue sends this message sequence: Bn 0x63 parameter# MSB; Bn 0x62 parameter# LSB; Bn 0x06 parameter value</para>
                    </listitem>
                  </varlistentry>
                  <varlistentry>
                    <term>Cx Program Change Range</term>
                    <listitem>
                      <simpara>Send Bank Select and Program Change when the enclosure opens or closes.</simpara>
                      <itemizedlist>
                        <listitem>
                          <simpara>The fields <emphasis>Off Value</emphasis> and <emphasis>On Value</emphasis> are relabeled to <emphasis>Lower PGM number</emphasis> and <emphasis>Upper PGM number</emphasis>.</simpara>
                        </listitem>
                        <listitem><simpara>GrandOrgue sends program numbers in the range {<emphasis>lower PGM number</emphasis>, <emphasis>upper PGM number</emphasis>} evenly spread in 127 chunks.</simpara></listitem>
                        <listitem>
                          <simpara>
GrandOrgue always sends Bn 0x00 &lt;data1&gt;; Bn 0x20 &lt;data2&gt;; Cn prog#.
The bank select controllers enable GrandOrgue to use program numbers higher
than 127. Range is [0, 2097152].
                          </simpara>
                        </listitem>
                        <listitem><simpara>&lt;<emphasis>data1</emphasis>&gt; is the value of the 7 leftmost bits of the program number (math: ((value -1) >> 14) &amp; 0x7F).</simpara></listitem>
                        <listitem><simpara>&lt;<emphasis>data2</emphasis>&gt; is the value of the 7 middle bits of the program number (math: ((value -1) >> 7) &amp; 0x7F).</simpara></listitem>
                        <listitem><simpara><emphasis>prog#</emphasis> is the value of the 7 rightmost bits of the program number (math: ((value -1) >> 0) &amp; 0x7F).</simpara></listitem>
                      </itemizedlist>
                    </listitem>
                  </varlistentry>
                </variablelist>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>CTRL/PGM</term>
              <listitem>
                <para>For a Bx controller, this spinner sets the controller number (range 0-127).</para>
                <para>
For RPN or NRPN, this value is in the range 0-16383. GrandOrgue will
automatically split this parameter number into its most significant byte and
least significant byte to send Bn 0x65 &lt;data1&gt;; Bn 0x64 &lt;data2&gt;
where data1 is computed as "ParameterNo right shifted 7 bits AND 0x7F" and
data2 is computed as "ParameterNo AND 0x7F" 
                </para>
                <note>
                  <para>
The label of this field changes according to the event type:
<informaltable frame="none">
  <tgroup cols="3">
    <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px"/>
    <colspec colname="c2" colsep="0" rowsep="0" colwidth="9px"/>
    <colspec colname="c3" colsep="0" rowsep="0"/>
    <tbody>
      <row valign="top">
        <entry>Bx Controller</entry><entry>=&gt;</entry><entry>Controller-No</entry>
      </row>
      <row valign="top">
        <entry>RPN or NRPN</entry><entry>=&gt;</entry><entry>Parameter-No</entry>
      </row>
    </tbody>
  </tgroup>
</informaltable>
                  </para>
                </note>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Off&#160;Value</term>
              <term>On&#160;Value</term>
              <listitem><simpara>Define the values for sending a fully open/closed enclosure. Values will be rescaled to the range defined by these limits.</simpara></listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3>
          <title>Shortcut</title>
          <figure><title>Keyboard shortcut for Enclosure</title><mediaobject><imageobject><imagedata fileref="images/midi_event_editor_enclosure_shortcut.png" /></imageobject></mediaobject></figure>
          <para>An enclosure needs to define 2 different shortcuts: one to "open" and another to "close" the virtual shades</para>
          <informaltable frame="none">
            <tgroup cols="2">
              <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px"/>
              <colspec colname="c2" colsep="0" rowsep="0" />
              <tbody>
                <row valign="top">
                  <entry><emphasis role="strong">Plus-Shortcut</emphasis></entry>
                  <entry>Defines the key used to "open" the virtual shades</entry>
                </row>
                <row valign="top">
                  <entry><emphasis role="strong">Minus-Shortcut</emphasis></entry>
                  <entry>Defines the key used to "close" the virtual shades</entry>
                </row>
              </tbody>
            </tgroup>
          </informaltable>
        <para>
On both frames, the <emphasis role="strong">Listen for Event</emphasis> button,
when depressed, triggers <emphasis>listening mode</emphasis>. GrandOrgue waits
for a key to be depressed on the computer keyboard, then sets the dropdown to
that key.
        </para>
        </sect3>
      </sect2>
      <sect2>
        <title>Drawstop and Pushbutton</title>
        <sect3>
          <title>Receive</title>
          <sect4>
            <title>9x Note</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_Note.png" /></imageobject></mediaobject>
              <simpara>Receive NoteOn / NoteOff.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px"/>
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Data</emphasis></entry>
                      <entry>Key number</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower&#160;limit</emphasis></entry>
                      <entry>Maximum velocity value that toggles the button or drawstop off</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper&#160;limit</emphasis></entry>
                      <entry>
                        <simpara>Minimum velocity value that toggles the button or drawstop on</simpara>
                        <simpara><emphasis>All velocity values between lower and upper limit are ignored</emphasis></simpara>
                        <simpara/>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce&#160;time</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
              <para/>
            </sect4>
            <sect4>
              <title>9x Note On Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_NoteOnToggle.png" /></imageobject></mediaobject>
              <simpara>
Receive NoteOn messages only. Two successive NoteOn messages on the same
key number will toggle the state of the button/drawstop.
              </simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px"/>
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Data</emphasis></entry>
                      <entry>Key number</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper&#160;limit</emphasis></entry>
                      <entry>Minimum velocity value that toggles the button or drawstop</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce&#160;time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive NoteOn messages for the drawstop/button to toggle its state.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower&#160;limit</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>9x Note Off Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_NoteOffToggle.png" /></imageobject></mediaobject>
                <simpara>
Receive NoteOff messages only. Two successive NoteOff messages on the same
key number will toggle the state of the button/drawstop.
                </simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Data</emphasis></entry>
                      <entry>Key number</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower&#160;limit</emphasis></entry>
                      <entry>Maximum velocity value that toggles the button or drawstop</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce&#160;time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive NoteOff messages for the drawstop/button to toggle its state.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper&#160;limit</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>9x Note On/Off Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_NoteOnOffToggle.png" /></imageobject></mediaobject>
              <simpara>
Receive NoteOn or NoteOff messages. This control is designed for momentary
buttons which send a NoteOn message when first pressed and a NoteOff message
when pressed a second time or the reverse.
              </simpara>
              <simpara>An alternative to this setting would be to define two events for that button: one <emphasis>NoteOn Toggle</emphasis> and one <emphasis>NoteOff Toggle</emphasis>.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Data</emphasis></entry>
                      <entry>Key number</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower&#160;limit</emphasis></entry>
                      <entry>Maximum velocity value that toggles the button or drawstop state</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper&#160;limit</emphasis></entry>
                      <entry>
                        <simpara>Minimum velocity value that toggles the button or drawstop state</simpara>
                        <simpara><emphasis>All velocity values between lower and upper limit are ignored</emphasis></simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce&#160;time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive Note messages for the drawstop/button to toggle its state.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>Bx Controller</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_BxController.png" /></imageobject></mediaobject>
              <simpara>Receive Control Change messages. GrandOrgue expects this message sequence: Bn controller# MSB; controller value.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Controller-No</emphasis></entry>
                      <entry>
                        <simpara>Controller number. Range is [0, 127]</simpara>
                        <note>
                          <simpara>Bank Select, RPN, NRPN and Data Entry controllers are reserved by GrandOrgue and can NOT be used for normal matching. Namely:</simpara>
                          <informaltable frame="none">
                            <tgroup cols="2">
                              <colspec colname="c11" colsep="1" rowsep="0" />
                              <colspec colname="c12" colsep="1" rowsep="0" />
                              <tbody>
                                <row>
                                  <entry>0x00 (0)</entry>
                                  <entry>Bank Select MSB</entry>
                                </row>
                                <row>
                                  <entry>0x20 (32)</entry>
                                  <entry>Bank Select LSB</entry>
                                </row>
                                <row>
                                  <entry>0x06 (6)</entry>
                                  <entry>Data entry LSB</entry>
                                </row>
                                <row>
                                  <entry>0x62 (98)</entry>
                                  <entry>NRPN LSB</entry>
                                </row>
                                <row>
                                  <entry>0x63 (99)</entry>
                                  <entry>NRPN MSB</entry>
                                </row>
                                <row>
                                  <entry>0x64 (100)</entry>
                                  <entry>RPN LSB</entry>
                                </row>
                                <row>
                                  <entry>0x65 (101)</entry>
                                  <entry>RPN MSB</entry>
                                </row>
                              </tbody>
                            </tgroup>
                          </informaltable>
                        </note>
                        <simpara/>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower Limit</emphasis></entry>
                      <entry>Maximum data value that toggles the button or drawstop off. Range is [0, 127]</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper Limit</emphasis></entry>
                      <entry valign="top">
                        <simpara>Minimum data value that toggles the button or drawstop on. Range is [0, 127]</simpara>
                        <simpara><emphasis>All data values between lower and upper limit are ignored</emphasis></simpara>
                        <simpara />
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>Bx Controller On Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_BxControllerOnToggle.png" /></imageobject></mediaobject>
              <simpara>Receive Control Change messages. GrandOrgue expects this message sequence: Bn controller# MSB; controller value.</simpara>
              <simpara>The button or drawstop toggles its state whenever two successive "identical" messages are received.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Controller-No</emphasis></entry>
                      <entry>Controller number. Range is [0, 127]. See above for exclusions.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper Limit</emphasis></entry>
                      <entry>
                        Minimum data value that toggles the button or drawstop state. Range is [0, 127]. "Identical" means that two successive controller values are above this limit.
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive "identical" messages for the drawstop/button to toggle its state.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower Limit</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>Bx Controller Off Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_BxControllerOffToggle.png" /></imageobject></mediaobject>
              <simpara>Receive Control Change messages. GrandOrgue expects this message sequence: Bn controller# MSB; controller value.</simpara>
              <simpara>The button or drawstop toggles its state whenever two successive "identical" messages are received.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Controller-No</emphasis></entry>
                      <entry>Controller number. Range is [0, 127]. See above for exclusions.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower Limit</emphasis></entry>
                      <entry valign="top">
                        Maximum data value that toggles the button or drawstop state. Range is [0, 127]. "Identical" means that two successive controller values are below this limit.
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive "identical" messages for the drawstop/button to toggle its state.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper Limit</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>Bx Controller On/Off Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_BxControllerOnOffToggle.png" /></imageobject></mediaobject>
              <simpara>Receive Control Change messages. GrandOrgue expects this message sequence: Bn controller# MSB; controller value.</simpara>
              <simpara>
This control is designed for momentary buttons which send a Controller value
when first pressed and another Controller value when pressed a second time.
              </simpara>
              <simpara>An alternative to this setting would be to define two events for that button: one <emphasis>Bx Controller On Toggle</emphasis> and one <emphasis>Bx Controller Off Toggle</emphasis>.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Controller-No</emphasis></entry>
                      <entry>
                        <simpara>Controller number. Range is [0, 127]</simpara>
                        <simpara/>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower Limit</emphasis></entry>
                      <entry>Maximum data value that toggles the button or drawstop off. Range is [0, 127]</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper Limit</emphasis></entry>
                      <entry valign="top">
                        <simpara>Minimum data value that toggles the button or drawstop on. Range is [0, 127]</simpara>
                        <simpara><emphasis>All data values between lower and upper limit are ignored</emphasis></simpara>
                        <simpara />
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>Cx Program Change</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_CxProgramChange.png" /></imageobject></mediaobject>
              <simpara>Receive Program Change messages. GrandOrgue expects this message sequence: [Bn 0x00 bank# MSB;][Bn 0x20 bank# LSB;] Cn prog#.</simpara>
              <simpara>The optional bank select controllers enable GrandOrgue to manage more than 128 drawstops or buttons on a single channel with Program Change messages.</simpara>
              <simpara>This control is a toggle: two successive messages changing the same program will toggle the state of the drawstop/button.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Data</emphasis></entry>
                      <entry valign="top">
                        <simpara>Program number. Range is [0, 127] when bank select messages are not used, [0, 2097152] otherwise.</simpara>
                        <simpara>
When receiving Bank Select + Program Change, if the MIDI device sends Bn 0x00
&lt;data1&gt;; Bn 0x20 &lt;data2&gt;; Cn prog#, the program number will be
displayed as the value of <emphasis>data1</emphasis> shifted left 14 bits ORed
(bitwise) with <emphasis>data2</emphasis> shifted left 7 bits ORed (bitwise)
with <emphasis>prog#</emphasis> + 1 [ math: ((data1 &lt;&lt; 14) | (data2 &lt;&lt; 7) | prog#) + 1 ].
                        </simpara>
                        <simpara />
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive messages changing to the same program for the drawstop/button to toggle its state.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower Limit</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper Limit</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>RPN</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_RPN.png" /></imageobject></mediaobject>
              <simpara>Receive RPN (Registered Parameter Number) messages. GrandOrgue expects this message sequence: Bn 0x65 parameter# MSB; [Bn 0x64 parameter# LSB;] Bn 0x06 parameter value.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Parameter-No</emphasis></entry>
                      <entry valign="top">
                        <simpara>
Parameter number. If the MIDI device sends Bn 0x65 &lt;data1&gt;; Bn 0x64 &lt;data2&gt;, the parameter number will be displayed as the value of <emphasis>data1</emphasis> shifted left 7 bits ORed (bitwise) with <emphasis>data2</emphasis> [ math: (data1 &lt;&lt; 7) | data2 ].
                        </simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower Limit</emphasis></entry>
                      <entry>Maximum parameter value that toggles the button or drawstop off. Range is [0, 127]</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper Limit</emphasis></entry>
                      <entry>Minimum parameter value that toggles the button or drawstop on. Range is [0, 127]</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
              
            </sect4>
            <sect4>
              <title>NRPN</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_RPN.png" /></imageobject></mediaobject>
              <simpara>Receive NRPN (Non Registered Parameter Number) messages. GrandOrgue expects this message sequence: Bn 0x63 parameter# MSB; [Bn 0x62 parameter# LSB;] Bn 0x06 parameter value.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Parameter-No</emphasis></entry>
                      <entry valign="top">
                        <simpara>
Parameter number. If the MIDI device sends Bn 0x63 &lt;data1&gt;; Bn 0x62 &lt;data2&gt;, the parameter number will be displayed as the value of <emphasis>data1</emphasis> shifted left 7 bits ORed (bitwise) with <emphasis>data2</emphasis> [ math: (data1 &lt;&lt; 7) | data2 ].
                        </simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower Limit</emphasis></entry>
                      <entry>Maximum parameter value that toggles the button or drawstop off. Range is [0, 127]</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper Limit</emphasis></entry>
                      <entry>Minimum parameter value that toggles the button or drawstop on. Range is [0, 127]</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>Cx Program Change Range</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_CxProgramChangeRange.png" /></imageobject></mediaobject>
              <simpara>Receive Program Change messages. GrandOrgue expects this message sequence: [Bn 0x00 bank# MSB;][Bn 0x20 bank# LSB;] Cn prog#.</simpara>
              <simpara>This control uses 2 <emphasis role="bold">different</emphasis> program numbers: one to pull and the other to push the drawstop or button.</simpara>
              <simpara>The optional bank select controllers enable GrandOrgue to manage more than 64 drawstops or buttons on a single channel with Program Change messages.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower&#160;PGM&#160;number</emphasis></entry>
                      <entry valign="top">
                        <simpara>Program number to push the drawstop or button. Range is [1, 128] when bank select messages are not used, [0, 2097152] otherwise.</simpara>
                        <simpara>
When receiving Bank Select + Program Change, if the MIDI device sends Bn 0x00
&lt;data1&gt;; Bn 0x20 &lt;data2&gt;; Cn prog#, the program number will be
displayed as the value of <emphasis>data1</emphasis> shifted left 14 bits ORed
(bitwise) with <emphasis>data2</emphasis> shifted left 7 bits ORed (bitwise)
with <emphasis>prog#</emphasis> + 1 [ math: ((data1 &lt;&lt; 14) | (data2 &lt;&lt; 7) | prog#) + 1 ].
                        </simpara>
                        <simpara />
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper&#160;PGM&#160;number</emphasis></entry>
                      <entry valign="top">
                        <simpara>Program number to pull the drawstop or button. Range is [1, 128] when bank select messages are not used, [0, 2097152] otherwise.</simpara>
                        <simpara>
When receiving Bank Select + Program Change, if the MIDI device sends Bn 0x00
&lt;data1&gt;; Bn 0x20 &lt;data2&gt;; Cn prog#, the program number will be
displayed as the value of <emphasis>data1</emphasis> shifted left 14 bits ORed
(bitwise) with <emphasis>data2</emphasis> shifted left 7 bits ORed (bitwise)
with <emphasis>prog#</emphasis> + 1 [ math: ((data1 &lt;&lt; 14) | (data2 &lt;&lt; 7) | prog#) + 1 ].
                        </simpara>
                        <simpara />
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Data</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive messages changing to the same program for the drawstop/button to toggle its state.</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>RPN On Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_RPNOnToggle.png" /></imageobject></mediaobject>
              <simpara>Receive RPN (Registered Parameter Number) messages. GrandOrgue expects this message sequence: Bn 0x65 parameter# MSB; [Bn 0x64 parameter# LSB;] Bn 0x06 parameter value.</simpara>
              <simpara>The button or drawstop toggles its state whenever two successive "identical" messages are received.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Parameter-No</emphasis></entry>
                      <entry valign="top">
                        <simpara>
Parameter number. If the MIDI device sends Bn 0x65 &lt;data1&gt;; Bn 0x64 &lt;data2&gt;, the parameter number will be displayed as the value of <emphasis>data1</emphasis> shifted left 7 bits ORed (bitwise) with <emphasis>data2</emphasis> [ math: (data1 &lt;&lt; 7) | data2 ].
                        </simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper Limit</emphasis></entry>
                      <entry>Minimum parameter value that toggles the button or drawstop state. Range is [0, 127]. "Identical" means that two successive parameter values are above this limit.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive RPN messages for the drawstop/button to toggle its state.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower Limit</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>RPN Off Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_RPNOffToggle.png" /></imageobject></mediaobject>
              <simpara>Receive RPN (Registered Parameter Number) messages. GrandOrgue expects this message sequence: Bn 0x65 parameter# MSB; [Bn 0x64 parameter# LSB;] Bn 0x06 parameter value.</simpara>
              <simpara>The button or drawstop toggles its state whenever two successive "identical" messages are received.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Parameter-No</emphasis></entry>
                      <entry valign="top">
                        <simpara>
Parameter number. If the MIDI device sends Bn 0x65 &lt;data1&gt;; Bn 0x64 &lt;data2&gt;, the parameter number will be displayed as the value of <emphasis>data1</emphasis> shifted left 7 bits ORed (bitwise) with <emphasis>data2</emphasis> [ math: (data1 &lt;&lt; 7) | data2 ].
                        </simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower Limit</emphasis></entry>
                      <entry>Maximum parameter value that toggles the button or drawstop state. Range is [0, 127]. "Identical" means that two successive parameter values are below this limit.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive RPN messages for the drawstop/button to toggle its state.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper Limit</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>RPN On/Off Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_RPNOnOffToggle.png" /></imageobject></mediaobject>
              <simpara>Receive RPN (Registered Parameter Number) messages. GrandOrgue expects this message sequence: Bn 0x65 parameter# MSB; [Bn 0x64 parameter# LSB;] Bn 0x06 parameter value.</simpara>
              <simpara>
This control is designed for momentary buttons which send a RPN value when
first pressed and another RPN value when pressed a second time.
              </simpara>
              <simpara>An alternative to this setting would be to define two events for that button: one <emphasis>RPN On Toggle</emphasis> and one <emphasis>RPN Off Toggle</emphasis>.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                        <entry><emphasis role="strong">Parameter-No</emphasis></entry>
                        <entry>
                          <simpara>
Parameter number. If the MIDI device sends Bn 0x65 &lt;data1&gt;; Bn 0x64
&lt;data2&gt;, the parameter number will be displayed as the value of
<emphasis>data1</emphasis> shifted left 7 bits ORed (bitwise) with
<emphasis>data2</emphasis> [ math: (data1 &lt;&lt; 7) | data2 ].
                        </simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower Limit</emphasis></entry>
                      <entry>Maximum parameter value that toggles the button or drawstop off. Range is [0, 127]</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper Limit</emphasis></entry>
                      <entry valign="top">
                        <simpara>Minimum parameter value that toggles the button or drawstop on. Range is [0, 127]</simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive RPN messages for the drawstop/button to toggle its state.</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>NRPN On Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_NRPNOnToggle.png" /></imageobject></mediaobject>
              <simpara>Receive NRPN (Non Registered Parameter Number) messages. GrandOrgue expects this message sequence: Bn 0x63 parameter# MSB; [Bn 0x62 parameter# LSB;] Bn 0x06 parameter value.</simpara>
              <simpara>The button or drawstop toggles its state whenever two successive "identical" messages are received.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Parameter-No</emphasis></entry>
                      <entry valign="top">
                        <simpara>
Parameter number. If the MIDI device sends Bn 0x63 &lt;data1&gt;; Bn 0x62 &lt;data2&gt;, the parameter number will be displayed as the value of <emphasis>data1</emphasis> shifted left 7 bits ORed (bitwise) with <emphasis>data2</emphasis> [ math: (data1 &lt;&lt; 7) | data2 ].
                        </simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper Limit</emphasis></entry>
                      <entry>Minimum parameter value that toggles the button or drawstop state. Range is [0, 127]. "Identical" means that two successive parameter values are above this limit.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive NRPN messages for the drawstop/button to toggle its state.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower Limit</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>NRPN Off Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_NRPNOffToggle.png" /></imageobject></mediaobject>
              <simpara>Receive NRPN (Non Registered Parameter Number) messages. GrandOrgue expects this message sequence: Bn 0x63 parameter# MSB; [Bn 0x62 parameter# LSB;] Bn 0x06 parameter value.</simpara>
              <simpara>The button or drawstop toggles its state whenever two successive "identical" messages are received.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Parameter-No</emphasis></entry>
                      <entry valign="top">
                        <simpara>
Parameter number. If the MIDI device sends Bn 0x63 &lt;data1&gt;; Bn 0x62 &lt;data2&gt;, the parameter number will be displayed as the value of <emphasis>data1</emphasis> shifted left 7 bits ORed (bitwise) with <emphasis>data2</emphasis> [ math: (data1 &lt;&lt; 7) | data2 ].
                        </simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower Limit</emphasis></entry>
                      <entry>Maximum parameter value that toggles the button or drawstop state. Range is [0, 127]. "Identical" means that two successive parameter values are below this limit.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive NRPN messages for the drawstop/button to toggle its state.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper Limit</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>NRPN On/Off Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_NRPNOnOffToggle.png" /></imageobject></mediaobject>
              <simpara>Receive NRPN (Registered Parameter Number) messages. GrandOrgue expects this message sequence: Bn 0x63 parameter# MSB; [Bn 0x62 parameter# LSB;] Bn 0x06 parameter value.</simpara>
              <simpara>
This control is designed for momentary buttons which send a NRPN value when
first pressed and another NRPN value when pressed a second time.
              </simpara>
              <simpara>An alternative to this setting would be to define two events for that button: one <emphasis>NRPN On Toggle</emphasis> and one <emphasis>NRPN Off Toggle</emphasis>.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                        <entry><emphasis role="strong">Parameter-No</emphasis></entry>
                        <entry>
                          <simpara>
Parameter number. If the MIDI device sends Bn 0x63 &lt;data1&gt;; Bn 0x62
&lt;data2&gt;, the parameter number will be displayed as the value of
<emphasis>data1</emphasis> shifted left 7 bits ORed (bitwise) with
<emphasis>data2</emphasis> [ math: (data1 &lt;&lt; 7) | data2 ].
                        </simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower Limit</emphasis></entry>
                      <entry>Maximum parameter value that toggles the button or drawstop off. Range is [0, 127]</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper Limit</emphasis></entry>
                      <entry valign="top">
                        <simpara>Minimum parameter value that toggles the button or drawstop on. Range is [0, 127]</simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive RPN messages for the drawstop/button to toggle its state.</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>RPN Range</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_RPNRange.png" /></imageobject></mediaobject>
              <simpara>Receive RPN (Registered Parameter Number) messages. GrandOrgue expects this message sequence: Bn 0x65 parameter# MSB; [Bn 0x64 parameter# LSB;] Bn 0x06 parameter value.</simpara>
              <simpara>
This control uses 2 <emphasis role="bold">different</emphasis> parameter
numbers: one to pull and the other to push the drawstop or button. The
parameter value <emphasis role="bold">MUST</emphasis> be the same for both
(pull and push) messages.
              </simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Value</emphasis></entry>
                      <entry>Parameter value. Range is [0, 127].</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Off&#160;RPN&#160;number</emphasis></entry>
                      <entry valign="top">
                        <simpara>Parameter number to push the drawstop or button. Range is [0, 127].</simpara>
                        <simpara>
If the MIDI device sends Bn 0x65 &lt;data1&gt;; Bn 0x64 &lt;data2&gt;, the
parameter number will be displayed as the value of <emphasis>data1</emphasis>
shifted left 7 bits ORed (bitwise) with <emphasis>data2</emphasis> [ math:
(data1 &lt;&lt; 7) | data2 ].
                        </simpara>
                        <simpara />
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">On&#160;RPN&#160;number</emphasis></entry>
                      <entry valign="top">
                        <simpara>Parameter number to pull the drawstop or button. Range is [0, 127].</simpara>
                        <simpara>
If the MIDI device sends Bn 0x65 &lt;data1&gt;; Bn 0x64 &lt;data2&gt;, the
parameter number will be displayed as the value of <emphasis>data1</emphasis>
shifted left 7 bits ORed (bitwise) with <emphasis>data2</emphasis> [ math:
(data1 &lt;&lt; 7) | data2 ].
                        </simpara>
                        <simpara />
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>NRPN Range</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_NRPNRange.png" /></imageobject></mediaobject>
              <simpara>Receive NRPN (Registered Parameter Number) messages. GrandOrgue expects this message sequence: Bn 0x63 parameter# MSB; [Bn 0x62 parameter# LSB;] Bn 0x06 parameter value.</simpara>
              <simpara>
This control uses 2 <emphasis role="bold">different</emphasis> parameter
numbers: one to pull and the other to push the drawstop or button. The
parameter value <emphasis role="bold">MUST</emphasis> be the same for both
(pull and push) messages.
              </simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Value</emphasis></entry>
                      <entry>Parameter value. Range is [0, 127].</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Off&#160;NRPN&#160;number</emphasis></entry>
                      <entry valign="top">
                        <simpara>Parameter number to push the drawstop or button. Range is [0, 127].</simpara>
                        <simpara>
If the MIDI device sends Bn 0x63 &lt;data1&gt;; Bn 0x62 &lt;data2&gt;, the
parameter number will be displayed as the value of <emphasis>data1</emphasis>
shifted left 7 bits ORed (bitwise) with <emphasis>data2</emphasis> [ math:
(data1 &lt;&lt; 7) | data2 ].
                        </simpara>
                        <simpara />
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">On&#160;NRPN&#160;number</emphasis></entry>
                      <entry valign="top">
                        <simpara>Parameter number to pull the drawstop or button. Range is [0, 127].</simpara>
                        <simpara>
If the MIDI device sends Bn 0x63 &lt;data1&gt;; Bn 0x62 &lt;data2&gt;, the
parameter number will be displayed as the value of <emphasis>data1</emphasis>
shifted left 7 bits ORed (bitwise) with <emphasis>data2</emphasis> [ math:
(data1 &lt;&lt; 7) | data2 ].
                        </simpara>
                        <simpara />
                      </entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>Ctrl Change Bitfield</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_CtrlChangeBitField.png" /></imageobject></mediaobject>
              <simpara>This setting is used by some Content&#8482; digital organs. Up to 7 stops are packed in a single controller value where each bit controls a single stop.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Controller-No</emphasis></entry>
                      <entry>Controller number. Range is [0, 127]</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Bit number</emphasis></entry>
                      <entry>Bit number which state controls the stop. Range is [0, 6]</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper Limit</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>Bx Ctrl Change Fixed Value</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_BxCtrlChangeFixedValue.png" /></imageobject></mediaobject>
              <simpara>This setting is used by some Alhborn&#8482; digital organs. GrandOrgue detects bit patterns like Stop on = 01xx xxxx ; Stop Off = 00xx xxxx.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Controller-No</emphasis></entry>
                      <entry>Controller number. Range is [0, 127]. Refer to the organ MIDI chart for the actual controller number(s).</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Off value</emphasis></entry>
                      <entry>Data value that toggles the button or drawstop off. Range is [0, 63]</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">On value</emphasis></entry>
                      <entry>Data value that toggles the button or drawstop on. Range is [64, 127]. Always <emphasis>off value</emphasis> + 64.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>Bx Ctrl Change Fixed On Value Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_BxCtrlChangeFixedValueOnToggle.png" /></imageobject></mediaobject>
              <simpara>This setting is used by some Alhborn&#8482; digital organs. GrandOrgue toggles the drawstop or button state when detecting bit patterns like 01xx xxxx.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Controller-No</emphasis></entry>
                      <entry>Controller number. Range is [0, 127]. Refer to the organ MIDI chart for the actual controller number.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">On value</emphasis></entry>
                      <entry>Data value that toggles the button or drawstop state. Range is [64, 127].</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive identical control change messages for the drawstop/button to toggle its state.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Off value</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>Bx Ctrl Change Fixed Off Value Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_BxCtrlChangeFixedValueOffToggle.png" /></imageobject></mediaobject>
              <simpara>This setting is used by some Alhborn&#8482; digital organs. GrandOrgue toggles the drawstop or button state when detecting bit patterns like 00xx xxxx.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Controller-No</emphasis></entry>
                      <entry>Controller number. Range is [0, 127]. Refer to the organ MIDI chart for the actual controller number.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Off value</emphasis></entry>
                      <entry>Data value that toggles the button or drawstop state. Range is [0, 63]</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive identical control change messages for the drawstop/button to toggle its state.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">On value</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>Bx Ctrl Change Fixed On/Off Value Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_receive_BxCtrlChangeFixedValueOnOffToggle.png" /></imageobject></mediaobject>
              <simpara>This setting is used by some Alhborn&#8482; digital organs. GrandOrgue toggles the drawstop or button state when detecting bit patterns like 00xx xxxx.</simpara>
              <simpara>This control is designed for momentary buttons which send a bit pattern when first pressed and another bit pattern when pressed a second time.</simpara>
              <simpara>
An alternative to this setting would be to define two events for that button:
one <emphasis>Bx Ctrl Change Fixed On Value Toggle</emphasis> and one
<emphasis>Bx Ctrl Change Fixed Off Value Toggle</emphasis>.
              </simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Controller-No</emphasis></entry>
                      <entry>Controller number. Range is [0, 127]. Refer to the organ MIDI chart for the actual controller number.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">On value</emphasis></entry>
                      <entry>Data value that toggles the button or drawstop state. Range is [64, 127]</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Off value</emphasis></entry>
                      <entry>Data value that toggles the button or drawstop state. Range is [0, 63]</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive identical control change messages for the drawstop/button to toggle its state.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>Sys Ex Johannus</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_SysexJohannus.png" /></imageobject></mediaobject>
              <simpara>This setting is used by Johannus&#8482; digital organs. The button or drawstop toggles its state whenever two successive identical messages are received.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Data</emphasis></entry>
                      <entry>Data value that toggles the button or drawstop state. Range is [0, 127]</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive identical SysEx messages for the drawstop/button to toggle its state.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lower limit</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper limit</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>Sys Ex Viscount</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_SysexViscount.png" /></imageobject></mediaobject>
              <simpara>This setting is used by Viscount&#8482; digital organs.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Off value</emphasis></entry>
                      <entry>Data value that toggles the button or drawstop state off. Range is [0, 2097152].</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">On value</emphasis></entry>
                      <entry>Data value that toggles the button or drawstop state on. Range is [0, 2097152].</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Data</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>Sys Ex Viscount Toggle</title>
              <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_SysexViscount.png" /></imageobject></mediaobject>
              <simpara>This setting is used by Viscount&#8482; digital organs. The button or drawstop toggles its state whenever two successive identical messages are received.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                  <colspec colname="c2" colsep="0" rowsep="0" />
                  <tbody>
                    <row valign="top">
                      <entry><emphasis role="strong">Value</emphasis></entry>
                      <entry>Data value that toggles the button or drawstop state. Range is [0, 2097152].</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Debounce time</emphasis></entry>
                      <entry>Minimum time in milliseconds that must elapse between two successive identical SysEx messages for the drawstop/button to toggle its state.</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Data</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Lowest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Highest&#160;key</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                    <row valign="top">
                      <entry><emphasis role="strong">Upper&#160;limit</emphasis></entry>
                      <entry>Unused by this setting</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </sect4>
            <sect4>
              <title>Detect complex MIDI Setup</title>
              <simpara>
Asks to toggle the drawstop or pushbutton <emphasis>On</emphasis> then
<emphasis>Off</emphasis>. GrandOrgue uses the values it reads to determine the
MIDI event and all associated settings.
              </simpara>
              <!--
              <simpara>See Appendix B for advanced information about MIDI detection</simpara>
              -->
            </sect4>
        </sect3>
        <sect3>
          <title>Send</title>
          <sect4>
            <title>9x Note</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_Note.png" /></imageobject></mediaobject>
            <simpara>Send NoteOn when the drawstop/button toggles to <emphasis>On</emphasis> state. Send "NoteOff" when the drawstop/button toggles to <emphasis>Off</emphasis> state.</simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">CTRL/PGM</emphasis></entry>
                    <entry>Key number.</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Off Value</emphasis></entry>
                    <entry>
                      <simpara>Velocity value when drawstop/button goes to Off state.</simpara>
                      <note><simpara>Off value <emphasis role="strong">must</emphasis> be set to zero (0) if a genuine NoteOff is wished.</simpara></note>
                    </entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On Value</emphasis></entry>
                    <entry>Velocity value when drawstop/button goes to On state.</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>9x Note On</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_NoteOn.png" /></imageobject></mediaobject>
            <simpara>Send NoteOn only when the drawstop/button goes to <emphasis>On</emphasis> state.</simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">CTRL/PGM</emphasis></entry>
                    <entry>Key number.</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Off Value</emphasis></entry>
                    <entry>Unused by this setting.</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On Value</emphasis></entry>
                    <entry>Velocity value when drawstop/button goes to On state.</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>9x Note Off</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_NoteOff.png" /></imageobject></mediaobject>
            <simpara>Send "NoteOff" only when the drawstop/button goes to <emphasis>Off</emphasis> state.</simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">CTRL/PGM</emphasis></entry>
                    <entry>Key number.</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Off Value</emphasis></entry>
                    <entry>
                      <simpara>Velocity value when drawstop/button goes to Off state.</simpara>
                      <note><simpara>Off value <emphasis role="strong">must</emphasis> be set to zero (0) if a genuine NoteOff is wished.</simpara></note>
                    </entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On Value</emphasis></entry>
                    <entry>Unused by this setting.</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>Bx Controller</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_BxController.png" /></imageobject></mediaobject>
            <simpara>Send controller values when the drawstop/button changes state. The message sequence is Bn Controller# &lt;value&gt;</simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">Controller-No</emphasis></entry>
                    <entry>Controller number. Range is [0,127].</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Off Value</emphasis></entry>
                    <entry>
                      <simpara>Controller value when drawstop/button goes to Off state.</simpara>
                    </entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On Value</emphasis></entry>
                    <entry>Controller value when drawstop/button goes to On state.</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>Bx Controller On</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_BxControllerOn.png" /></imageobject></mediaobject>
            <simpara>Send controller value only when the drawstop/button goes to <emphasis>On</emphasis> state.</simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">Controller-No</emphasis></entry>
                    <entry>Controller number. Range is [0,127].</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Off Value</emphasis></entry>
                    <entry>Unused by this setting.</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On Value</emphasis></entry>
                    <entry>Controller value when drawstop/button goes to On state.</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>Bx Controller Off</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_BxControllerOff.png" /></imageobject></mediaobject>
            <simpara>Send controller value only when the drawstop/button goes to <emphasis>Off</emphasis> state.</simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">Controller-No</emphasis></entry>
                    <entry>Controller number. Range is [0,127].</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Off Value</emphasis></entry>
                    <entry>Controller value when drawstop/button goes to Off state.</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On Value</emphasis></entry>
                    <entry>Unused by this setting.</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>Cx Program Change On</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_CxProgramChangeOn.png" /></imageobject></mediaobject>
            <simpara>
Send Bank Select and Program Change only when the drawstop/button goes to
<emphasis>On</emphasis> state. The message sequence is: Bn 0x00 bank# MSB ;
Bn 0x20 bank# LSB ; Cn prog#.
            </simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">CTRL/PGM</emphasis></entry>
                    <entry>
                      <simpara>Program number and optional Bank Select MIDI messages. Range is [0, 2097152]</simpara>
                      <simpara>
GrandOrgue always sends Bn 0x00 &lt;data1&gt;; Bn 0x20 &lt;data2&gt;; Cn prog#.
This field value is the result of <emphasis>data1</emphasis> shifted left 14
bits ORed (bitwise) with <emphasis>data2</emphasis> shifted left 7 bits ORed
(bitwise) with <emphasis>prog#</emphasis> + 1 [ math: ((data1 &lt;&lt; 14) |
(data2 &lt;&lt; 7) | prog#) + 1 ].
                      </simpara>
                    </entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Off Value</emphasis></entry>
                    <entry>Unused by this setting.</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On Value</emphasis></entry>
                    <entry>Unused by this setting.</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>Cx Program Change Off</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_CxProgramChangeOff.png" /></imageobject></mediaobject>
            <simpara>
Send Bank Select and Program Change only when the drawstop/button goes to
<emphasis>Off</emphasis> state. The message sequence is: Bn 0x00 bank# MSB ;
Bn 0x20 bank# LSB ; Cn prog#.
            </simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">CTRL/PGM</emphasis></entry>
                    <entry>
                      <simpara>Program number and optional Bank Select MIDI messages. Range is [0, 2097152]</simpara>
                      <simpara>
GrandOrgue always sends Bn 0x00 &lt;data1&gt;; Bn 0x20 &lt;data2&gt;; Cn prog#.
This field value is the result of <emphasis>data1</emphasis> shifted left 14
bits ORed (bitwise) with <emphasis>data2</emphasis> shifted left 7 bits ORed
(bitwise) with <emphasis>prog#</emphasis> + 1 [ math: ((data1 &lt;&lt; 14) |
(data2 &lt;&lt; 7) | prog#) + 1 ].
                      </simpara>
                    </entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Off Value</emphasis></entry>
                    <entry>Unused by this setting.</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On Value</emphasis></entry>
                    <entry>Unused by this setting.</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>RPN</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_RPN.png" /></imageobject></mediaobject>
            <simpara>
              Send RPN values when the drawstop/button changes state.
              The message sequence is Bn 0x65 parameter# MSB; Bn 0x64 parameter# LSB; Bn 0x06 parameter value.
            </simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">Parameter-No</emphasis></entry>
                    <entry>
                      <simpara>Parameter number. Range is [0,16383].</simpara>
                      <simpara>
The parameter number displays the result of <emphasis>parameter# MSB</emphasis>
shifted left 7 bits ORed (bitwise) with <emphasis>parameter# LSB</emphasis> [
math: (parameter# MSB &lt;&lt; 7) | parameter# LSB ].
                      </simpara>
                    </entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Off Value</emphasis></entry>
                    <entry>
                      <simpara>Parameter value when drawstop/button goes to Off state.</simpara>
                    </entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On Value</emphasis></entry>
                    <entry>Parameter value when drawstop/button goes to On state.</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>NRPN</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_NRPN.png" /></imageobject></mediaobject>
            <simpara>
              Send NRPN values when the drawstop/button changes state.
              The message sequence is Bn 0x63 parameter# MSB; Bn 0x62 parameter# LSB; Bn 0x06 parameter value.
            </simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">Parameter-No</emphasis></entry>
                    <entry>
                      <simpara>Parameter number. Range is [0,16383].</simpara>
                      <simpara>
The parameter number displays the result of <emphasis>parameter# MSB</emphasis>
shifted left 7 bits ORed (bitwise) with <emphasis>parameter# LSB</emphasis> [
math: (parameter# MSB &lt;&lt; 7) | parameter# LSB ].
                      </simpara>
                    </entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Off Value</emphasis></entry>
                    <entry>
                      <simpara>Parameter value when drawstop/button goes to Off state.</simpara>
                    </entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On Value</emphasis></entry>
                    <entry>Parameter value when drawstop/button goes to On state.</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>Cx Program Change Range</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_CxProgramChangeRange.png" /></imageobject></mediaobject>
            <simpara>Send Bank Select and Program Change when the drawstop/button changes state.</simpara>
            <simpara>
GrandOrgue always sends Bn 0x00 &lt;data1&gt;; Bn 0x20 &lt;data2&gt;; Cn prog#.
This field value is the result of <emphasis>data1</emphasis> shifted left 14
bits ORed (bitwise) with <emphasis>data2</emphasis> shifted left 7 bits ORed
(bitwise) with <emphasis>prog#</emphasis> + 1 [ math: ((data1 &lt;&lt; 14) |
(data2 &lt;&lt; 7) | prog#) + 1 ].
            </simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">Lower&#160;PGM&#160;number</emphasis></entry>
                    <entry>Program number and optional Bank Select MIDI messages sent when the drawstop/button goes to <emphasis>Off</emphasis> state. Range is [0, 2097152]</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Upper&#160;PGM&#160;number</emphasis></entry>
                    <entry>Program number and optional Bank Select MIDI messages sent when the drawstop/button goes to <emphasis>On</emphasis> state. Range is [0, 2097152]</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">CTRL/PGM</emphasis></entry>
                    <entry>Unused by this setting.</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>RPN On</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_RPNOn.png" /></imageobject></mediaobject>
            <simpara>
              Send RPN value only when the drawstop/button changes to <emphasis>On</emphasis> state.
              The message sequence is Bn 0x65 parameter# MSB; Bn 0x64 parameter# LSB; Bn 0x06 parameter value.
            </simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">Parameter-No</emphasis></entry>
                    <entry>
                      <simpara>Parameter number. Range is [0,16383].</simpara>
                      <simpara>
The parameter number displays the result of <emphasis>parameter# MSB</emphasis>
shifted left 7 bits ORed (bitwise) with <emphasis>parameter# LSB</emphasis> [
math: (parameter# MSB &lt;&lt; 7) | parameter# LSB ].
                      </simpara>
                    </entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Off Value</emphasis></entry>
                    <entry>Unused by this setting</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On Value</emphasis></entry>
                    <entry>Parameter value when drawstop/button goes to On state.</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>RPN Off</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_RPNOff.png" /></imageobject></mediaobject>
            <simpara>
              Send RPN value only when the drawstop/button changes to <emphasis>Off</emphasis> state.
              The message sequence is Bn 0x65 parameter# MSB; Bn 0x64 parameter# LSB; Bn 0x06 parameter value.
            </simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">Parameter-No</emphasis></entry>
                    <entry>
                      <simpara>Parameter number. Range is [0,16383].</simpara>
                      <simpara>
The parameter number displays the result of <emphasis>parameter# MSB</emphasis>
shifted left 7 bits ORed (bitwise) with <emphasis>parameter# LSB</emphasis> [
math: (parameter# MSB &lt;&lt; 7) | parameter# LSB ].
                      </simpara>
                    </entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Off Value</emphasis></entry>
                    <entry>Parameter value when drawstop/button goes to Off state.</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On Value</emphasis></entry>
                    <entry>Unused by this setting</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>NRPN On</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_RPNOn.png" /></imageobject></mediaobject>
            <simpara>
              Send NRPN value only when the drawstop/button changes to <emphasis>On</emphasis> state.
              The message sequence is Bn 0x63 parameter# MSB; Bn 0x62 parameter# LSB; Bn 0x06 parameter value.
            </simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">Parameter-No</emphasis></entry>
                    <entry>
                      <simpara>Parameter number. Range is [0,16383].</simpara>
                      <simpara>
The parameter number displays the result of <emphasis>parameter# MSB</emphasis>
shifted left 7 bits ORed (bitwise) with <emphasis>parameter# LSB</emphasis> [
math: (parameter# MSB &lt;&lt; 7) | parameter# LSB ].
                      </simpara>
                    </entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Off Value</emphasis></entry>
                    <entry>Unused by this setting</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On Value</emphasis></entry>
                    <entry>Parameter value when drawstop/button goes to On state.</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>NRPN Off</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_NRPNOff.png" /></imageobject></mediaobject>
            <simpara>
              Send NRPN value only when the drawstop/button changes to <emphasis>Off</emphasis> state.
              The message sequence is Bn 0x63 parameter# MSB; Bn 0x62 parameter# LSB; Bn 0x06 parameter value.
            </simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">Parameter-No</emphasis></entry>
                    <entry>
                      <simpara>Parameter number. Range is [0,16383].</simpara>
                      <simpara>
The parameter number displays the result of <emphasis>parameter# MSB</emphasis>
shifted left 7 bits ORed (bitwise) with <emphasis>parameter# LSB</emphasis> [
math: (parameter# MSB &lt;&lt; 7) | parameter# LSB ].
                      </simpara>
                    </entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Off Value</emphasis></entry>
                    <entry>Parameter value when drawstop/button goes to Off state.</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On Value</emphasis></entry>
                    <entry>Unused by this setting</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>RPN Range</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_RPNRange.png" /></imageobject></mediaobject>
            <simpara>Send RPN when the drawstop/button changes state.</simpara>
            <simpara>
GrandOrgue always sends Bn 0x65 parameter# MSB; Bn 0x64 parameter# LSB; Bn 0x06 parameter value.
The parameter number displays the result of <emphasis>parameter# MSB</emphasis>
shifted left 7 bits ORed (bitwise) with <emphasis>parameter# LSB</emphasis>
[ math: (parameter# MSB &lt;&lt; 7) | parameter# LSB ].
            </simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">Off&#160;RPN&#160;number</emphasis></entry>
                    <entry>RPN number MIDI messages sent when the drawstop/button goes to <emphasis>Off</emphasis> state. Range is [0, 16383]</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On&#160;RPN&#160;number</emphasis></entry>
                    <entry>RPN number MIDI messages sent when the drawstop/button goes to <emphasis>On</emphasis> state. Range is [0, 16383]</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Value</emphasis></entry>
                    <entry>Parameter value. Range is [0, 127]</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
          <sect4>
            <title>NRPN Range</title>
            <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_button_send_NRPNRange.png" /></imageobject></mediaobject>
            <simpara>Send NRPN when the drawstop/button changes state.</simpara>
            <simpara>
GrandOrgue always sends Bn 0x63 parameter# MSB; Bn 0x62 parameter# LSB; Bn 0x06 parameter value.
The parameter number displays the result of <emphasis>parameter# MSB</emphasis>
shifted left 7 bits ORed (bitwise) with <emphasis>parameter# LSB</emphasis>
[ math: (parameter# MSB &lt;&lt; 7) | parameter# LSB ].
            </simpara>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px" />
                <colspec colname="c2" colsep="0" rowsep="0" />
                <tbody>
                  <row valign="top">
                    <entry><emphasis role="strong">Off&#160;NRPN&#160;number</emphasis></entry>
                    <entry>NRPN number MIDI messages sent when the drawstop/button goes to <emphasis>Off</emphasis> state. Range is [0, 16383]</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">On&#160;NRPN&#160;number</emphasis></entry>
                    <entry>NRPN number MIDI messages sent when the drawstop/button goes to <emphasis>On</emphasis> state. Range is [0, 16383]</entry>
                  </row>
                  <row valign="top">
                    <entry><emphasis role="strong">Value</emphasis></entry>
                    <entry>Parameter value. Range is [0, 127]</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </sect4>
        </sect3>
      </sect2>
      <sect2 id="activelabel">
        <title>Label</title>
        <para>
GrandOrgue supports "active" labels. These are labels which display variable
contents, such as the step number in the <link
  linkend="crescendoPanel">Crescendo panel</link>, the temperament name in the
<link linkend="masterControls">Master Controls panel</link> and many others.
Labels can be configured only for sending data to a MIDI LCD device. GrandOrgue
sends the label contents following the Hauptwerk&#8482; standards.
        </para>
        <sect3>
          <title>Hauptwerk SYSEX 32 byte LCD</title>
          <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_label_send_HW32.png" /></imageobject></mediaobject>
          <para>This setting drives a Hauptwerk&#8482; compatible LCD display, including the RGB LED color. Up to 32 characters are sent to the LCD display.</para>
          <variablelist>
            <varlistentry>
              <term>Channel</term>
              <listitem><simpara>Always disabled, since SYSEX is independent of any channel.</simpara></listitem>
            </varlistentry>
            <varlistentry>
              <term>ID</term>
              <listitem><simpara>Sets the display's ID number. Range is [0, 127].</simpara></listitem>
            </varlistentry>
            <varlistentry>
              <term>Color</term>
              <listitem><simpara>Sets the LED's color. Range is [0, 127].</simpara></listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3>
          <title>Hauptwerk SYSEX 16 byte string</title>
          <mediaobject><imageobject><imagedata fileref="images/midi_event_editor_label_send_HW16.png" /></imageobject></mediaobject>
          <para>This setting sends character strings to a Hauptwerk&#8482; compatible LCD display. The RGB LED (if any) color is ignored. Up to 16 characters are sent to the LCD display.</para>
          <variablelist>
            <varlistentry>
              <term>Channel</term>
              <listitem><simpara>Always disabled, since SYSEX is independent of any channel.</simpara></listitem>
            </varlistentry>
            <varlistentry>
              <term>ID</term>
              <listitem><simpara>Sets the display's ID number. Range is [0, 127].</simpara></listitem>
            </varlistentry>
          </variablelist>
        </sect3>
      </sect2>
    </sect1>
  </chapter>
  <chapter>
    <title>Audio and Organ settings overview</title>
    <indexterm>
    <primary>Audio overview</primary>
    </indexterm>
    <indexterm>
    <primary>Organ settings overview</primary>
    </indexterm>
    <figure>
    <title>Audio &amp; Organ settings overview</title>
    <mediaobject>
    <imageobject>
    <imagedata scalefit="1" width="100%" fileref="images/audio_big_picture.png"/>
    </imageobject>
    </mediaobject>
    </figure>
    <para>
This schema describes the close relations that exist between the real-world audio hardware capabilities
and the sample set disposition as provided by the sample set designer.
For illustration, the free sample set of Bureå Church is customized to build a totally different spatial disposition. Here are the assumptions:
    </para>
    <itemizedlist mark="bullet">
    <listitem><simpara>The organ has a main case and a separate choir (RückPositiv) case in the organist's back</simpara></listitem>
    <listitem><simpara>The console is embedded facing the main case, therefore the main case sounds "front" and the choir case sounds "rear"</simpara></listitem>
    <listitem><simpara>The organ has 2 pedal turrets on the far left and right sides of the main case</simpara></listitem>
    <listitem><simpara>The organ has an echo keyboard in the basement of the main case</simpara></listitem>
    <listitem><simpara>The computer's audio device is 4.0 surround (front left and right speakers, rear left and right speakers)</simpara></listitem>
    </itemizedlist>
    <para>
    Settings in the <link linkend="settingstab">Settings...</link> tab describe the physical environment, while settings in the <link linkend="organsettings">Organ settings</link> dialog describe how the different parts of the virtual organ map to the real-world audio outputs.
    </para>
    <informaltable frame="none">
      <tgroup cols="2">
        <colspec colname="c1" colsep="0" rowsep="0" colwidth="90px"/>
        <colspec colname="c2" colsep="0" rowsep="0"/>
        <tbody>
          <row valign="top">
            <entry>Channel:</entry>
            <entry>a real-world channel of the audio device (e.g. left and right for a stereo board). GrandOrgue channel names are always <emphasis role="bold">Channel 1</emphasis> to <emphasis role="bold">Channel n</emphasis>, <emphasis>n</emphasis> being the number of channels available on the audio device (stereo:2, surround 4.0:4, and so on). Only trial and error can determine which GrandOrgue channel is linked to which audio device physical channel.</entry>
          </row>
          <row valign="top">
            <entry>Audio&#160;group:</entry>
            <entry>a name holder used to design logical blocks within the audio system (e.g. "front speakers", "rear speakers", "subwoofer", ...). It is possible to create as many audio groups as needed.
              <caution><para>If an audio group is not used in the loaded sample set, it does add processing overhead, <emphasis role="bold">thus reducing polyphony</emphasis>, so adding unnecessary audio groups is not recommended.</para></caution>
            </entry>
          </row>
        </tbody>
      </tgroup>
    </informaltable>
    <para>In this example, the decision was made to</para>
    <itemizedlist>
      <listitem>
        <simpara>
          sound the Choir (Svällverk) through the rear speakers, full volume
        </simpara>
      </listitem>
      <listitem>
        <simpara>
          sound the Great (Huvudverk) through the front speakers, full volume
        </simpara>
      </listitem>
      <listitem>
        <simpara>
          sound the Echo (Bröstverk) through the front speakers, softened volume
        </simpara>
      </listitem>
      <listitem>
        <simpara>
          sound the C side of the Pedal through the left front speaker
        </simpara>
      </listitem>
      <listitem>
        <simpara>
          sound the C# side of the Pedal through the right front speaker
        </simpara>
      </listitem>
    </itemizedlist>
    <para>This is done by linking audio groups to channels in the <link linkend="settingstab">Settings...</link> dialog and spreading pipes over the audio groups in the <link linkend="organsettings">Organ Settings</link> dialog.</para>
  </chapter>
  <chapter id="settingstab">
    <title>Program Settings</title>
    <indexterm>
      <primary>Program Settings</primary>
    </indexterm>
    <para>This tabbed dialog is displayed when the <emphasis>Settings...</emphasis> menu item is chosen in the <emphasis>File</emphasis> menu.</para>
    <para>It manages "system-wide" GrandOrgue options. In other terms, these options apply to any loaded sample set.</para>
    <para>These options are located at different places according to the platform.</para>
    <informaltable frame="none">
      <tgroup cols="2">
        <colspec colname="c1" colwidth="100px" colsep="0" rowsep="0"/>
        <colspec colname="c2" colsep="0" rowsep="0"/>
        <tbody>
          <row>
            <entry>Windows:</entry>
            <entry>registry key HKEY_CURRENT_USER\Software\Our Organ\GrandOrgue and %APPDATA%\GrandOrgueConfig file</entry>
          </row>
          <row>
            <entry>Linux:</entry>
            <entry>$HOME/.GrandOrgue and $HOME/GrandOrgueConfig</entry>
          </row>
          <row>
            <entry>macOS:</entry>
            <entry>$HOME/Library/Preferences/GrandOrgue</entry>
          </row>
        </tbody>
      </tgroup>
    </informaltable>
    <note>
      <simpara>
When launched with an instance name (<emphasis>GrandOrgue -i <emphasis role="bold">instanceName</emphasis></emphasis>),
the name <emphasis>GrandOrgue</emphasis> becomes <emphasis>GrandOrgue-<emphasis role="bold">instanceName</emphasis></emphasis>,
the name <emphasis>GrandOrgueConfig</emphasis> becomes <emphasis><emphasis role="bold">GrandOrgueConfig-instanceName</emphasis></emphasis>
      </simpara>
    </note>
    <para>The user can reset  settings to default values by deleting the "options files" according to the platform.</para>
    <sect1>
      <title>Options tab</title>
      <indexterm>
        <primary>Settings.Options</primary>
      </indexterm>
      <figure id="optionstab">
        <title>Options</title>
        <mediaobject>
          <imageobject>
            <imagedata scalefit="1" width="100%" fileref="images/settings_options.png"/>
          </imageobject>
        </mediaobject>
      </figure>
      <sect2>
        <title>Language frame</title>
        <indexterm>
          <primary>Language</primary>
        </indexterm>
        <para>
Select the language to use. A change requires a restart of the app.
Also note that some dialogs might use the language set systemwide.
</para>
      </sect2>
      <sect2>
        <title>Enhancements frame</title>
        <sect3>
          <title>Active polyphony management</title>
          <indexterm>
            <primary>Active Polyphony Management</primary>
          </indexterm>
          <para>
When polyphony reaches 3/4 of the current maximum value, release
samples (reverberation tails) are faded out in order to conserve
polyphony.
</para>
          <variablelist>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>Conserved</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3>
          <title>Release Sample Scaling</title>
          <indexterm>
            <primary>Release Sample Scaling</primary>
          </indexterm>
          <para>
For those sample sets with long reverberation tails ("wet"), enabling
this option will fade out the release sample if the note is played
staccato. It will have little to no effect on "dry" sample sets.
          </para>
          <variablelist>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3>
          <title>Randomize Pipe Speaking</title>
          <indexterm>
            <primary>Randomize Pipe Speaking</primary>
          </indexterm>
          <para>
This will apply a very small random detuning before each pipe begins to speak.
The detuning is small enough so that the ear can't appreciate the tuning difference and large enough so that it approximates the tiny interferences (due to physical location) that occur when playing multiple real pipes in an organ.
          </para>
          <variablelist>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3>
          <title>Load last file at startup</title>
          <indexterm>
            <primary>Load last file at startup</primary>
          </indexterm>
          <para>This will trigger the automatic load of the last used sample set.</para>
          <variablelist>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
      </sect2>
      <sect2>
        <title>Sound engine frame</title>
        <sect3>
          <title>Interpolation</title>
          <indexterm>
            <primary>Interpolation</primary>
          </indexterm>
          <para>This dropdown controls the method used to interpolate the waveform when resampling the samples.</para>
          <variablelist>
            <varlistentry>
              <term>Polyphase</term>
              <listitem>
                <simpara>This method gives better audio results at the expense of higher CPU load.</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Linear</term>
              <listitem>
                <simpara>This method  lowers CPU load at he expense of audio quality. It is the only usable option when <link linkend="losslesscompression">lossless compression</link> is enabled, as polyphase interpolation is not yet implemented with lossless compression.</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
          <para>The assertions about audio quality should be used as guidelines only. As a rule of thumb, polyphase gets better treble, linear gets better bass, and this is most noticeable in sample sets that use interpolation extensively (e.g. retuning a detuned organ). Audio quality is highly subjective, so the user is strongly encouraged to listen for himself and retain the setting that suits him better.</para>
          <variablelist>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>Linear gives more polyphony</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3 id="concurrencylevel">
          <title>Number of CPU cores</title>
          <indexterm>
            <primary>Number of CPU cores</primary>
          </indexterm>
          <para>This number states how many threads GrandOrgue creates to spread the load. Cores number is the recommended choice for computers without Hyper-threading. Less doesn't use the whole computer. More wastes resources while managing overhead.</para>
          <para>With Hyper-threading enabled, the CPU load seems more evenly spread among virtual cores.</para>
          <variablelist>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>Raising the number of cores raises the polyphony attained before the sound starts to break.</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3>
          <title>Workload distribution</title>
          <indexterm>
            <primary>Workload distribution</primary>
          </indexterm>
          <para>This setting has the same role as <link linkend="concurrencylevel">Number of CPU cores</link>, and is dedicated to splitting the workload. The same value as the number of CPU cores is recommended.</para>
          <variablelist>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara>Same as concurrency</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>Same as concurrency</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>Same as concurrency</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3>
          <title>Cores used at load time</title>
          <indexterm><primary>Cores used at loadtime</primary></indexterm>
          <para>This number states how many threads GrandOrgue creates to load samples in memory. It has <emphasis role="bold">NO</emphasis> effect when loading samples from cache.</para>
          <para>Higher speed-up loading while reducing the available memory for samples. A zero (0) value means classic load.</para>
        </sect3>
        <sect3>
          <title>Recorder WAV Format</title>
          <indexterm>
            <primary>Recorder WAV format</primary>
          </indexterm>
          <para>This selects the format used by the <link linkend="recorder">Audio recorder</link>. The supported formats are: 8 bit, 16 bit, 24 bit PCM and 32 bit IEEE float.</para>
          <variablelist>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3>
          <title>Record stereo downmix</title>
          <indexterm><primary>Record stereo downmix</primary></indexterm>
          <para>This text box enables GrandOrgue to record multi-channel audio in simple stereo. This option is disabled by default, as it increases CPU usage even if the audio recorder is off.</para>
          <para>When stereo downmix is disabled, all audio channels are recorded in the WAV file.</para>
          <variablelist>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>Slightly - like an additional audio interface</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
      </sect2>
      <sect2>
        <title>Volume</title>
        <para>
This spinner provides the default <link linkend="volumecontrol">volume</link>
value. Initialized to -15 on the very first run of a GrandOrgue instance. This
value is <link linkend="save">saved</link> to settings files.
        </para>
      </sect2>
      <sect2>
        <title>Sample loading frame</title>
        <sect3 id="losslesscompression">
          <title>Lossless compression</title>
          <indexterm>
            <primary>Lossless compression</primary>
          </indexterm>
          <para>
Uses a lossless algorithm (i.e. the original samples can be perfectly
reconstructed) so that RAM requirements are lessened. Particularly
useful for large sample sets.
</para>
          <variablelist>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara>Variable savings up to 40%</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>Approx. 10% lower</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>Approx. 20% slower. Only affects load without cache - as the compressed data is cached.</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3 id="loadstereosamples">
          <title>Load stereo samples</title>
          <indexterm>
            <primary>Load stereo samples</primary>
          </indexterm>
          <para>Selects whether stereo samples are loaded in Mono or Stereo</para>
          <para>
If set to Mono, all samples are loaded in Mono. When compression is disabled, this will save 50%, but when compression is enabled, much less will be saved because the compression is much less effective on monaural inputs.
          </para>
          <para>
This setting can be set to don't load, if you want GrandOrgue to avoid loading any samples. Via <link linkend="organsettings">Organ Settings</link>, it is still possible to load only specific parts of the organ.
          </para>
          <variablelist>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara>Variable savings up to 50%</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>Slight impact, as loading in Mono saves a few calculations per sample.</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3 id="samplesize">
          <title>Sample size</title>
          <indexterm>
            <primary>Sample size</primary>
          </indexterm>
          <para>Selects whether the samples are loaded with 8 or 12 or 16 or 24  bits precision.</para>
          <variablelist>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara>High impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>The polyphony will increase with lower bit sizes and decrease with higher bit sizes.</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>Slight impact</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3 id="looploading">
          <title>Loop loading</title>
          <indexterm>
            <primary>Loop loading</primary>
          </indexterm>
          <para>Selects which loop(s) are loaded if the samples have multiple loops.</para>
          <variablelist>
            <varlistentry>
              <term>First loop</term>
              <listitem>
                <simpara>Load only the first loop.</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Longest loop</term>
              <listitem>
                <simpara>Load only the longest loop found in the sample. Longer loops usually feel more lively.</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>All loops</term>
              <listitem>
                <simpara>Load all loops found in the sample. While playing, the loops are cycled using a round-robin scheme.</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara><emphasis>First loop</emphasis> less than <emphasis>Longest loop</emphasis> less than <emphasis>All loops</emphasis></simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>Increases with the amount of data loaded</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3>
          <title>Attack loading</title>
          <indexterm>
            <primary>Attack loading</primary>
          </indexterm>
          <para>The sample set creator can provide multiple separate attack files.This selects which attack(s) are loaded.</para>
          <variablelist>
            <varlistentry>
              <term>All</term>
              <listitem>
                <simpara>Load all attack files.</simpara>
              </listitem>
            </varlistentry>
            <varlistentry id="attackloading">
              <term>Single attack</term>
              <listitem>
                <simpara>Load only the "best" provided file.</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara><emphasis>Single attack</emphasis> less than <emphasis>All</emphasis></simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>Increases with the amount of data loaded</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3 id="releaseloading">
          <title>Release loading</title>
          <indexterm>
            <primary>Release loading</primary>
          </indexterm>
          <para>The sample set creator can provide multiple separate release files.This selects which release(s) are loaded.</para>
          <variablelist>
            <varlistentry>
              <term>All</term>
              <listitem>
                <simpara>Load all release files. The sound engine selects which release to play according to how much time the sustain sample was held. For example, it usually selects the shortest release sample while playing staccato.</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Single&#160;release</term>
              <listitem>
                <simpara>Load only the "best" provided release file.</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara>Same as <link linkend="attackloading">Attack loading</link></simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>Same as Attack loading</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3>
          <title>Memory limit</title>
          <indexterm>
            <primary>Memory limit</primary>
          </indexterm>
          <para>Chooses the size of the memory cache where samples are loaded. This is especially useful when running the 32 bits Windows build on 64 bits platforms to avoid a crash while loading a big sample set.</para>
          <para>
            If this parameter is set to zero, it tries to load as much data as possible.
            <caution>
              <simpara>In this case, GrandOrgue keeps loading until the OS fails to provide memory. It can provide large amounts of swap space with expectable adverse impact on performances.</simpara>
            </caution>
          </para>
        </sect3>
      </sect2>
      <sect2>
        <title>Cache frame</title>
        <sect3>
          <title>Compress cache</title>
          <indexterm>
            <primary>Compress cache</primary>
          </indexterm>
          <para>Selects whether the disk cache must be compressed when created or updated.</para>
          <variablelist>
            <varlistentry>
              <term>Memory</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Polyphony</term>
              <listitem>
                <simpara>No impact</simpara>
              </listitem>
            </varlistentry>
            <varlistentry>
              <term>Load time</term>
              <listitem>
                <simpara>Loading from an uncompressed cache is I/O bound, while loading from a compressed cache requires more CPU. With a slow disk + fast CPU, compressed might be better.</simpara>
                <simpara>This feature is closely related to the hardware capacities, so the user is encouraged to test for himself and retain the best setting for his computer.</simpara>
              </listitem>
            </varlistentry>
          </variablelist>
        </sect3>
        <sect3 id="managecache">
          <title>Automatically manage cache</title>
          <indexterm>
            <primary>Automatically manage cache</primary>
          </indexterm>
          <para>Selects whether the cache must be automatically created or updated when the sample set is loaded.</para>
        </sect3>
      </sect2>
      <sect2>
        <title>Perform strict ODF</title>
        <indexterm><primary>Preform strict ODF</primary></indexterm>
        <para>
Organ Definition File (ODF) syntax has much changed since the days of
Hauptwerk&#8482; version 1. Some Hauptwerk&#8482; 1 keywords are not used by
GrandOrgue and are reported as warning in the pop-up message window.
        </para>
        <para>
Introducing ODF warnings to GrandOrgue is a two-step development process:
          <orderedlist>
            <listitem><simpara>
A new warning is added to the ODF parsing utilities. It is displayed only in
strict ODF mode, to give sample sets designers time to remove the new warning
from their Organ Definition Files, without disturbing users.
            </simpara></listitem>
            <listitem><simpara>After a suitable number of months has elapsed, the warning is moved to normal mode and is always displayed.</simpara></listitem>
          </orderedlist>
        </para>
        <para>This checkbox enables strict ODF mode.</para>
        <note>
          <simpara>
Sample set designers are <emphasis role="strong">strongly</emphasis> encouraged
to update their Organ Definition Files in order to remove warnings and improve
user experience.
          </simpara>
          <simpara>Likewise, GrandOrgue users are <emphasis role="strong">strongly</emphasis> encouraged to report new warnings to the sample set designer.</simpara>
        </note>
      </sect2>
      <sect2>
        <title>Check ODF for HW1-compatibility</title>
        <para>
          This checkbox enables warnings when some ODF keys are not compatible with the Hauptwerk 1.
	  For example, when file names contains the '/' separator.
        </para>
      </sect2>
      <sect2>
        <title>Metronome</title>
        <para>
These spinners provide default values for the number of beats per minute (BPM)
and the number of beats per bar in the <link
  linkend="metronome">metronome</link> panel. Initialized to 80 beats per
minute and 4 beats per bar on the very first run of a GrandOrgue instance. They
are <link linkend="save">saved</link> to settings files.
        </para>
      </sect2>
    </sect1>
    <sect1>
      <indexterm>
        <primary>Settings.Paths</primary>
      </indexterm>
      <title>Paths tab</title>
      <figure>
        <title>Paths tab</title>
        <mediaobject><imageobject><imagedata scalefit="1" width="100%" fileref="images/settings_paths.png" /></imageobject></mediaobject>
      </figure>
      <para>
        These text boxes provide default paths for various storage areas. They are
        initialized to paths in the <emphasis>GrandOrgue</emphasis> relative
        to the user's home folder, and their names are localized.
        The <emphasis>...</emphasis> button located besides each text box
        allows to change the value.
      </para>
      <para>
        The location of the <emphasis>GrandOrgue</emphasis> directory depends on the operating system:
      </para>
      <informaltable frame="none">
        <tgroup cols="2">
          <colspec colname="c1" colwidth="150px" colsep="0" rowsep="0"/>
          <colspec colname="c2" colsep="0" rowsep="0"/>
          <tbody>
            <row>
              <entry><emphasis role="strong">Linux</emphasis></entry>
              <entry>$HOME/GrandOrgue/Organs</entry>
            </row>
            <row>
              <entry><emphasis role="strong">Windows</emphasis></entry>
              <entry>%HOMEDRIVE%\%HOMEDIR%\Documents\GrandOrgue</entry>
            </row>
            <row>
              <entry><emphasis role="strong">macOS</emphasis></entry>
              <entry>$HOME/Documents/GrandOrgue</entry>
            </row>
          </tbody>
        </tgroup>
      </informaltable>
      <sect2>
        <title>Path usage</title>
        <informaltable frame="none">
          <tgroup cols="3">
            <colspec colname="c1" colwidth="150px" colsep="0" rowsep="0"/>
            <colspec colname="c2" colsep="0" rowsep="0"/>
            <colspec colname="c3" colsep="0" rowsep="0"/>
            <tbody>
              <row>
                <entry><emphasis role="strong">Sample sets</emphasis></entry>
                <entry>This is the folder where GrandOrgue looks for sample sets. It is opened when the <link linkend="file_open">File &gt; Open</link> menu item is selected.</entry>
                <entry>Default: <emphasis>Organs</emphasis></entry>
              </row>
              <row>
                <entry><emphasis role="strong">Organ packages</emphasis></entry>
                <entry>
This is the folder where GrandOrgue looks for organ package files. Any organ
package file dropped in this folder will be automatically searched for Organ
Definition Files on next GrandOrgue run and any ODF found in the package file
will be added to the <link linkend="knownorgans">known organs list</link>.
                </entry>
              </row>
              <row id="cachestore">
                <entry><emphasis role="strong">Organ cache</emphasis></entry>
                <entry>This selects the directory where cache files are stored.</entry>
                <entry>Default: <emphasis>Cache</emphasis></entry>
              </row>
              <row id="settingsstore">
                <entry><emphasis role="strong">Organ settings</emphasis></entry>
                <entry>
                  This selects the directory where preset files are stored.
                </entry>
                <entry>Default: <emphasis>Data</emphasis></entry>
              </row>
              <row>
                <entry><emphasis role="strong">Combinations</emphasis></entry>
                <entry>
		  This is the folder where GrandOrgue stores or looks for
		  combinations files in YAML format. Combinations for different
		  organs are stored in subfolders of this folder. The names of
		  the subfolders equal to the organ names. The subfolder of the
		  current loaded organ is opened when one of the
		  <link linkend="import_comb">File &gt; Import Combinations
		  </link>, <link linkend="export_combinations">File &gt; Export
		  Combinations</link> menu items is selected.
                </entry>
                <entry>Default: <emphasis>Settings</emphasis></entry>
              </row>
              <row>
                <entry><emphasis role="strong">Export/Import</emphasis></entry>
                <entry>
		  This is the folder where GrandOrgue stores or looks for
		  settings files. It is opened when one of the
		  <link linkend="import_settings">File &gt; Import Settings
		  </link>, <link linkend="export_settings">File &gt; Export
		  Settings</link> menu items is selected. This
		  folder is usually different from the folder where GrandOrgue
		  <link linkend="settingsstore">stores</link> preset files.
                </entry>
                <entry>Default: <emphasis>Settings</emphasis></entry>
              </row>
              <row>
                <entry><emphasis role="strong">Audio recording</emphasis></entry>
                <entry>
This is the folder where GrandOrgue stores audio recording files. It is opened
when the <link linkend="recorder">Audio Recorder</link> <emphasis
role="strong">STOP</emphasis> button is depressed.
                </entry>
                <entry>Default: <emphasis>Audio recording</emphasis></entry>
              </row>
              <row>
                <entry><emphasis role="strong">MIDI recording</emphasis></entry>
                <entry>
This is the folder where GrandOrgue stores MIDI recording files. It is opened
when the <link linkend="recorder">MIDI Recorder</link> <emphasis
role="strong">STOP</emphasis> button is depressed.
                </entry>
                <entry>Default: <emphasis>MIDI recording</emphasis></entry>
              </row>
              <row>
                <entry><emphasis role="strong">MIDI player</emphasis></entry>
                <entry>This is the folder where GrandOrgue looks for MIDI recording files. It is opened when the <link linkend="PlayMidi">Audio/Midi &gt; Load MIDI</link> menu item is selected.</entry>
                <entry>Default: <emphasis>MIDI player</emphasis></entry>
              </row>
            </tbody>
          </tgroup>
        </informaltable>
      </sect2>
    </sect1>
    <sect1>
      <title>Audio tab</title>
      <indexterm>
        <primary>Settings.Audio</primary>
      </indexterm>
      <figure>
        <title>Audio tab</title>
        <mediaobject>
          <imageobject>
            <imagedata scalefit="1" width="100%" fileref="images/settings_audio.png"/>
          </imageobject>
        </mediaobject>
      </figure>
      <para>
        This dialog selects the audio output device and defines which channels
        and audio groups the audio output is dispatched to, as well as audio
        stream parameters in the Sound output frame and the selection of shown
        devices/drivers in the Sound port frame.
      </para>
      <informaltable frame="none">
        <tgroup cols="2">
          <colspec colname="c1" colsep="0" rowsep="0" colwidth="90px"/>
          <colspec colname="c2" colsep="0" rowsep="0"/>
          <tbody>
            <row  valign="top">
              <entry>Channel:</entry>
              <entry>a real-world channel of the audio device (e.g. left and right for a stereo board). GrandOrgue channel names are always <emphasis role="bold">Channel 1</emphasis> to <emphasis role="bold">Channel n</emphasis>, <emphasis>n</emphasis> being the number of channels available on the audio device (stereo:2, surround 4.0: 4, and so on). Only trial and error can determine which GrandOrgue channel is linked to which audio device physical channel.</entry>
            </row>
            <row  valign="top">
              <entry>Audio&#160;group:</entry>
              <entry>a name holder used to fine tune the routing of audio output from the individual pipe to a particular channel of the audio device. See <link linkend="organsettings">Organ Settings</link> for more information.</entry>
            </row>
          </tbody>
        </tgroup>
      </informaltable>
      <sect2 id="audiogroupstab">
        <title>Audio groups frame</title>
        <indexterm>
          <primary>Audio Groups</primary>
        </indexterm>
        <para>
          This frame allows to manage audio groups. As  said above, audio groups
          are name holders that are used to map the audio output
          of the individual pipe to definite parts of the audio system.
        </para>
        <para>
          The system requires at least one audio group, and is initialized
          with a default audio group named <emphasis>Default audio group</emphasis>.
        </para>
        <para>The <emphasis>Default audio group</emphasis> is <emphasis role="bold">always</emphasis> the first audio group in the list, so the <emphasis>Default audio group</emphasis> name can be changed at any time.</para>
        <sect3 id="addaudiogroup">
          <title>Add</title>
          <indexterm>
            <primary>New audio group</primary>
          </indexterm>
          <para>The <emphasis>Add</emphasis> button opens a dialog where one can type the new audio group name.</para>
          <mediaobject>
            <imageobject>
              <imagedata scalefit="1" width="100%" fileref="images/new_audio_group.png"/>
            </imageobject>
          </mediaobject>
          <caution><simpara>If an audio group is not used in the loaded sample set, it does add processing overhead, <emphasis role="bold">thus reducing polyphony</emphasis>, so adding unnecessary audio groups is not recommended.</simpara></caution>
        </sect3>
        <sect3>
          <title>Delete</title>
          <indexterm>
            <primary>Delete audio group</primary>
          </indexterm>
          <para>This feature is available when an audio group name is selected in the list. The <emphasis>Delete</emphasis> button is active. Push the button, the selected audio group is deleted.</para>
          <caution>
            <simpara>If the deleted audio group is assigned to an organ element (<link linkend="organsettings">Organ Settings</link> dialog), all pipes routed to this audio group will be automatically routed to the default audio group.</simpara>
          </caution>
        </sect3>
        <sect3>
          <title>Rename</title>
          <indexterm>
            <primary>Rename audio group</primary>
          </indexterm>
          <para>This feature is available when an audio group name is selected in the list. The <emphasis>Rename</emphasis> button is active. It opens the same dialog as in <link linkend="addaudiogroup">Add</link>, where the audio group's name can be changed.</para>
          <caution>
            <simpara>If the renamed audio group is assigned to an organ element (<link linkend="organsettings">Organ Settings</link> dialog), all pipes routed to this audio group will be automatically routed to the default audio group.</simpara>
          </caution>
        </sect3>
      </sect2>
      <sect2>
        <title>Sound output frame</title>
        <sect3>
          <title>Sample rate</title>
          <indexterm>
            <primary>Sample rate</primary>
          </indexterm>
          <para>Selects the output sample rate. Allowed values are 44100, 48000 and 96000 Hz.</para>
          <para>The sample rate should match both the configured sample rate in the audio interface and the sample rate of the recorded samples  to avoid  resampling. If not, resampling can occur in all layers of the audio stack, and audio quality can suffer.</para>
        </sect3>
        <sect3 id="samplesperbuffer">
          <title>Samples per buffer</title>
          <indexterm>
            <primary>Samples per buffer</primary>
          </indexterm>
          <para>Allowed values range from 16 to 1024 by increment of 16.</para>
          <para>This parameter sets the output buffer size. Larger values usually reduce sound artifacts at the expense of latency.</para>
        </sect3>
      </sect2>
      <sect2>
        <title>Sound ports frame</title>
        <sect3>
          <title>Sound ports</title>
          <indexterm>
            <primary>Sound ports</primary>
          </indexterm>
          <para>By checking or unchecking the devices/drivers it's possible to filter the list of devices shown in the device picking dialog.</para>
        </sect3>
      </sect2>
      <sect2>
        <title>Managing Devices</title>
        <indexterm>
          <primary>Audio devices</primary>
        </indexterm>
        <sect3>
          <title>Add device</title>
          <indexterm>
            <primary>Add audio device</primary>
          </indexterm>
          <para>This feature is available when the <emphasis role="bold">&lt;Audio Output&gt;</emphasis> node is selected. The <emphasis>Add</emphasis> button is active. This node is the place where it is technically possible to add multiple audio devices.</para>
          <caution>
          <simpara>Multiple audio devices are currently <emphasis role="bold">NOT</emphasis> supported. Setting multiple audio devices leads to unpredictable results. A warning is displayed and if acknowledged, a new audio device is set in the list.</simpara>
          </caution>
          <para>The <emphasis>Add</emphasis> button opens a pick list with all audio devices found in the system.</para>
          <mediaobject id="audiodevicepicklist">
            <imageobject>
              <imagedata fileref="images/audio_devices_picklist.png"/>
            </imageobject>
          </mediaobject>
          <para>Each audio device is prefixed by its sound port and the API type (ASIO, DirectSound, ALSA, JACK, etc.)</para>
          <para>Select the desired audio device. The devices list is updated with the new device which is initialized with a single channel.</para>
          <para>The new device needs further configuration to be usable. See <link linkend="audiochannels">Managing Channels</link> for more information.</para>
          <caution><title>Reminder</title>
            <simpara>Multi-device configuration is <emphasis role="bold">NOT</emphasis> supported.</simpara>
          </caution>
        </sect3>
        <sect3>
          <title>Change device</title>
          <indexterm>
            <primary>Change audio device</primary>
          </indexterm>
          <para>This feature is available when a <emphasis role="bold">Device:</emphasis> node is selected in the tree. The <emphasis>Change</emphasis> button is active. It opens the <link linkend="audiodevicepicklist">same</link> pick list as for adding a device.</para>
          <para>Select the desired device. The  devices list is updated with the new device, while the channel configuration is retained.</para>
        </sect3>
        <sect3>
          <title>Delete device</title>
          <indexterm>
            <primary>Delete audio device</primary>
          </indexterm>
          <para>This feature is available when a <emphasis role="bold">Device:</emphasis> node is selected in the tree. The <emphasis>Delete</emphasis> button is active <emphasis>only if there are at least two devices in the tree</emphasis>.</para>
          <para>Select the device to delete. Push the <emphasis>Delete</emphasis> button.The device is removed from the tree.</para>
        </sect3>
        <sect3>
          <title>Device properties</title>
          <indexterm>
            <primary>Audio device properties</primary>
          </indexterm>
          <para>The <emphasis>Properties</emphasis> button becomes active  when an audio device is selected in the tree. It opens a dialog which allows  to set a <emphasis>requested</emphasis> latency.</para>
          <mediaobject>
            <imageobject>
              <imagedata fileref="images/audio_device_latency_dialog.png"/>
            </imageobject>
          </mediaobject>
          <note>
            <simpara>This feature is closely related to the <link linkend="samplesperbuffer">samples per buffer</link> setting in the <emphasis>Options</emphasis> tab. Its behavior differs according to the chosen backend.</simpara>
          </note>
          <sect4>
            <title>Audio driver selection</title>
            <para>GrandOrgue feature two audio backends:</para>
            <informaltable frame="none">
              <tgroup cols="2">
                <colspec colname="c1" colwidth="80px" colsep="0" rowsep="0"/>
                <colspec colname="c2" colsep="0" rowsep="0"/>
                <tbody>
                  <row  valign="top">
                    <entry>
                      <emphasis>RtAudio</emphasis>
                    </entry>
                    <entry>selects the number of buffers based on the desired latency setting. The "samples per buffer" and sample rate setting <emphasis role="bold"> must be supported by the sound card/driver</emphasis>, otherwise sound rendering will break.</entry>
                  </row>
                  <row  valign="top">
                    <entry>
                      <emphasis>PortAudio</emphasis>
                    </entry>
                    <entry>uses the desired latency setting, the "samples per buffer" setting and the capabilities of the sound card/driver to determine the operational buffering it will use. Such drivers are marked with <emphasis>(PA)</emphasis> in its name.</entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
            <simpara>
              <emphasis>Audio/Sound Output State</emphasis> tries to
              displays <emphasis>actual</emphasis> latency. Note that
              the estimate can be based on numbers provided by the
              hardware and the drivers and may vary. RtAudio is more
              likely to display to low numbers.
            </simpara>
            <sect5>
              <title>Windows</title>
              <variablelist>
                <varlistentry>
                  <term>WDM/KS</term>
                  <listitem>
                    <para>
                      This driver allows direct access to the Windows
                      kernel driver<footnote><simpara>ASIO4ALL also
                      uses that interface</simpara></footnote>. This
                      is the recommended driver if there is no other
                      software which blocks access to the kernel
                      audio streams. It is supported only via PortAudio.
                    </para>
                  </listitem>
                </varlistentry>
                <varlistentry>
                  <term>WASAPI</term>
                  <listitem>
                    <para>
                      WASAPI support started with Window Vista. Use it if WDM/KS does not work for you. It is supported only via PortAudio.
                    </para>
                    <note><simpara>The sample rate of GrandOrgue must match the sample rate of the audio subsystem. So if WASAPI does not work, try a different sample rate in GrandOrgue.</simpara></note>
                  </listitem>
                </varlistentry>
                <varlistentry>
                  <term>DirectSound</term>
                  <listitem>
                    <para>
                      Use it if WDM/KS and WASAPI does not work for you. It is supported via PortAudio and RtAudio.
                    </para>
                  </listitem>
                </varlistentry>
                <varlistentry>
                  <term>WMME</term>
                  <listitem>
                    <para>
                      This a classic, not low-latency audio API. Use it as last fallback. It is supported only via PortAudio.
                    </para>
                  </listitem>
                </varlistentry>
                <varlistentry>
                  <term>ASIO</term>
                  <listitem>
                    <para>
                      GrandOrgue can be compiled with ASIO support. It is supported via PortAudio and RtAudio.
                    </para>
                    <para>
                      ASIO loads third party code into the GO process, so a bad ASIO driver can cause GO hangs.
                    </para>
                    <note><simpara>There is no reason to use ASIO4ALL,
                    because it acts as a pass-through to the native kernel
                    streaming APIs (e.g. WDM/KS) that GrandOrgue can use
                    directly.</simpara></note>
                  </listitem>
                </varlistentry>
                <varlistentry>
                  <term>Jack</term>
                  <listitem>
                    <para>
                      GrandOrgue can also be compiled with Jack Support on Windows. See the Linux Jack usage notes.
                    </para>
                  </listitem>
                </varlistentry>
              </variablelist>
            </sect5>
            <sect5>
              <title>macOS</title>
              <variablelist>
                <varlistentry>
                  <term>CoreAudio</term>
                  <listitem>
                    <para>
                      You can use the macOS native audio API CoreAudio via RtAudio as well as PulseAudio.
                    </para>
                  </listitem>
                </varlistentry>
                <varlistentry>
                  <term>Jack</term>
                  <listitem>
                    <para>
                      GrandOrgue can also be compiled with Jack Support on macOS. See the Linux Jack usage notes.
                    </para>
                  </listitem>
                </varlistentry>
              </variablelist>
            </sect5>
            <sect5>
              <title>Linux</title>
              <variablelist>
                <varlistentry>
                  <term>ALSA</term>
                  <listitem>
                    <para>
                      You can use the Linux native sound output either via RtAudio as well as via PortAudio. To allow direct hardware access, your Linux user account needs access to the sound card<footnote><simpara>that means being member of the <emphasis>audio</emphasis> group on many Linux distributions</simpara></footnote>.
                    </para>
                    <para>
                      ALSA also provides "virtual" sound card entries. "default" routes the audio to the current default sound card and allows shared access.
                      If the active sample rate on the hardware does not match the GrandOrgue sample rate, ALSA will start resampling, which will increase the CPU usage.
                    </para>
                    <note>
                      <simpara>
                        Distributions often route the default audio via the PulseAudio daemon. If you don't want to use PulseAudio, you can start GrandOrgue via via pasuspender(1).
                      </simpara>
                    </note>
                  </listitem>
                </varlistentry>
                <varlistentry>
                  <term>Jack</term>
                  <listitem>
                    <para>
                      You can connect to a Jack audio server either via RtAudio as well as PulseAudio. GrandOrgue also includes jack MIDI support, so will likely
                      see MIDI devices twice (via jack as well as via the native OS APIs).
                    </para>
                    <para>
                      GrandOrgue has support for the native audio APIs and jack adds complexity to the sound output stack. Therefore avoid running jack, unless you want to use GrandOrgue together with other jack applications.
                    </para>
                  </listitem>
                </varlistentry>
              </variablelist>
            </sect5>
          </sect4>
        </sect3>
        <sect3>
          <title>Matching</title>
          <indexterm>
            <primary>Audio device matching rules</primary>
          </indexterm>
          <para>
            This feature is available when a <emphasis role="bold">Device:
            </emphasis> node is selected in the tree.
          </para>  
          <para>
            This button allows to define matching rules for devices whose name
            may be altered across reboots. See 
            <link linkend="devicematching">Device Matching</link> for details
          </para>
        </sect3>
        <sect3>
          <title>Revert to default</title>
          <indexterm>
            <primary>Revert audio configuration</primary>
          </indexterm>
          <para>This button discards all audio configuration settings and creates a stereo configuration for the current device:</para>
          <informaltable frame="none">
            <tgroup cols="2">
              <colspec colname="c1" colwidth="70px" colsep="0" rowsep="0"/>
              <colspec colname="c2" colsep="0" rowsep="0"/>
              <tbody>
                <row>
                  <entry>Channel 1:</entry>
                  <entry>one 'left' entry for each defined audio group, gain set to 0 db</entry>
                </row>
                <row>
                  <entry>Channel 2:</entry>
                  <entry>one 'right' entry for each defined audio group, gain set to 0 db</entry>
                </row>
              </tbody>
            </tgroup>
          </informaltable>
        </sect3>
      </sect2>
      <sect2 id="audiochannels">
        <title>Managing Channels</title>
        <indexterm>
          <primary>Audio device channels</primary>
        </indexterm>
        <sect3>
          <title>Add channel</title>
          <indexterm>
            <primary>Add audio channel</primary>
          </indexterm>
          <para>This feature is available when a <emphasis role="bold">Device:</emphasis> node is selected in the tree. The <emphasis>Add</emphasis> button becomes active only if the number of channels currently defined for that device is less than the device's maximum number of channels.</para>
          <para>The <emphasis>Add</emphasis> button adds a new channel which is numbered with the next channel number. The new channel needs further configuration (audio groups) to be usable. See <link linkend="audiogroupstab" os="">Managing Audio Groups</link> for further information on that topic.</para>
          <note>
            <simpara>Only trial and error can determine which GrandOrgue channel is linked to each real-world audio channel.</simpara>
          </note>
        </sect3>
        <sect3>
          <title>Delete channel</title>
          <indexterm>
            <primary>Delete audio channel</primary>
          </indexterm>
          <para>This feature is available when a <emphasis role="bold">Channel n</emphasis> node is selected in the tree. The <emphasis>Delete</emphasis> button is active only if there are at least two channels defined for the device. Push the <emphasis>Delete</emphasis> button. The selected channel is deleted with its configuration.</para>
        </sect3>
      </sect2>
    </sect1>
    <sect1 id="devicematching">
        <title>Device Matching</title>
        <indexterm>
          <primary>Device Matching</primary>
        </indexterm>
        <figure>
          <title>Device matching properties</title>
          <mediaobject>
            <imageobject>
              <imagedata fileref="images/device_matching_editor.png"/>
            </imageobject>
          </mediaobject>
        </figure>
        <para>
          This dialog allows to define matching rules for audio/midi device
          names  
        </para>
        <variablelist>
          <varlistentry>
            <term>Physical device name</term>
            <listitem>
              <para>
                This is the name of a Audio/MIDI device as it is reported by
                the Sound/MIDI port. A user cannot alter it, and this name may
                be not persistent across reboots
              </para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>Logical device name</term>
            <listitem>
              <para>
                This is the name of Audio/MIDI device as it is presented to the
                user. By default it is the same name as the physical name, but
                the user is capable to set some another name
              </para>
              <note>
                <simpara>The logical device name must be unique</simpara>
              </note>
              <note>
                <simpara>
                  If the user alters the logical name, a regex pattern must
                  be provided so that GrandOrgue can find this device by its
                  physical name.
                </simpara>
                <simpara>
                  Specify the most common part among the different physical 
                  names that the device can have across reboots
                </simpara>
              </note>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>Physical name regex pattern</term>
            <listitem>
              <para>
                This is a pattern that allows GrandOrgue to find this Audio/MIDI
                device with it's physical device name.
              </para>
              <para>
                The simplest pattern would be the most common part of the
                physical device name that is always present and kept across
                reboots. More advanced regular expressions are also supported, 
                look at
                <ulink
                  url="https://en.wikibooks.org/wiki/Regular_Expressions/POSIX_Basic_Regular_Expressions"
                >
                  https://en.wikibooks.org/wiki/Regular_Expressions/POSIX_Basic_Regular_Expressions
                </ulink> for the full syntax.
              </para>
              <para>
                By default the regex pattern is empty so the device can be
                found only if it's physical name is equal to it's logical name
              </para>
            </listitem>
          </varlistentry>
        </variablelist>
    </sect1>
    <sect1 id="mididevicestab">
      <title>MIDI Devices tab</title>
      <indexterm>
        <primary>Settings.MidiDevices</primary>
      </indexterm>
      <figure>
        <title>MIDI devices options</title>
        <mediaobject>
          <imageobject>
            <imagedata fileref="images/settings_midi_devices.png"/>
          </imageobject>
        </mediaobject>
      </figure>
      <para>This tab shows all available MIDI devices.</para>
      <variablelist>
        <varlistentry>
          <term>Auto add new devices</term>
          <listitem>
            <para>
              This checkbox controls whether any new input devices will be enabled
              automatically when GrandOrgue starts.
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Check on startup</term>
          <listitem>
            <para>
              This checkbox controls whether to open the Program Settings dialog
              when GrandOrgue starts if no active MIDI devices can be found.
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Midi ports</term>
          <listitem>
            <para>
              By checking or unchecking the MIDI ports it's possible to filter
              the list of MIDI devices used by GrandOrgue.
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MIDI input devices</term>
          <listitem>
            <para>
This checklist shows all available MIDI input interfaces. Selecting
a device means that GrandOrgue will listen for incoming MIDI messages through
that interface. This allows to listen to more than one device at a time; for
example, to listen to both a controller and a sequencer or loopback device.
            </para>
            <para>
The <indexterm><secondary>Advanced Properties</secondary></indexterm>
<emphasis>Advanced</emphasis> button is grayed out unless an input channel is
selected. It opens a dialog to set advanced properties of the selected input
channel.
            </para>
            <figure>
              <title>MIDI input channel advanced properties</title>
              <mediaobject>
                <imageobject>
                  <imagedata fileref="images/midi_input_device_advanced_properties.png"/>
                </imageobject>
              </mediaobject>
            </figure>
            <para>
This allows the setting of a channel offset. A channel offset allows the use of
two MIDI interfaces with conflicting MIDI channels. For example, applying a
channel offset of 8 to one of the MIDI interfaces would cause that interface's
channel 1 to appear as channel 9, channel 2 to appear as channel 10, and so on.
This may be useful if you have multiple keyboards that are configured to use
the same channel.
            </para>
            <note><simpara>GrandOrgue is capable of matching the MIDI
            interface and this is configured by the MIDI detection by
            default. Therefore it is possible to use the same MIDI
            channel on multiple interfaces without configuring any
            channel offset.</simpara></note>
            <para>
              <indexterm>
                <primary>MIDI-Output-Device</primary>
              </indexterm>
              The <emphasis>MIDI-Output-Device</emphasis> button allows to
              select an output device where GrandOrgue will send MIDI all events
              received from this input device
            </para>
            <para>
              The <emphasis>Matching</emphasis> button allows to change the way
              Grandorgue recognizes the MIDI device. See 
              <link linkend="devicematching">Device Matching</link> for details
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MIDI output devices</term>
          <listitem>
            <para>
This checklist shows all available MIDI output interfaces. Selecting
a device means that GrandOrgue will write MIDI information to external
hardware. Possible uses are SAM or LED drivers for stop control feedback, or
physical pipes drivers when digitally expanding a genuine pipe organ.
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Send MIDI Recorder Output Stream</term>
          <listitem>
            <para>
The dropdown labeled <emphasis>Send MIDI Recorder Output Stream to</emphasis>
allows the user to pick a target output MIDI device to receive all
Recorder-generated output. The selected device must be activated in the
<emphasis>MIDI output devices</emphasis> frame.
          </para>
          <para>When an output device is selected in that dropdown, the recorder output is generated even if no MIDI file is being recorded.</para>
        </listitem>
      </varlistentry>
      </variablelist>
      <note><simpara>The devices list is refreshed whenever the <emphasis>Settings</emphasis> dialog is displayed.</simpara></note>
      <note><simpara>GrandOrgue requires a MIDI input/output port to
      connect to. MIDI (sequencer) software, that just tries to connect
      to existing MIDI ports, is not compatible with GrandOrgue. If
      you want to use such software, create a virtual MIDI
      port<footnote><simpara>For linux, use <emphasis>sudo modprobe
      snd-seq-dummy ports=9</emphasis></simpara></footnote> and let
      GrandOrgue as well as the other MIDI software connect to
      it. The name of the port must not contain "GrandOrgue".</simpara></note>
    </sect1>
    <sect1 id="initialconfiguration">
      <title>Initial MIDI tab</title>
      <indexterm>
        <primary>Settings.InitialMidi</primary>
      </indexterm>
      <figure>
        <title>Initial MIDI tab</title>
        <mediaobject>
          <imageobject>
            <imagedata scalefit="1" width="100%" fileref="images/settings_initial_midi.png"/>
          </imageobject>
        </mediaobject>
      </figure>
      <para>This screen displays default MIDI settings which enable the user to store some physical console MIDI settings.</para>
      <para>
When a sample set is loaded for the first time <emphasis role="bold">OR</emphasis>
without customization, these default settings are used to initialize the MIDI
Event dialogs that are accessible by right-clicking a control in the GUI (e.g.
manual, stop, enclosure, piston, etc.).
      </para>
      <para>
Customizations done by the user always supersede the matching initial setting.
If customizations are <link linkend="save">saved</link> to a preset number, all
subsequent loads will ignore the initial MIDI settings and all further updates to
the sample set's MIDI configuration will be done by right-clicking on the elements
in the user interface.
      </para>
      <para>
When a loaded sample set is <link linkend="resettodefaults">reset to
default</link>, the preset file is deleted and the initial MIDI settings
are used again to initialize the MIDI configuration.
      </para>
      <note>
        <simpara>
The sample set creator must define proper <emphasis role="bold">
<emphasis>MIDIInputNumber</emphasis></emphasis> values in the Organ
Definition File to make <link linkend="odfManualEntry">manual mapping</link>
and <link linkend="odfEnclosureEntry">enclosure mapping</link> to the initial
MIDI settings work properly.
        </simpara>
      </note>
      <para>The "Group" column shows which group the element is filed under; the "Element" column identifies the element; The "MIDI Event" column shows if the element is associated to MIDI event(s).</para>
      <para>The <link linkend="midieventeditor">MIDI Event Editor</link> can be displayed by selecting an element and pushing the "Properties" button, or by double-clicking on the element's entry.</para>
      <para>The available initial setting are those that are tied to the physical hardware and have no reason to change across dispositions:</para>
      <variablelist>
        <varlistentry>
          <term>Manuals&#160;Group</term>
          <listitem><simpara>MIDI setting for pedal (always Manual 0) and up to 5 manuals. Manuals are ordered bottom (Manual 1) to top (Manual 5).</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Enclosures&#160;Group</term>
          <listitem><simpara>MIDI setting for up to 6 enclosures. Enclosures are ordered left (Enclosure 1) to right (Enclosure 6).</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Sequencer&#160;Group</term>
          <listitem>
            <simpara>MIDI setting for various useful controls from the combination setter.</simpara>
            <variablelist>
              <varlistentry>
                <term>Previous Memory, Next Memory</term>
                <listitem><simpara>Navigate the memory banks.</simpara></listitem>
              </varlistentry>
              <varlistentry>
                <term>Memory Set</term>
                <listitem><simpara>Store a combination in a memory slot.</simpara></listitem>
              </varlistentry>
              <varlistentry>
                <term>Current</term>
                <listitem><simpara>Recalls the current combination.</simpara></listitem>
              </varlistentry>
              <varlistentry>
                <term>G.C.</term>
                <listitem><simpara>General Cancel.</simpara></listitem>
              </varlistentry>
              <varlistentry>
                <term>-10, +10</term>
                <listitem><simpara>Navigate 10 slots backwards or forward in the current memory bank without recalling the combination (prepare it).</simpara></listitem>
              </varlistentry>
              <varlistentry>
                <term>__0 .. __9</term>
                <listitem><simpara>Navigate to slot xx0 to xx9 and recall the combination, the first two digits being set by the +/-10 controls.</simpara></listitem>
              </varlistentry>
            </variablelist>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Master&#160;Controls&#160;Group</term>
          <listitem>
            <simpara>MIDI setting for various useful controls from the main control panel.</simpara>
            <variablelist>
              <varlistentry>
                <term>-1 Cent, +1 Cent, -100 Cent, +100 Cent</term>
                <listitem><simpara>These controls drive the amount of tuning for the whole organ.</simpara></listitem>
              </varlistentry>
              <varlistentry>
                <term>Prev Temperament, Next Temperament</term>
                <listitem><simpara>Navigate the temperaments list.</simpara></listitem>
              </varlistentry>
              <varlistentry>
                <term>Transpose -, Transpose +</term>
                <listitem><simpara>Transpose down, transpose up, one semitone at a time.</simpara></listitem>
              </varlistentry>
            </variablelist>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Organs tab</title>
      <indexterm>
        <primary>Settings.Organs</primary>
      </indexterm>
      <indexterm>
      <primary>Known Organs List</primary>
      </indexterm>
      <figure>
        <title>Organs tab</title>
        <mediaobject id="manage_known_organs">
          <imageobject>
            <imagedata scalefit="1" width="100%" fileref="images/settings_organs.tab.png"/>
          </imageobject>
        </mediaobject>
      </figure>
      <sect2>
        <para>This tab manages the <emphasis>known organs list</emphasis>.</para>
        <para>All organs successfully loaded via the <link linkend="file_open">File/Open</link> menu item are automatically registered in this list.</para>
        <para>
          Additional information about each organ is shown on the bottom part of this tab
          when the user selects it in the list.
        </para>
        <para>
          Organs can be registered in multiple ways. When a user opens an .organ
          file first time, the organ is registered. When the user installs an
          organ package (.orgue) file, all organs present in the package are
          registered. Also .orgue packages placed in the packages directory are
          read upon GrandOrgue startup and all their organs are also registered.
        </para>
        <para>
          This list provides for the lists displayed in the
          <link linkend="file_load">File/Load</link>,
          <link linkend="file_recent">File/Open Recent</link>
          and <link linkend="file_recent">File/Favorites</link> menu items.
        </para>
        <para>The buttons are grayed out until at least one line is selected in the list.</para>
        <para>
  The organs order on this tab is reproduced as is in the <link linkend="file_load">File/Load</link>
  menu whereas only the 10 first entries are displayed in the <link linkend="file_recent">File/Favorites</link> menu.
        </para>
        <sect3>
          <title>Name</title>
          <para>The name of the organ from its ODF.</para>
        </sect3>
        <sect3>
          <title>MIDI</title>
          <para>
            Yes - some MIDI event has been assigned to this organ.
          </para>
          <para>
            No - no MIDI events have been assigned to this organ.
          </para>
        </sect3>
        <sect3>
          <title>Path</title>
          <para>For the packaged organs - the filesystem path to the its .orgue file.</para>
          <para>For the not packaged organs - the filesystem path to the its ODF file.</para>
        </sect3>
        <sect3>
          <title>Builder, Recording</title>
          <para>The contents of the corresponding fields from the ODF.</para>
        </sect3>
        <sect3>
          <title>Organ hash</title>
          <para>A calculated string used for composing the cache and preset filenames.</para>
        </sect3>
        <sect3>
          <title>Package id</title>
          <para>Only for packaged organs. A special string used for matching between organs and organ packages.</para>
        </sect3>
        <sect3>
          <title>Package name</title>
          <para>Only for packaged organs. The name of the organ package.
            It is often equals to the name of the packaged organ, but may differ from it.
          </para>
        </sect3>
        <sect3>
          <title>Path in package</title>
          <para>
            Only for packaged organs. The relative path to the ODF in the package. One package may contain
            several organs with different ODF paths.
          </para>
        </sect3>
        <sect3>
          <title>Package hash</title>
          <para>Only for packaged organs. The calculated string used for
            composing the name of the index file in the Cache directory.
          </para>
        </sect3>
        <sect3>
          <title>Package info</title>
          <para>
            Only for packaged organs. Additional information about the organ package.
          </para>
        </sect3>
        <sect3>
          <title>Down</title>
          <para>This button moves the selected entry/entries down one position. It is grayed out if the selected line is last in the list.</para>
        </sect3>
        <sect3>
          <title>Up</title>
          <para>This button moves the selected entry/entries up one position. It is grayed out if the selected line is first in the list.</para>
        </sect3>
        <sect3>
          <title>Top</title>
          <para>This button moves the selected entry/entries to the first position in the list. It is grayed out if a selected line is first in the list.</para>
        </sect3>
        <sect3>
          <title>MIDI...</title>
          <para>
  This button opens the <link linkend="midieventeditor">MIDI Event Editor</link>
  to manage the MIDI event(s) which enable GrandOrgue to load a sample set when received.
          </para>
          <para>
  A use case of this feature can be: use a rotary selector that sends MIDI <emphasis role="bold">Program Change</emphasis>
  messages to easily switch between sample sets.
          </para>
        </sect3>
        <sect3>
          <title>Relocate</title>
          <para>
            This button opens a file choosing dialog for specifying the new
            path to the file the organ was opened from. It is useful after
            moving the organ files to another directory, and the original path is
            no longer valid.
          </para>
        </sect3>
        <sect3>
          <title>Delete Cache</title>
          <para>
            This button removes all cache files for the selected organ(s).
            The cache files are deleted only when the user saves the settings.
            The cache may be recreated later automatically or with the "Update Cache" menu entry.
          </para>
        </sect3>
        <sect3>
          <title>Delete Presets</title>
          <para>
            This button removes all setting files for the selected organ(s) that were
            saved with the Save menu entry. All the user settings for the organ
            will be lost.
            The cache files are deleted only when the user saves the settings.
          </para>
        </sect3>
        <sect3>
          <title>Delete</title>
          <para>
  This button removes a line from the list. GrandOrgue deregisters this organ.
  <note><simpara>If a cache or presets were saved and/or the samples were cached, the files are <emphasis role="strong">ALSO</emphasis> deleted from disk.</simpara></note>
  <note><simpara>The sample set files of the package .orgue file are <emphasis role="strong">NOT</emphasis> deleted from disk.</simpara></note>
          </para>
        </sect3>
      </sect2>
    </sect1>
    <sect1>
      <title>Reverb tab</title>
      <indexterm><primary>Convolution Reverberation</primary></indexterm>
      <indexterm><primary>Reverberation</primary></indexterm>
      <indexterm><primary>Settings.Reverb</primary></indexterm>
      <figure>
        <title>Reverberation options</title>
        <mediaobject>
          <imageobject>
            <imagedata scalefit="1" width="100%" fileref="images/settings_reverb.png"/>
          </imageobject>
        </mediaobject>
      </figure>
      <para>This tab manages settings for an embedded <emphasis role="strong">Convolution Reverberation engine</emphasis>.</para>
      <para>
Convolution reverberation uses the mathematical model of a room response to
alter an audio wave so it sounds as if it had been produced in that room. The
room response is triggered by a bang (starter pistol, balloon pop, hands clap,
...) which is closest to a pulse covering all frequencies. The room response is
made of the volume and decay of sound reflection on walls, floor, ceiling, and
the delay introduced by the room size. The bang record is fed to the
convolution engine to produce the reverberated wave.
      </para>
      <para>The reverberated wave is usually mixed with the direct dry sound to better simulate what the auditor would hear if he were in the physical room.</para>
      <variablelist>
        <varlistentry>
          <term>Enable Convolution Reverb</term>
          <listitem>
            <simpara>This checkbox enables the feature.</simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Browse Impulse Response</term>
          <listitem><para>
            This button opens a file chooser which allows to choose and load an impulse response file. GrandOrgue currently supports only Wave (.wav) or WavPack (.wpk) files.
            <note>
              <simpara>A response file is <emphasis role="strong"><emphasis>required</emphasis></emphasis> when the reverberation is enabled.</simpara>
              <simpara>GrandOrgue wiki displays a page linking to sites where IR files can be <ulink url="https://github.com/GrandOrgue/grandorgue/wiki/Impulse-Responses">downloaded</ulink>.</simpara>
            </note>
          </para></listitem>
        </varlistentry>
        <varlistentry>
          <term>Delay</term>
          <listitem><simpara>This spinner sets the delay in ms before the reverberated signal quicks in. This setting is additive to the delay that can be generated by the IR file itself.</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Start&#160;Offset</term>
          <listitem><simpara>This spinner sets the number of samples to skip from the beginning of the impulse response file.</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Length</term>
          <listitem><simpara>This spinner sets the number of samples to use in the impulse response file (starting from the offset).</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Channel</term>
          <listitem><simpara>
This dropdown sets the channel to use in an impulse response file. Depending on
the recording method, an IR file can have many channels. GrandOrgue current
reverberation engine uses only one channel.
          </simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Gain</term>
          <listitem><simpara>This spinner sets the gain to apply to the reverberated signal. <emphasis>Use low values (&lt; 0.1) to avoid artifacts by overloading the sound system.</emphasis></simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Direct&#160;Sound</term>
          <listitem>
            <simpara>This checkbox enables mixing the direct and reverberated signals.</simpara>
            <simpara>
The reverberated sound, when fed alone to the audio system, usually sounds a
bit muffled and a bit garbled by the alterations introduced by the room
response (delays, multiple echos, etc.). Adding the direct sound is the only
way to get a clear sound, so this box should be checked at all times.
            </simpara>
            <note>
              <simpara>
Set the <link linkend="releasetaillength">release tail length</link> to a low
value if you want to use the convolution reverberation alone, ie. without the
recorded release tail of wet samples.
              </simpara>
            </note>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1 id="temperamentTab">
      <title>Temperaments tab</title>
      <indexterm><primary>Settings.Temperaments</primary></indexterm>
      <indexterm><primary>User-defined Temperament</primary></indexterm>
      <figure>
        <title>User-defined Temperaments</title>
        <mediaobject><imageobject><imagedata fileref="images/settings_temperaments.png" /></imageobject></mediaobject>
      </figure>
      <para>This tab enables the user to add his own custom temperaments. User-defined temperaments are displayed in dynamic submenus in the <emphasis>Audio/Midi &gt; Temperaments</emphasis> menu.</para>
      <para>The <emphasis role="bold">Add</emphasis> button adds a new "empty" line.</para>
      <para>The <emphasis role="bold">Delete</emphasis> button deletes the selected line.</para>
      <variablelist>
        <varlistentry>
          <term>Group</term>
          <listitem><simpara>
Defines the submenu label in the <emphasis>Audio/Midi &gt;
Temperaments</emphasis> menu. The submenus are dynamically added as soon as
this screen has entries. Entries having the same <emphasis
role="bold">Group</emphasis> attribute are grouped in the same submenu.
          </simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Name</term>
          <listitem><simpara>Defines the menu item label.</simpara></listitem>
        </varlistentry>
        <varlistentry>
        <term>c, c# ... b</term>
        <listitem><simpara>A column for each note of the scale defines the deviation in cents from equal temperament for that note.</simpara></listitem>
        </varlistentry>
      </variablelist>
      <para>To modify any value in the grid, double-click in the cell. Updated values are stored as soon as the <emphasis role="bold">OK</emphasis> button is depressed.</para>
      <para>Temperaments are stored in the system-wide <link linkend="settingstab">configuration file</link>.</para>
    </sect1>
  </chapter>
  <chapter id="organsettings">
    <title>Organ settings</title>
    <indexterm><primary>Organ settings</primary></indexterm>
    <para>This dialog allows to customize settings for the currently loaded sample set.</para>
    <para>Initial values come  from the current preset number or imported settings file or from the organ definition file if the settings file does not exist.</para>
    <para>Modified settings are saved in the current preset number. They also can be exported to a settings file.</para>
    <figure>
      <title>Organ Settings dialog</title>
      <mediaobject>
        <imageobject>
          <imagedata scalefit="1" width="100%" fileref="images/organ_settings.png"/>
        </imageobject>
      </mediaobject>
    </figure>
    <para>
In its left box, this dialog displays all ranks found in the definition file
grouped by windchest. The tree can unfold down to the individual pipe level.
Within  windchests, the ranks are ordered as found in the definition file.
    </para>
    <para>When the tree is unfolded down to the pipe level, the dialog displays the MIDI number assigned to the sample file, along with the file's path.</para>
    <para>The right frames display controls which allow to fine set features at the rank or pipe level.</para>
    <para>Settings can be modified at the organ, windchest, rank and individual pipe level.</para>
    <para>Some setting are cumulative from the organ level down to the pipe level: the effective setting value applied to the individual pipe is calculated from values at all levels.</para>
    <para>For the other (non cumulative) settings, the effective setting value is applied to the individual pipe using these precedence rules:</para>
    <itemizedlist>
      <listitem>
        <simpara>If a pipe-level value is defined, use it</simpara>
      </listitem>
      <listitem>
        <simpara>Else if a rank-level value is defined, use it</simpara>
      </listitem>
      <listitem>
        <simpara>Else if a windchest-level value is defined, use it</simpara>
      </listitem>
      <listitem>
        <simpara>Else if an organ-level value is defined, use it</simpara>
      </listitem>
      <listitem>
        <simpara>Else use the value defined in the Program Settings dialog <link linkend="optionstab">Options</link> tab if any.</simpara>
      </listitem>
    </itemizedlist>
    <note>
    <simpara>Select the element you wish to customize. The right frames are populated with values picked from the organ definition file or the current preset number if the latter was saved.</simpara>
    <simpara>It is possible to select multiple elements at once, to e.g. update one setting of multiple elements to the same value in a single operation.</simpara>
    <simpara>
      <emphasis>To the sample set designer</emphasis>: Fine customizations to the sample set, when made in the <emphasis>Organ Settings</emphasis> dialog, are <emphasis role="bold">NOT</emphasis> copied to the organ definition file. If they were designed to be integral part of the sample set, these customizations need to be manually merged from the settings file to the organ definition file. It is however possible to export the settings to a file with the same name as the ODF file, except that the suffix must be .cmb instead of .organ (eg. TheOrgan.organ becomes TheOrgan.cmb as name for the exported settings file). When that settings file is put in the same directory as it's companion .organ file, it will be used as default settings for that organ.
    </simpara>
    </note>
    <sect1>
      <title>Settings frame</title>
      <sect2>
        <title>Amplitude</title>
        <para>Linear amplitude scale factor applied to the element. The allowed range is {0, +1000}. Amplitude is cumulative from organ level down to pipe level.</para>
        <para>
        <emphasis>Note</emphasis>: A 100 value means that this setting value has no effect on the effective amplitude.
        </para>
      </sect2>
      <sect2>
        <title>Gain</title>
        <para>Amplitude scale factor in dB applied to the selected element. The allowed range is {-120, +40}. Gain is cumulative from organ level down to pipe level.</para>
        <para><emphasis>Note</emphasis>: A 0 value means that this setting value has no effect on the effective gain.</para>
      </sect2>
      <sect2>
        <title>ManualTuning</title>
        <para>
	  This spinner allows to fine tune the pitch of the element. The unit is
	  1/100th of a semitone, and the allowed range is {-1800, +1800}. Tuning
	  is cumulative from organ level down to pipe level. This value is used
	  only with the original temperament.
	</para>
        <para><emphasis>Note</emphasis>: A 0 value means that this setting value has no effect on the effective tuning.</para>
      </sect2>
      <sect2>
        <title>AutoTuningCorrection</title>
        <para>
	  This spinner allows to fine tune the pitch of the element. The unit is
	  1/100th of a semitone, and the allowed range is {-1800, +1800}. Tuning
	  is cumulative from organ level down to pipe level. This value is used
	  only with the non-original temperaments.
	</para>
        <para><emphasis>Note</emphasis>: A 0 value means that this setting value has no effect on the effective tuning.</para>
      </sect2>
      <sect2>
        <title>Tracker</title>
        <para>This spinner allows to define a delay in ms. This delay simulates the time spent by the tracker system to open the valve after a key is depressed.</para>
        <para>Tracker delay is cumulative from organ level down to pipe level.</para>
      </sect2>
      <sect2>
        <title>Release Length</title>
	<para>
	  The release tail length control limits the duration the sound engine
	  uses to play the release section of the sample. The values are: Max or
	  a range from 50 ms to 3000 ms by increments of 50 ms. Max means playing
	  the full release section without a limit.
	</para>
	<para>
	  The organ-wide limit can be set also on the GrandOrgan toolbar. The
	  limits of the lower levels may only decrease the limit of the upper
	  levels.
	</para>
      </sect2>
      <sect2>
        <title>Tone balance</title>
        <para>
          This setting adjusts the bass/treble harmonics balance of the pipes.
          The value is a converted to a cutoff frequency for a filter where a negative
          number means less high frequencies and a positive number means less
          low frequencies. Allowed range is {-100, +100}. A tone balance value
          which is not zero on a child level will override a value set at any
          parent level.
        </para>
        <para><emphasis>Note</emphasis>: A 0 value means that this setting
          value has no effect on the effective tone balance. Using this setting
          on the individual pipe level usually gives the best results.
        </para>
      </sect2>
      <sect2>
        <title>Audio Group</title>
        <para>This dropdown selects which audio group the sound from the selected element is routed to</para>
        <para><emphasis>Note</emphasis>: A blank value means that this setting value is fetched from the upper level. If the effective audio group is still blank, the pipe is routed to the default audio group.</para>
      </sect2>
      <sect2>
	<title>Ignore pitch info in organ samples wav files</title>
	<para>This feature is closely related to the temperament feature which assumes, when the samples are dynamically retuned after a new temperament is applied, that pitch information was embedded in each sample file <emphasis>or in the pipe entry within the Organ Definition File</emphasis>. If the sample set designer has <emphasis role="bold">NOT</emphasis> embedded pitch information, the result is weird and unpredictable.</para>
	<para>When checked, this box instructs GrandOrgue to ignore any pitch information found is sample files while retuning the organ to another temperament than the original. This way the retuned sample set behaves as expected. In this case, GrandOrgue assumes that the samples are tuned to equal temperament.</para>
      </sect2>
    </sect1>
    <sect1>
      <title>Sample loading frame</title>
      <sect2>
        <title>Sample size</title>
        <para>This dropdown list allows to overwrite its counterpart at the parent level.</para>
        <para>The <emphasis>Parent default</emphasis> value means that the value is fetched from the parent level.</para>
        <para>See <link linkend="samplesize">Sample size</link> in the <emphasis>Program Settings</emphasis> dialog for further detail on this topic.</para>
      </sect2>
      <sect2>
        <title>Lossless Compression</title>
        <para>This dropdown list allows to overwrite its counterpart at the parent level. The allowed values are:</para>
        <variablelist>
          <varlistentry>
            <term>Parent default</term>
            <listitem>
              <simpara>Means that the value is fetched from the parent level.</simpara>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>Enabled</term>
            <listitem>
              <simpara>Enables lossless compression at that level</simpara>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>Disabled</term>
            <listitem>
              <simpara>Disables lossless compression at that level</simpara>
            </listitem>
          </varlistentry>
        </variablelist>
        <para>See <link linkend="losslesscompression">Lossless compression</link> in the <emphasis>Program Settings</emphasis> dialog for further detail on this topic.</para>
      </sect2>
      <sect2>
        <title>Sample channels</title>
        <para>This dropdown list allows to overwrite its counterpart at the parent level. The allowed values are:</para>
        <variablelist>
          <varlistentry>
            <term>Parent default</term>
            <listitem>
              <simpara>Means that the value is fetched from the parent level.</simpara>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>Don't load</term>
            <listitem>
              <simpara>Don't load the samples at that level.</simpara>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>Mono</term>
            <listitem>
              <simpara>Load stereo samples in mono.</simpara>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>Stereo</term>
            <listitem>
              <simpara>Load stereo samples in stereo.</simpara>
            </listitem>
          </varlistentry>
        </variablelist>
        <para>See <link linkend="loadstereosamples">Load stereo samples</link> in the <emphasis>Program Settings</emphasis> dialog for further detail on this topic.</para>
      </sect2>
      <sect2>
        <title>Loop loading</title>
        <para>This dropdown list allows to overwrite its counterpart at the parent level. The allowed values are:</para>
        <variablelist>
          <varlistentry>
            <term>Parent default</term>
            <listitem>
              <simpara>Means that the value is fetched from the parent level.</simpara>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>First loop</term>
            <listitem>
              <simpara>Load the first loop found in the sample file.</simpara>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>Longest loop</term>
            <listitem>
              <simpara>Load the longest loop found in the sample file.</simpara>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>All loops</term>
            <listitem>
              <simpara>Load all loops found in the sample file.</simpara>
            </listitem>
          </varlistentry>
        </variablelist>
        <para>See <link linkend="looploading">Loop loading</link> in the <emphasis>Program Settings</emphasis> dialog for further detail on this topic.</para>
      </sect2>
      <sect2>
        <title>Attack loading</title>
        <para>This dropdown list allows to overwrite its counterpart at the parent level. The allowed values are:</para>
        <variablelist>
          <varlistentry>
            <term>Parent default</term>
            <listitem>
              <simpara>Means that the value is fetched from the parent level.</simpara>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>Single attack</term>
            <listitem>
              <simpara>Loads only the "best" provided attack sample file.</simpara>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>All</term>
            <listitem>
              <simpara>Loads all attack sample files</simpara>
            </listitem>
          </varlistentry>
        </variablelist>
        <para>See <link linkend="attackloading">Attack loading</link> in the Program Settings dialog for further detail on this topic.</para>
      </sect2>
      <sect2>
        <title>Release loading</title>
        <para>This dropdown list allows to overwrite its counterpart at the parent level. The allowed values are:</para>
        <variablelist>
          <varlistentry>
            <term>Parent default</term>
            <listitem>
              <simpara>Means that the value is fetched from the parent level.</simpara>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>Single&#160;release</term>
            <listitem>
              <simpara>Loads only the "best" provided release sample file.</simpara>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>All</term>
            <listitem>
              <simpara>Loads all release sample files</simpara>
            </listitem>
          </varlistentry>
        </variablelist>
        <para>See <link linkend="releaseloading">Release loading</link> in the Program Settings dialog for further detail on this topic.</para>
      </sect2>
    </sect1>
    <sect1>
      <title>Buttons row</title>
      <para>These buttons are used to drive the dialog and always act on the selected element.</para>
      <variablelist>
	<varlistentry>
	  <term>Help</term>
	  <listitem>
	    <simpara>This button opens the help window.</simpara>
          </listitem>
	</varlistentry>
	<varlistentry>
	  <term>Distribute audio groups</term>
	  <listitem>
	    <simpara>
	      This button allows to spread the selected elements over selected
	      audio groups. The elements are spread over audio groups using a
	      round-robin scheme.
	    </simpara>
	    <simpara>Select the elements to spread, click the button. A dialog
	      opens where the desired audio groups can be selected by checking
	      their box.
	      <mediaobject>
		<imageobject>
		  <imagedata scalefit="1" width="100%" fileref="images/distribute_audio_groups.png"/>
		</imageobject>
	      </mediaobject>
	      Push the <emphasis role="bold">OK</emphasis> button. The
	      modification is applied.
	    </simpara>
	    <caution>
	      <simpara>
		The round-robin scheme is applied to the audio groups in their
		display order in the selector dialog. They appear in that dialog
		in the same order they were created. Therefore, when elements
		need to be spread over a list of audio groups, these audio
		groups <emphasis role="bold">must</emphasis> be created in the
		order of the round-robin scheme.
	      </simpara>
	    </caution>
          </listitem>
	</varlistentry>
        <varlistentry>
          <term>Default</term>
          <listitem>
            <simpara>
	      This button restores the setting values for the selected elements
	      from the organ definition.
	    </simpara>
            <simpara>
	      Because the audio group cannot be specified in the ODF, the 
	      Default button does not affect the Audio group setting. For 
	      resetting an audio group for the selected elements the user has to
	      select the empty value in the Audio Group field and press to the
	      Apply button.
	    </simpara>
    	    <caution>
	      <simpara>
		This action can not be undone with the
		<emphasis role="bold">Discard</emphasis> button.
	      </simpara>
    	    </caution>
            <simpara>
	      If any of selected elements has a subelement then a confirmation
	      box will appear.
	    </simpara>
	    <mediaobject>
	      <imageobject>
		<imagedata
		  scalefit="1" width="100%"
		  fileref="images/organ_settings_default.png"
		/>
	      </imageobject>
	    </mediaobject>
            <simpara>
              Pushing <emphasis role="bold">No</emphasis> causes restoring the
	      values only for the selected elements but not for their
	      subelements.
	    </simpara>
            <simpara>
              Pushing <emphasis role="bold">Yes</emphasis> causes restoring the
	      values for the selected and for all their subelements
	      recursivelly.
	    </simpara>
            <simpara>
              Pushing <emphasis role="bold">Cancel</emphasis> causing not
	      changing anything.
	    </simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Discard</term>
          <listitem>
            <simpara>
	      This button is grayed out until any value is modified. It restores
	      all previously changed values that have not yet been applied.
	    </simpara>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Apply</term>
          <listitem>
            <simpara>
	      This button applies all modified values to the selected element.
	      Changes <emphasis role="bold">MUST</emphasis> be applied or
	      discarded before proceeding to another element modification or
	      closing the dialog with the <emphasis role="bold">Close</emphasis>
	      button.
            </simpara>
          </listitem>
        </varlistentry>
	<varlistentry>
	  <term>Close</term>
	  <listitem>
	    <simpara>This button closes the Organ Settings window.</simpara>
	    <simpara>
	      If some changes have not yet been applied then GrandOrgue rejects
	      closing the window and asks the user to press either
	      <emphasis role="bold">Apply</emphasis> or
	      <emphasis role="bold">Discard</emphasis> button before.
	    </simpara>
          </listitem>
	</varlistentry>
      </variablelist>
    </sect1>
  </chapter>
  <chapter>
    <title>Panels</title>
    <mediaobject><imageobject><imagedata fileref="images/panel_menu.png" /></imageobject></mediaobject>
    <para>This menu controls control panels. Menu items starting at <emphasis>Coupler</emphasis> down to <emphasis>Recorder</emphasis> are standard menu items (i.e. present whatever sample set is loaded).</para>
    <para>
All other menu items (above <emphasis>Coupler</emphasis>) are defined within
the loaded sample set and should be documented in the sample set's specific user
manual (if any). They usually are referred to as <emphasis>Custom Panels</emphasis>.
    </para>
    <para>Custom Panel menu items can be organized in submenus as shown in this screen shot taken from Piteå Music School sample set.</para>
    <mediaobject><imageobject><imagedata fileref="images/pitea_panel_menu.png" /></imageobject></mediaobject>
    <sect1 id="couplers">
      <title>Coupler</title>
      <mediaobject><imageobject><imagedata fileref="images/coupler_menu.png" /></imageobject></mediaobject>
      <para>
GrandOrgue provides a default set of couplers for each keyboard or pedal board
found in the Organ Definition File, plus a coupler set for each of the default
<link linkend="couplerManuals">coupler manuals</link>. This enables the
user to take advantage of "modern" accessories even when the sample set doesn't
provide them.
      </para>
      <para>The menu items display the <emphasis>master</emphasis> keyboards, i.e. the keyboard that "pulls" the coupled keyboards.</para>
      <para>The coupler panel displays a line of controls for every <emphasis>target</emphasis> keyboard or pedal board found in the Organ Definition file.</para>
      <note><simpara>The coupling manuals are not designed to be the target of a coupler.</simpara></note>
      <figure>
        <title>Coupler &lt;keyboard name&gt; Layout</title>
        <mediaobject><imageobject><imagedata scalefit="1" fileref="images/coupler_panel.png"/></imageobject></mediaobject>
      </figure>
      <informaltable frame="none">
        <tgroup cols="2">
          <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px"/>
          <colspec colname="c2" colsep="0" rowsep="0" />
          <tbody>
            <row valign="top">
              <entry><emphasis role="strong">16</emphasis></entry>
              <entry>Sub-octave coupler. The target key/pedal board is "pulled" 1 octave lower than the note played on the "master" key/pedal board.</entry>
            </row>
            <row valign="top">
              <entry><emphasis role="strong">8</emphasis></entry>
              <entry>"Normal" coupler. The target key/pedal board is "pulled" at the same octave as the note played on the "master" key/pedal board.</entry>
            </row>
            <row valign="top">
              <entry><emphasis role="strong">U.O.</emphasis></entry>
              <entry>
Unison Off. When engaged, this coupler mutes the pipes at the played note pitch
on the "master" key/pedal board. There are many use cases like using the
octave/sub-octave couplers alone, turning the keyboard into a coupling
keyboard, etc.
              </entry>
            </row>
            <row valign="top">
              <entry><emphasis role="strong">4</emphasis></entry>
              <entry>Octave coupler. The target key/pedal board is "pulled" 1 octave over the note played on the "master" key/pedal board.</entry>
            </row>
            <row valign="top">
              <entry><emphasis role="strong">BAS</emphasis></entry>
              <entry>"Bass" coupler. The lowest note in any chord played on the "master" keyboard is "pulled" on the target key/pedal board.</entry>
            </row>
            <row valign="top">
              <entry><emphasis role="strong">MEL</emphasis></entry>
              <entry>"Melody" coupler. The upper note in any chord played on the "master" keyboard is "pulled" on the target key/pedal board.</entry>
            </row>
            <row valign="top">
              <entry><emphasis role="strong">Couple Through</emphasis></entry>
              <entry>When it is engaged, any source manual key pressing is transfering to all engaged target manual further couplers for all couplers in this row</entry>
            </row>
          </tbody>
        </tgroup>
      </informaltable>
      <note><simpara>
In multi-part polyphony, the BASS coupler tries to enforce the rests found in
the lowest line. This is not 100% safe, so unwanted jumps to the next upper
line may occur. The same applies for the MEL coupler and the highest line. 
      </simpara></note> 
    </sect1>
    <sect1 id="scope">
      <title>Regular, Scope and Scoped, Full</title>
        <mediaobject><imageobject><imagedata scalefit="1" fileref="images/regular_scope_scoped_full.png"/></imageobject></mediaobject>
      <para>
These features are shared by the <emphasis>Crescendo</emphasis>,
<emphasis>Divisionals</emphasis>, <emphasis>Generals</emphasis> and
<emphasis>Combination Setter</emphasis> panels and are documented once here.
      </para>
      <sect2>
        <title>Regular</title>
        <para>
<emphasis>Regular</emphasis> enables to control all stops and pistons as
allowed by the Organ Definition file (see <emphasis>Full</emphasis> below).
When <emphasis>Regular</emphasis> is on while <link
  linkend="memoryset">setting</link>, the current state of all stops and
couplers is stored. The scope is set to "all elements". This is the default behavior.
        </para>
      </sect2>
      <sect2>
        <title>Scope</title>
        <para>
When <emphasis>Scope</emphasis> is on  while <link
  linkend="memoryset">setting</link>, the combination data store is configured
for its storing only the currently turned on elements. Never forget to push all
buttons intended to drive that scope.
        </para>
      </sect2>
      <sect2>
        <title>Scoped</title>
        <para>
When <emphasis>Scoped</emphasis> is on  while <link
  linkend="memoryset">setting</link>, the current state of the elements stored
with scope is saved.
        </para>
        <note><orderedlist><title>Typical working sequence of operations:</title>
          <listitem><simpara>Turn on some stops and couplers</simpara></listitem>
          <listitem><simpara>Turn on <emphasis role="strong">Scope</emphasis></simpara></listitem>
          <listitem><simpara>Turn on <emphasis role="strong">Set</emphasis></simpara></listitem>
          <listitem><simpara>Push all buttons intended to use that scope</simpara></listitem>
          <listitem><simpara>Turn on <emphasis role="strong">Scoped</emphasis></simpara></listitem>
          <listitem><simpara>Turn on the stops and couplers wished for the fist button</simpara></listitem>
          <listitem><simpara>Push the button (make sure that <emphasis role="strong">Set</emphasis> is turned on)</simpara></listitem>
          <listitem><simpara>Repeat 6-7 for all buttons</simpara></listitem>
          </orderedlist>
          <simpara>Once the scope is defined and assigned to a piston, there is no need to redefine it (steps 1-4) if the saved state of the elements in scope is changed (steps 5-6-7).</simpara>
        </note>
      </sect2>
      <sect2>
        <title>Full</title>
        <para>
<emphasis>Full</emphasis> allows to store all stops and couplers in a
combination, regardless of restrictions that may have been defined in the Organ
Definition File. See <link linkend="storeInDivisional">StoreInDivisional</link>,
<link linkend="storeInGeneral">StoreInGeneral</link>,
<link linkend="divisionalsStoreIntermanualCouplers">DivisionalsStoreIntermanualCouplers</link>,
<link linkend="divisionalsStoreIntramanualCouplers">DivisionalsStoreIntramanualCouplers</link>,
<link linkend="divisionalsStoreTremulants">DivisionalsStoreTremulants</link>,
<link linkend="generalsStoreDivisionalCouplers">GeneralsStoreDivisionalCouplers</link> and
<link linkend="combinationsStoreNonDisplayedDrawstops">CombinationsStoreNonDisplayedDrawstops</link>
for more information.
        </para>
      </sect2>
    </sect1>
    <sect1 id="crescendoPanel">
      <title>Crescendo Pedal</title>
      <mediaobject><imageobject><imagedata fileref="images/panel_crescendo.png" /></imageobject></mediaobject>
      <para>GrandOrgue automatically adds 4 crescendo banks of 32 steps each. This enables the user to take advantage of "modern" accessories even when the sample set doesn't provide them.</para>
      <variablelist>
        <varlistentry>
          <term>Label on top</term>
          <listitem><simpara>Displays the current step. It is an "active" label, and as such supports a <link linkend="activelabel">MIDI send</link> configuration</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Set</term>
          <listitem><simpara>Shortcut to <link linkend="memoryset">Memory Set</link></simpara></listitem>
        </varlistentry>
        <varlistentry>
                <term>Regular</term>
                <term>Scope</term>
                <term>Scoped</term>
                <term>Full</term>
                <listitem><simpara>See <link linkend="scope">Regular, Scope and Scoped, Full</link></simpara></listitem>
        </varlistentry>
        <varlistentry>
                <term>A</term>
                <term>B</term>
                <term>C</term>
                <term>D</term>
                <listitem><simpara>Select the crescendo bank to use. The current bank is highlighted</simpara></listitem>
        </varlistentry>
        <varlistentry id="crescendoopmodes">
                <term>Override</term>
                <listitem>
                    <simpara>Switches the crescendo operational mode between the Override and the Add one.</simpara>
                    <simpara>The mode determines how the crescendo enables/disables stops when the crescendo level is changed.</simpara>
                    <simpara>In the Override mode all stops enabled by the user are forgotten and only the stops defined for the crescendo level are enabled.</simpara>
                    <simpara>In the Add mode the stops enabled by the user are remains unchanged. Only the new stops defined for the crescendo level are enabled or disabled/</simpara>
                </listitem>
        </varlistentry>
        <varlistentry>
                <term>&lt;</term>
          <listitem><simpara>
              Move to the previous step. While <link linkend="memoryset">setting</link>, store the state of drawstops and couplers (according to regular or scope/scoped) into the previous step.</simpara></listitem>
        </varlistentry>
        <varlistentry>
                <term>Current</term>
          <listitem><simpara>
While <link linkend="memoryset">setting</link>, store the state of drawstops and
couplers (according to regular or scope/scoped) into the current crescendo
step, otherwise recall the current step's state.
          </simpara></listitem>
        </varlistentry>
        <varlistentry>
                <term>&gt;</term>
                <listitem><simpara>Move to the next step. While <link linkend="memoryset">setting</link>, store the state of drawstops and couplers (according to regular or scope/scoped) into the next step.</simpara></listitem>
        </varlistentry>
        <varlistentry>
                <term>Crescendo shoe</term>
          <listitem><simpara>
This shoe controls the crescendo. It behaves like an <link
  linkend="expressionshoe">expression shoe</link>. If the physical console has
a dedicated MIDI controller, the 32 steps are evenly spread across the range of
values set in the <link linkend="midieventeditor">MIDI event editor</link>
          </simpara></listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Divisionals</title>
      <mediaobject><imageobject><imagedata fileref="images/panel_divisionals.png" /></imageobject></mediaobject>
      <para>
GrandOrgue automatically adds a set of 20 banks of 10 divisional combination stores to each
keyboard or pedal board found in the Organ Definition file. This enables the
user to take advantage of "modern" accessories even when the sample set doesn't
provide them.
      </para>
      <variablelist>
        <varlistentry>
                <term>Set</term>
                <listitem><simpara>Shortcut to <link linkend="memoryset">Memory Set</link></simpara></listitem>
        </varlistentry>
        <varlistentry>
                <term>Regular</term>
                <term>Scope</term>
                <term>Scoped</term>
                <term>Full</term>
                <listitem><simpara>See <link linkend="scope">Regular, Scope and Scoped, Full</link></simpara></listitem>
        </varlistentry>
        <varlistentry>
                <term>1</term>
                <term>2</term>
                <term>3</term>
                <term>4</term>
                <term>5</term>
                <term>6</term>
                <term>7</term>
                <term>8</term>
                <term>9</term>
                <term>10</term>
                <listitem><simpara>Enable the N-combination stored in the current bank.</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Label in between</term>
          <listitem><simpara>Displays the current bank for the division. Values are letters from A to T. It is an "active" label, and as such supports a <link linkend="activelabel">MIDI send</link> configuration</simpara></listitem>
        </varlistentry>
        <varlistentry>
                <term>-</term>
                <term>+</term>
                <listitem><simpara>Switch current bank for the division to the previous and to the next</simpara></listitem>
        </varlistentry>
      </variablelist>
      <note><title>Notes</title>
        <itemizedlist>
          <listitem><simpara>A division button changes it's state after pressing only if there is combination stored to it or the Set button is active.</simpara></listitem>
          <listitem><simpara>All buttons in this panel are enabled for a <link linkend="midieventeditor">MIDI Event</link> configuration.</simpara></listitem>
          <listitem><simpara>All configuration done on this panel can be <link linkend="save">saved</link> to the current preset number. If not, GrandOrgue always asks to save on sample set unloading.</simpara></listitem>
        </itemizedlist>
      </note>
    </sect1>
    <sect1>
      <title>Generals</title>
      <mediaobject><imageobject><imagedata fileref="images/panel_generals.png" /></imageobject></mediaobject>
      <para>
GrandOrgue automatically adds 4 banks of 50 general combination stores to any
loaded sample set. This enables the user to take advantage of "modern"
accessories even when the sample set doesn't provide them.
      </para>
      <variablelist>
        <varlistentry>
          <term>Prev</term>
          <listitem><simpara>Switch to the previous generals bank</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Label in between</term>
          <listitem><simpara>Displays the current bank. Values are A, B, C, D. It is an "active" label, and as such supports a <link linkend="activelabel">MIDI send</link> configuration</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Next</term>
          <listitem><simpara>Switch to the next generals bank</simpara></listitem>
        </varlistentry>
        <varlistentry>
                <term>Set</term>
                <listitem><simpara>Shortcut to <link linkend="memoryset">Memory Set</link></simpara></listitem>
        </varlistentry>
        <varlistentry>
                <term>Regular</term>
                <term>Scope</term>
                <term>Scoped</term>
                <term>Full</term>
                <listitem><simpara>See <link linkend="scope">Regular, Scope and Scoped, Full</link></simpara></listitem>
        </varlistentry>
      </variablelist>
      <note><title>Notes</title>
        <itemizedlist>
          <listitem><simpara>All buttons in this panel are enabled for a <link linkend="midieventeditor">MIDI Event</link> configuration.</simpara></listitem>
          <listitem><simpara>All configuration done on this panel can be <link linkend="save">saved</link> to the current preset number. If not, GrandOrgue always asks to save on sample set unloading.</simpara></listitem>
        </itemizedlist>
      </note>
    </sect1>
    <sect1>
      <title>Combination Setter</title>
      <mediaobject><imageobject><imagedata fileref="images/panel_setter.png" /></imageobject></mediaobject>
      <para>
GrandOrgue automatically adds a 1000-slot combination setter to any loaded
sample set. This enables the user to take advantage of "modern" accessories even
when the sample set doesn't provide them.
      </para>
      <variablelist>
        <varlistentry>
          <term>Label on top</term>
          <listitem><simpara>Displays the current slot. It is an "active" label, and as such supports a <link linkend="activelabel">MIDI send</link> configuration</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Second line</term>
          <listitem>
	    <simpara>
	      This line has elements for working with yaml combination files in
	      the current combinations directory. By default it is a
	      subdirectory with the same name as the current loaded organ name
	      in the Combinations directory. But after importing a yaml
	      combination file with the <link linkend="import_comb">Import
	      Combinations</link> menu item, the current combinations directory
	      becomes the directory where the combination file has been loaded
	      from.
	    </simpara>
	  </listitem>
        </varlistentry>
        <varlistentry>
          <term>Large label on the second line</term>
          <listitem>
	    <simpara>
	      Displays a yaml combination file name. It may be either the file
	      that is loaded or another file the current combinations directory
	      when the user navigates over them. It is an "active" label, and as
	      such supports a <link linkend="activelabel">MIDI send</link>
	      configuration.
	    </simpara>
	  </listitem>
        </varlistentry>
        <varlistentry>
          <term>Refresh files</term>
          <listitem>
	    <simpara>
	      Reload the list of combination files the current combinations
	      directory.
	    </simpara>
	  </listitem>
        </varlistentry>
        <varlistentry>
          <term>Prev file</term>
          <listitem>
	    <simpara>
	      Navigate to a previous (in alphabetical order) combinations file
	      in the directory.
	    </simpara>
	  </listitem>
        </varlistentry>
        <varlistentry>
          <term>Next file</term>
          <listitem>
	    <simpara>
	      Navigate to a next (in alphabetical order) combinations file in
	      the directory.
	    </simpara>
	  </listitem>
        </varlistentry>
        <varlistentry>
          <term>Load file</term>
          <listitem>
	    <simpara>
	      Load the combination file displayed in the label. The lighting of
	      the button shows whether the currently displayed file is loaded
	      (dark) or not loaded (light). After loading the combination file
	      with this button, the 000 slot is activated automatically.
	    </simpara>
	  </listitem>
        </varlistentry>
        <varlistentry>
          <term>Save file</term>
          <listitem>
	    <simpara>
	      Save the current combinations file to the file whrere they were
	      previously been loaded from. This button works only if the label
	      is navigated to this file (the Save button is dark). Lighting of
	      this button shows whether the combinations set has been changed
	      (light) or not (dark) since it was loaded.
	    </simpara>
	    <note>
	      <simpara>
		This button allows to save the combinations to the same file
		where they have been loaded from. For saving combinations to
		another file or for creating a new one use the
		<link linkend="export_combinations">Export Combinations</link>
		menu item.
	      </simpara>
	    </note>
	  </listitem>
        </varlistentry>
        <varlistentry>
          <term>Current</term>
          <listitem><simpara>
While <link linkend="memoryset">setting</link>, store the state of drawstops
and couplers (according to regular or scope/scoped) into the current slot,
otherwise recall the current slot's state.
          </simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>-100</term>
          <term>+100</term>
          <listitem><simpara>Navigate 100 slots backwards or forward without recalling the combination (prepare it)</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>-10</term>
          <term>+10</term>
          <listitem><simpara>Navigate 10 slots backwards or forward without recalling the combination (prepare it)</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>-1</term>
          <term>+1</term>
          <listitem><simpara>Navigate 1 slot backwards or forward without recalling the combination (prepare it)</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Next</term>
          <listitem><simpara>
While <link linkend="memoryset">setting</link>, store the state of drawstops
and couplers (according to regular or scope/scoped) into the next slot,
otherwise recall the next slot's state.
          </simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Previous</term>
          <listitem><simpara>
While <link linkend="memoryset">setting</link>, store the state of drawstops
and couplers (according to regular or scope/scoped) into the previous slot,
otherwise recall the previous slot's state.
          </simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>__0 .. __9</term>
          <listitem><simpara>
While <link linkend="memoryset">setting</link>, navigate to slot xx0 to xx9 and
store the state of drawstops and couplers (according to regular or
scope/scoped), otherwise navigate to slot xx0 to xx9 and recall the
combination. The first two digits were previously set by the +/-100 and +/-10
controls.
          </simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Set</term>
          <listitem><simpara>Shortcut to <link linkend="memoryset">Memory Set</link></simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Regular</term>
          <term>Scope</term>
          <term>Scoped</term>
          <term>Full</term>
          <listitem><simpara>See <link linkend="scope">Regular, Scope and Scoped, Full</link></simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>G.C.</term>
          <listitem><simpara>General cancel. Resets the state to "all pushed"</simpara></listitem>
        </varlistentry>
        <varlistentry>
          <term>Insert</term>
          <listitem>
            <simpara>Shifts right all slots following the current slot. The behavior changes depending on the state of the <link linkend="memoryset">Set</link> button.
              <variablelist>
                <varlistentry>
                  <term>Set ON</term>
                  <listitem><simpara>the state of drawstops and couplers (according to regular or scope/scoped) is stored in the current slot</simpara></listitem>
                </varlistentry>
                <varlistentry>
                  <term>Set OFF</term>
                  <listitem><simpara>the state of the current slot (including scope) is kept unmodified</simpara></listitem>
                </varlistentry>
              </variablelist>
              <note><simpara>The combination stored in the last slot (#999) is <emphasis role="strong">lost</emphasis></simpara></note></simpara>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>Delete</term>
            <listitem>
              <simpara>Shifts left all slots following the current slot. The state of the <link linkend="memoryset">Set</link> button does not change the behavior.
                <note><simpara>The combination stored in the current slot is lost. The combination stored in slot #999 is reset to "empty".</simpara></note>
              </simpara>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>Hidden buttons</term>
            <listitem>
              <simpara>There are two hidden buttons, <link linkend="panicButton">Panic</link> and <link linkend="fileExit">Exit GO</link>, that serve as MIDI receivers only, not visible in this panel for mouse interaction. To configure them, go to Audio/Midi menu &rarr; <link linkend="midiobjects">MIDI Objects</link> and look for type Button, elements Panic resp. Exit to assign MIDI events that will fire the two functions. 
              </simpara>
            </listitem>
          </varlistentry>
       </variablelist>
    </sect1>
    <sect1 id="couplerManuals">
      <title>Coupler Manuals and Volume</title>
      <mediaobject><imageobject><imagedata fileref="images/coupler_manuals.png" /></imageobject></mediaobject>
      <para>This panel displays a III/P fictional console with swell shoes. The keyboards are coupler manuals. This fictional console is independent of the actual layout of the sample set.</para>
      <sect2>
        <title>Coupler manuals</title>
        <para>A coupler manual is mute, as it is not connected to a division. By design, any keyboard (including pedal) can be coupled to a coupler manual (see <link linkend="couplers">Couplers></link>).</para>
        <para>
A set of 4 coupler manuals is added to each loaded sample set, whatever the
actual number of manuals and/or pedal boards. The coupler manuals are numbered
bottom to top. The coupler manual number 0 is displayed as pedal.
        </para>
        <para>
The displayed compass is derived from the lowest and highest MIDI key number
found in the organ definition file. Each coupler manual is fit with 10
divisional pistons.
        </para>
      </sect2>
      <sect2>
        <title>Expression shoes</title>
        <para>
An enclosure expression shoe is added to each windchest found in the Organ
Definition File, plus another designed to control the whole virtual organ
volume.
          <note><simpara>
The embedded metronome is managed using its own separate windchest.
          </simpara></note>
        </para>
        <para>These enclosure settings are NOT replicated anywhere in the user interface.</para>
        <para>These enclosure settings are saved in the current settings file only when the <link linkend="save">File &gt; Save</link> menu item is used.</para>
      </sect2>
    </sect1>
    <sect1 id="metronome">
      <title>Metronome</title>
      <mediaobject><imageobject><imagedata fileref="images/metronome.png" /></imageobject></mediaobject>
      <para>This panel controls the embedded metronome.</para>
      <sect2>
        <title>ON</title>
        <para>This is the On / Off button. Starts or stops the metronome.</para>
      </sect2>
      <sect2>
        <title>Bar length settings</title>
        <para>This section manages the number of metronome beats per bar. The first beat of each bar is emphasized using a different sound. The initial value when the panel is first opened is 4.</para>
        <para>If the number of beats per bar is set to 0, the "other beat" tick sound is used.</para>
        <para>If the number of beats per bar is set to 1, the "first beat" tick sound is used.</para>
        <informaltable frame="none">
          <tgroup cols="2">
            <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px"/>
            <colspec colname="c2" colsep="0" rowsep="0" />
            <tbody>
              <row valign="top">
                <entry><emphasis role="strong">-1</emphasis></entry>
                <entry>Decreases the number of beats per bar by 1.</entry>
              </row>
              <row valign="top">
                <entry><emphasis role="strong">+1</emphasis></entry>
                <entry>Increases the number of beats per bar by 1.</entry>
              </row>
              <row valign="top">
                <entry><emphasis role="strong">Label in between</emphasis></entry>
                <entry>This label displays the current beats per bar number. It is an <emphasis>active</emphasis> label, meaning that it can be configured to send MIDI messages.</entry> 
              </row>
            </tbody>
          </tgroup>
        </informaltable>
      </sect2>
      <sect2>
        <title>Beat per minute settings</title>
        <para>This section manages the number of metronome beats per minute. The initial value when the panel is first opened is 80.</para>
        <informaltable frame="none">
          <tgroup cols="2">
            <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px"/>
            <colspec colname="c2" colsep="0" rowsep="0" />
            <tbody>
              <row valign="top">
                <entry><emphasis role="strong">-10</emphasis></entry>
                <entry>Decreases the number of beats per minute by 10.</entry>
              </row>
              <row valign="top">
                <entry><emphasis role="strong">-1</emphasis></entry>
                <entry>Decreases the number of beats per minute by 1.</entry>
              </row>
              <row valign="top">
                <entry><emphasis role="strong">+1</emphasis></entry>
                <entry>Increases the number of beats per minute by 1.</entry>
              </row>
              <row valign="top">
                <entry><emphasis role="strong">+10</emphasis></entry>
                <entry>Increases the number of beats per minute by 10.</entry>
              </row>
              <row valign="top">
                <entry><emphasis role="strong">Label in between</emphasis></entry>
                <entry>This label displays the current beats per minute number. It is an <emphasis>active</emphasis> label, meaning that it can be configured to send MIDI messages.</entry> 
              </row>
            </tbody>
          </tgroup>
        </informaltable>
        <note>
          <simpara>
The metronome settings can be saved in the current settings file and remembered
the next time the sample set is loaded. Use the <link linkend="save">File &gt;
  Save</link> menu item, as there is no warning to save when the sample set is
closed with changed metronome settings.
          </simpara>
        </note>
      </sect2>
    </sect1>
    <sect1 id="update-checking">
      <title>Updates</title>
      <sect2>
        <title>Check for updates at startup</title>
        <para>Check the checkbox here if you would like GrandOrgue to notify you when a new version of GrandOrgue is available. If there is one, GrandOrgue will create a new menu <link linkend="update-available">Update available!</link>.</para>
      </sect2>
    </sect1>
    <sect1 id="masterControls">
      <title>Master Controls</title>
      <mediaobject><imageobject><imagedata fileref="images/master_controls.png" /></imageobject></mediaobject>
      <para>
This panel groups at the same place some controls that are used while playing.
Each displayed element can be associated to a <link linkend="midieventeditor">MIDI event</link>
and thus linked to a physical control on the console. This enables the user to
ignore the computer and concentrate on his playing.
      </para>
      <para>
Master controls are specific to the console hardware. As such, their MIDI
configuration can also be defined in the <emphasis>Program
settings</emphasis>, <link linkend="initialconfiguration">Initial MIDI</link> tab.
      </para>
      <sect2>
        <title>Tuning</title>
        <para>
The first row controls the ability to tune the whole organ. All tuning done
from the master controls panel is mirrored in the
<link linkend="organsettings">Organ Settings</link>, <emphasis>Settings</emphasis>
frame, <emphasis>Tuning (Cent)</emphasis> spinner and will be saved in the
current preset file.
        </para>
        <informaltable frame="none">
          <tgroup cols="2">
            <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px"/>
            <colspec colname="c2" colsep="0" rowsep="0" />
            <tbody>
              <row valign="top">
                <entry><emphasis role="strong">-100, -10, -1 buttons</emphasis></entry>
                <entry>Tune down by amount of 100, 10, 1 cent(s) respectively</entry>
              </row>
              <row valign="top">
                <entry><emphasis role="strong">+100, +10, +1 buttons</emphasis></entry>
                <entry>Tune up by amount of 100, 10, 1 cent(s) respectively</entry>
              </row>
              <row valign="top">
                <entry><emphasis role="strong">Label in between</emphasis></entry>
                <entry>This label displays the current tuning amount. It is an "active" label, and as such supports a <link linkend="activelabel">MIDI send</link> configuration</entry>
              </row>
            </tbody>
          </tgroup>
        </informaltable>
        <note><title>Reminder</title><simpara>The tuning unit is 1/100th of a semitone. The allowed range is {-1800, +1800 }, i.e. {-1, +1} octave. A semitone is 100 tuning units.</simpara></note>
      </sect2>
      <sect2>
        <title>Temperament</title>
        <para>
The second row controls the ability to navigate the temperaments list. The temperament selection in the master controls panels is mirrored in the
<link linkend="temperamentsMenu">Temperament</link> menu item of the <emphasis>Audio/Midi</emphasis> menu.
        </para>
        <informaltable frame="none">
          <tgroup cols="2">
            <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px"/>
            <colspec colname="c2" colsep="0" rowsep="0" />
            <tbody>
              <row valign="top">
                <entry><emphasis role="strong">&lt; button</emphasis></entry>
                <entry>Go to the previous temperament in the list</entry>
              </row>
              <row valign="top">
                <entry><emphasis role="strong">&gt; button</emphasis></entry>
                <entry>Go to the next temperament in the list</entry>
              </row>
              <row valign="top">
                <entry><emphasis role="strong">Label in between</emphasis></entry>
                <entry>This label displays the current temperament name. It is an "active" label, and as such supports a <link linkend="activelabel">MIDI send</link> configuration</entry>
              </row>
            </tbody>
          </tgroup>
        </informaltable>
      </sect2>
      <sect2>
        <title>Save</title>
        <para>
The <emphasis>Save</emphasis> button in the middle row saves the current
sample set customization in the current preset file. It has the same usage as the
<link linkend="save">Save</link> menu item in the <emphasis>File</emphasis> menu.
        </para>
      </sect2>
      <sect2>
        <title>Transposer</title>
        <para>The third row controls the transposer. The transposer state is mirrored in the <link linkend="transposer">transposer</link> spinner in the toolbar.</para>
        <informaltable frame="none">
          <tgroup cols="2">
            <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px"/>
            <colspec colname="c2" colsep="0" rowsep="0" />
            <tbody>
              <row valign="top">
                <entry><emphasis role="strong">&lt; button</emphasis></entry>
                <entry>Shift all keyboards down one semitone</entry>
              </row>
              <row valign="top">
                <entry><emphasis role="strong">&gt; button</emphasis></entry>
                <entry>Shift all keyboards up one semitone</entry>
              </row>
              <row valign="top">
                <entry><emphasis role="strong">Label in between</emphasis></entry>
                <entry>This label displays the current transposer state. It is an "active" label, and as such supports a <link linkend="activelabel">MIDI send</link> configuration</entry>
              </row>
            </tbody>
          </tgroup>
        </informaltable>
      </sect2>
      <sect2>
        <title>Readiness indicators</title>
        <para>The fourth row displays readiness indicators which change state when the sample set finishes loading</para>
        <informaltable frame="none">
          <tgroup cols="2">
            <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px"/>
            <colspec colname="c2" colsep="0" rowsep="0" />
            <tbody>
              <row valign="top">
                <entry><emphasis role="strong">ON "LED"</emphasis></entry>
                <entry>This "LED" is rendered as a lighted button and as such supports a <link linkend="activelabel">MIDI send</link> configuration</entry>
              </row>
              <row valign="top">
                <entry><emphasis role="strong">Label</emphasis></entry>
                <entry>This label displays the organ name. It is an "active" label, and as such supports a <link linkend="activelabel">MIDI send</link> configuration</entry>
              </row>
            </tbody>
          </tgroup>
        </informaltable>
      </sect2>
    </sect1>
    <sect1>
      <title>Recorder</title>
      <para id="recorder">This panel controls the MIDI recorder and the Audio recorder.</para>
      <mediaobject><imageobject><imagedata fileref="images/panel_recorder.png" /></imageobject></mediaobject>
      <para>Both recorders behave identically</para>
      <informaltable frame="none">
        <tgroup cols="2">
          <colspec colname="c1" colsep="0" rowsep="0" colwidth="100px"/>
          <colspec colname="c2" colsep="0" rowsep="0" />
          <tbody>
            <row valign="top">
              <entry><emphasis role="strong">REC</emphasis></entry>
              <entry>
This button starts recording a file, using a default file name that cannot be
changed. See below for the file name syntax.The button stays highlighted until
<emphasis role="strong">STOP</emphasis> is pressed.
              </entry>
            </row>
            <row valign="top">
              <entry><emphasis role="strong">STOP</emphasis></entry>
              <entry>
This button stops the current recording. If The recording was started with
<emphasis role="strong">REC</emphasis>, the file is silently saved under the
default file name. If the recording was started with <emphasis
  role="strong">REC File</emphasis>, a file chooser is displayed, allowing
the user to rename the file from its default name.
              </entry>
            </row>
            <row valign="top">
              <entry><emphasis role="strong">REC&#160;File</emphasis></entry>
              <entry>
This button starts recording a file while enabling the user to rename the file
when the recording stops.
              </entry>
            </row>
            <row valign="top">
              <entry><emphasis role="strong">Right-side&#160;Label</emphasis></entry>
              <entry>This label displays the recording duration while the recorder is active. </entry>
            </row>
          </tbody>
        </tgroup>
      </informaltable>
      <para>
This paneled recorder enables the user to tie both recorders to MIDI events.
This way, recording can be easily started and stopped on the fly from console
buttons or computer keyboard shortcuts.
      </para>
      <note><title>Notes</title>
        <itemizedlist>
          <listitem><simpara>Pressing <emphasis role="strong">REC</emphasis> while recording will silently switch to a new file.</simpara></listitem>
          <listitem>
            <simpara>
Pressing <emphasis role="strong">REC File</emphasis> while recording will
switch to a new file. A new file chooser is displayed each time this button is
pressed, thus "stacking" the renaming request. This way, all actual renaming is
postponed to after the recording session is finished.
            </simpara>
          </listitem>
          <listitem>
            <simpara>
The default file name is a timestamp. It is written as <emphasis
  role="strong">YYYY-MM-dd-HH-mm-ss.SSS</emphasis> with an extension of
<emphasis role="strong">.mid</emphasis> for the MIDI files and <emphasis
  role="strong">.wav</emphasis> for the audio files.
              <itemizedlist>
                <listitem><simpara>YYYY stands for <emphasis>Year</emphasis> (including century),</simpara></listitem>
                <listitem><simpara>MM stands for <emphasis>Month</emphasis> (01..12),</simpara></listitem>
                <listitem><simpara>dd stands for <emphasis>Day</emphasis> (01..31),</simpara></listitem>
                <listitem><simpara>HH stands for <emphasis>Hours</emphasis> (00..24),</simpara></listitem>
                <listitem><simpara>mm stands for <emphasis>Minutes</emphasis> (00..59),</simpara></listitem>
                <listitem><simpara>ss stands for <emphasis>Seconds</emphasis> (00..59),</simpara></listitem>
                <listitem><simpara>SSS stands for <emphasis>Milliseconds</emphasis> (000..999).</simpara></listitem>
              </itemizedlist>
            </simpara>
          </listitem>
        </itemizedlist>
      </note>
      <caution>
        <simpara>GrandOrgue stores MIDI data using a specific internal format that makes the file unsuitable for usage with a regular MIDI sequencer.</simpara>
        <simpara>
When a recorded MIDI file is played in another sample set than the sample set
used for recording, all recorded stop changes are silently <emphasis
  role="strong">ignored</emphasis>, thus preventing unexpected rendition.
        </simpara>
      </caution>
    </sect1>
  </chapter>
  <chapter>
    <title>Frequently Asked Questions</title>
    <indexterm>
      <primary>Frequently Asked Questions</primary>
    </indexterm>
    <para>
This section will be populated once questions become frequently asked.
    </para>
  </chapter>
  <chapter>
    <title>The GrandOrgue file format</title>
    <sect1>
      <title>General information</title>
      <para>
It is a text file in ISO-8859-1 encoding. The standard extension is
<emphasis>.organ</emphasis>. As an alternative, the file might be encoded in
UTF-8, if it starts with an appropriate byte order marker.
      </para>
      <para>
        Comments are any text from <emphasis>;</emphasis> to the end of line.
        Empty lines or lines containing only comments are ignored. 
        Thus it's not possible to include <emphasis>;</emphasis> in any string
      </para>
      <para>
Various settings are grouped in blocks. Each block is started with a
line starting with <emphasis>[</emphasis>, followed by the section name and ended with <emphasis>]</emphasis>.
Each block consists of list of name-values pairs separated by <emphasis>=</emphasis>.
Each setting may only occur once. The content is case sensitive.
No other elements are allowed in the file.
      </para>
      <para>
	File paths in this format are relative to the location of the organ
	file. The directory separator in these paths may be
	<emphasis>\</emphasis> or <emphasis>/</emphasis>. The paths should be
	considered case sensitive, even if this is not enforced on all platforms.
      </para>
      <caution>
	<simpara>
	  Hauptwerk only supports <emphasis>\</emphasis> as a directory
	  separator. So use <emphasis>/</emphasis> only if you do not intend
	  the ODF to be HW1-compatible.
	</simpara>
      </caution>
      <para>
Boolean values are represented as <emphasis>Y</emphasis> for "true" and
<emphasis>N</emphasis> for "false".
      </para>
      <para>
A color can be one of the following colors (not case sensitive):
BLACK, BLUE, DARK BLUE, GREEN, DARK GREEN, CYAN, DARK CYAN, RED, DARK
RED, MAGENTA, DARK MAGENTA, YELLOW, DARK YELLOW, LIGHT GREY, DARK
GREY, WHITE, BROWN.
Additionally, the HTML syntax #RRGGBB is supported.
      </para>
      <para>
A font size can be one of the following values: SMALL, NORMAL, LARGE
or an integer number between 1 and 50.
      </para>
      <para>
A panel size can be one of the following values: SMALL, MEDIUM, MEDIUM LARGE, LARGE
or an integer number between 100 and 32000.
      </para>
      <para>
The following image formats are supported: bmp, gif, jpg, ico, png
      </para>
      <para>
A bitmap number is a value between 1 and 64. It refers to a predefined
(wood) background. An odd number and the following even number
represent the same type of wood. The odd number has vertical grain,
while the odd has horizontal grain.
      </para>
      <para>
Floating point numbers use the following format:
<emphasis>-?[0-9]+(.[0-9]*)?</emphasis> That means: a optional minus
sign, followed by at least one digit. The decimal separator is a
period.
      </para>
      <para>
The unit "samples" counts the number of samples from the start of the
WAV file. On sample includes the values of all channels, eg: for a
stereo WAV file at 44.1 kHz, 1 second is equivalent to 44100 samples.
      </para>
      <figure>
        <title>background bitmaps 1 to 30</title>
        <mediaobject>
          <imageobject>
            <imagedata width="100%" scalefit="1" fileref="images/background1to30.jpg"/>
          </imageobject>
        </mediaobject>
      </figure>
      <figure>
        <title>background bitmaps 31 to 64</title>
        <mediaobject>
          <imageobject>
            <imagedata width="100%" scalefit="1" fileref="images/background31to64.jpg"/>
          </imageobject>
        </mediaobject>
      </figure>
      <para>
Objects in GrandOrgue are e.g. Manuals, Stops, Generals, ... . Each
object can consist of a backend part representing the object, and its
configuration (eg. list of sample file names) and multiple GUI
representations.
      </para>
      <para>
The main section is called <emphasis>Organ</emphasis>. It defines the
main panel. Objects like stops only displayed on a non-main panel
need an invisible definition for the backend part on the main panel
too.
      </para>
    </sect1>
    <sect1>
      <title>Sample format</title>
      <para>
The samples are stored as WAV files according to the WAV file
specification. The supported formats are: 8 bit, 16 bit and 24 bit PCM
or 32 bit IEEE float, either mono or stereo. The preferred sample rates
are 44100 or 48000 Hz - GO supports any sample rate between 22000 and
96000 Hz. GO only supports a single data chunk. To play looped
samples, they must include cue points (cue chunk) and loops (smpl
chunk). If there are multiple loops, each loop should overlap another
loop. Attack samples include the attack phase and the loops - they may
contain a release too. If release samples include a cue point, the
release is loaded starting with this position, else the whole file is
loaded. dwMIDIUnityNote and dwMIDIPitchFraction of the smpl chunk are
used for retuning an organ to other temperaments.
      </para>
      <para>
If multiple sample files are specified for one pipe, they must match
each other in regards to pitch, amplitude and other things. GrandOrgue
only allows adjustments at pipe level.
      </para>
      <para>
The samples in the format above may also be packed with WavPack
http://www.wavpack.com/. GO supports both the WavPack 4 and WavPack 5 formats,
without hybrid compression and it must include all metadata. A good
starting point for the WavPack compression options is
<emphasis>-x6</emphasis>
      </para>
    </sect1>
    <sect1>
      <title>Shortcut keys</title>
      <para>
The following key codes for shortcut keys are supported by GO:
      </para>
      <variablelist>
        <varlistentry>
          <term>8</term>
          <listitem>
            <para>
Backspace key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>48</term>
          <listitem>
            <para>
0 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>49</term>
          <listitem>
            <para>
1 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>50</term>
          <listitem>
            <para>
2 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>51</term>
          <listitem>
            <para>
3 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>52</term>
          <listitem>
            <para>
4 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>53</term>
          <listitem>
            <para>
5 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>54</term>
          <listitem>
            <para>
5 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>55</term>
          <listitem>
            <para>
6 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>56</term>
          <listitem>
            <para>
8 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>57</term>
          <listitem>
            <para>
9 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>65</term>
          <listitem>
            <para>
A key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>66</term>
          <listitem>
            <para>
B key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>67</term>
          <listitem>
            <para>
C key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>68</term>
          <listitem>
            <para>
D key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>69</term>
          <listitem>
            <para>
E key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>70</term>
          <listitem>
            <para>
F key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>71</term>
          <listitem>
            <para>
G key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>72</term>
          <listitem>
            <para>
H key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>73</term>
          <listitem>
            <para>
I key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>74</term>
          <listitem>
            <para>
J key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>75</term>
          <listitem>
            <para>
K key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>76</term>
          <listitem>
            <para>
L key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>77</term>
          <listitem>
            <para>
M key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>78</term>
          <listitem>
            <para>
N key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>79</term>
          <listitem>
            <para>
O key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>80</term>
          <listitem>
            <para>
P key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>81</term>
          <listitem>
            <para>
Q key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>82</term>
          <listitem>
            <para>
R key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>83</term>
          <listitem>
            <para>
S key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>84</term>
          <listitem>
            <para>
T key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>85</term>
          <listitem>
            <para>
U key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>86</term>
          <listitem>
            <para>
V key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>87</term>
          <listitem>
            <para>
W key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>88</term>
          <listitem>
            <para>
X key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>89</term>
          <listitem>
            <para>
Y key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>90</term>
          <listitem>
            <para>
Z key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>112</term>
          <listitem>
            <para>
F1 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>113</term>
          <listitem>
            <para>
F2 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>114</term>
          <listitem>
            <para>
F3 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>115</term>
          <listitem>
            <para>
F4 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>116</term>
          <listitem>
            <para>
F5 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>117</term>
          <listitem>
            <para>
F6 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>118</term>
          <listitem>
            <para>
F7 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>119</term>
          <listitem>
            <para>
F8 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>120</term>
          <listitem>
            <para>
F9 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>121</term>
          <listitem>
            <para>
F10 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>122</term>
          <listitem>
            <para>
F11 key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>123</term>
          <listitem>
            <para>
F12 key
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Organ section</title>
      <para>
This section describes the whole organ. For the old panel format, it
includes the main panel, therefore the section includes all display
metrics attributes. The new panel format separates the display metrics
of the main panel into a section named
<emphasis>Panel000</emphasis>. Additionally it includes the following
attributes:
     </para>
      <variablelist>
        <varlistentry>
          <term>ChurchName</term>
          <listitem>
            <para>
(string, required) Name of the organ/church. This string should be
unique, as setting files for organs with the same
<emphasis>ChurchName</emphasis> are considered compatible. GrandOrgue will
not load a settings file if the ChurchName does not match.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>ChurchAddress</term>
          <listitem>
            <para>
(string, required) informational text displayed in the property dialog
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>OrganBuilder</term>
          <listitem>
            <para>
(string, required) informational text displayed in the property dialog
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>OrganBuildDate</term>
          <listitem>
            <para>
(string, required) informational text displayed in the property dialog
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>OrganComments</term>
          <listitem>
            <para>
(string, required) informational text displayed in the property dialog
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>RecordingDetails</term>
          <listitem>
            <para>
(string, required) informational text displayed in the property dialog
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>InfoFilename</term>
          <listitem>
            <para>
(string, not required) relative path to an html file with more information
about the organ. This setting is currently not supported for organ packages.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfManuals</term>
          <listitem>
            <para>
(integer 1 - 16, required) number of manuals. It does not include the pedal keyboard.
The manual information for each manual is available in sections called 
<emphasis>Manual999</emphasis>. 999 is a number defining each manual, starting with 001.

     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>HasPedals</term>
          <listitem>
            <para>
(boolean, required) Determines if the pedal, which is defined as section
<emphasis>Manual000</emphasis>, is present.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfEnclosures</term>
          <listitem>
            <para>
(integer 0 - 999 required) number of enclosures. The details of each enclosure are contained in a section called <emphasis>Enclosure999</emphasis>
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfTremulants</term>
          <listitem>
            <para>
(integer 0 - 999, required) number of tremulants. The details of each tremulant are contained in a section called <emphasis>Tremulant999</emphasis>
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfWindchestGroups</term>
          <listitem>
            <para>
(integer 1 - 999, required) number of windchests. The details of each windchest are in a section called <emphasis>WindchestGroup999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfReversiblePistons</term>
          <listitem>
            <para>
(integer 0 - 32, required) number of reversible pistons. The details of each reversible piston are in a section called <emphasis>ReversiblePiston999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfGenerals</term>
          <listitem>
            <para>
(integer 0 - 99, required) number of generals. The details are in a section called
<emphasis>General999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfDivisionalCouplers</term>
          <listitem>
            <para>
(integer 0 - 8, required) number of divisional couplers. The details are in a section called
<emphasis>DivisionalCoupler999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfPanels</term>
          <listitem>
            <para>
(integer 0 - 100, default: 0) number of additional panels. The details are
in a section called <emphasis>Panel999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfSwitches</term>
          <listitem>
            <para>
(integer 0 - 999, default: 0) number of switches. The details are in a section called
<emphasis>Switch999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfRanks</term>
          <listitem>
            <para>
(integer 0 - 999, default: 0) number of additional ranks. The details are
in a section called <emphasis>Rank999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry id="divisionalsStoreIntermanualCouplers">
          <term>DivisionalsStoreIntermanualCouplers</term>
          <listitem>
            <para>
(boolean, required) determines if divisionals store/change the
state of associated intermanual couplers.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry id="divisionalsStoreIntramanualCouplers">
          <term>DivisionalsStoreIntramanualCouplers</term>
          <listitem>
            <para>
(boolean, required) determines if divisionals store/change the
state of associated intramanual couplers.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry id="divisionalsStoreTremulants">
          <term>DivisionalsStoreTremulants</term>
          <listitem>
            <para>
(boolean, required) determines if divisionals store/change the
state of associated tremulants.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry id="generalsStoreDivisionalCouplers">
          <term>GeneralsStoreDivisionalCouplers</term>
          <listitem>
            <para>
(boolean, required) determines if divisionals store/change the
state of divisional couplers.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry id="combinationsStoreNonDisplayedDrawstops">
          <term>CombinationsStoreNonDisplayedDrawstops</term>
          <listitem>
            <para>
	      (boolean, default: false) determines, if the state of read-only
	      objects (that is calculated based on the state of another objects)
	      is stored in divisionals, generals and the setter.
	    </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfImages</term>
          <listitem>
            <para>
(integer 0 - 999, default: 0) Number of images on the panel. The section
of the image GUI definitions are called
<emphasis>Image999</emphasis>. This setting is not supported for the
new panel format.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfSetterElements</term>
          <listitem>
            <para>
(integer 0 - 999, default: 0) Number of setter elements on the
panel. The section of the GUI definitions are called
<emphasis>SetterElement999</emphasis>. This setting is not supported
for the new panel format.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfLabels</term>
          <listitem>
            <para>
(integer 0 - 999, required) Number of labels on the panel. The section
for each label GUI definition is called
<emphasis>Label999</emphasis>. This setting is not supported for the
new panel format.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>AmplitudeLevel</term>
          <listitem>
            <para>
(float 0 - 1000, default: 100) Linear amplitude scale factor applied to
the whole organ. 100 means no change.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Gain</term>
          <listitem>
            <para>
(float -120 - 40, default: 0) Amplitude scale factor in dB applied to
the whole organ. 0 means no change.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PitchTuning</term>
          <listitem>
            <para>
(float -1800 - 1800, default: 0) Retune the whole organ the specified
number of cents.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PitchCorrection</term>
          <listitem>
            <para>
(float -1800 - 1800, default: 0) Correction factor in cent for the pitch
of the whole organ. This setting is used for retuning to other
temperaments.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TrackerDelay</term>
          <listitem>
            <para>
(integer 0 - 10000, default: 0) Delay introduced by the tracker applied to
the whole organ.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Percussive</term>
          <listitem>
            <para>
	      (boolean, default false) If true, the samples are played as is
	      (without any loop/release handling).
	    </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>HasIndependentRelease</term>
          <listitem>
            <para>
	      (boolean, default false). If true, releases are played
	      independently of the attacks.
	    </para>
            <para>
	      If HasIndependentRelease is true then Percussive must also be set
	      to true.
	    </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Setter elements</title>
      <para>
It is possible to display various setter elements on the panels. The
<emphasis>Type</emphasis> attribute describes the function - the other
attributes depend on the function:
     </para>
      <variablelist>
        <varlistentry>
          <term>Swell</term>
          <listitem>
            <para>
Represents the crescendo swell. The section must contain the GUI
attributes of an enclosure, eg the images for each position of the swell pedal, etc. 
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>CrescendoLabel</term>
          <listitem>
            <para>
Represents a label with crescendo state (ie the current step
that the crescendo pedal is at, from 1 to 32.) The section must contain the GUI
attributes of a label.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>SetterXXXDivisionalYYY</term>
          <listitem>
            <para>
              Represents a divisional button YYY (000 means 1, 001 - 2 etc) for
              the manual XXX (000 - Pedal, 001 - the first manual, etc). The
              section must contain the GUI attributes of a button (displayed as
              piston per default).
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>SetterXXXDivisionalPrevBank, SetterXXXDivisionalNextBank</term>
          <listitem>
            <para>
              Represents a button switching the current bank of divisionals for
              the manual XXX (000 - Pedal, 001 - the first manual, etc). The
              section must contain the GUI attributes of a button (displayed as
              piston per default).
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>SetterXXXDivisionalBank</term>
          <listitem>
            <para>
              Represents a label showing the current bank of divisionals for
              the manual XXX (000 - Pedal, 001 - the first manual, etc). The
              section must contain the GUI attributes of a label.
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Label</term>
          <listitem>
            <para>
Represents the current number of the setter. The section must contain the GUI
attributes of a label - only available for old format panels.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>SequencerLabel</term>
          <listitem>
            <para>
Represents the current number of the setter. The section must contain the GUI
attributes of a label.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>CurrFileName</term>
          <listitem>
            <para>
	      Represents the current combinations file name of the setter.
	      The section must contain the GUI attributes of a label.
	    </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>RefreshFiles, PrevFile, NextFile, LoadFile, SaveFile</term>
          <listitem>
            <para>
	      Refresh files/Prev file/Next file/Load file/Save file buttons of
	      the setter. The section must contain the GUI attributes of a
	      button (displayed as drawstop per default).
	    </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Prev, Next, Set</term>
          <listitem>
            <para>
Prev/next/set button of the setter. The section must contain the GUI
attributes of a button (displayed as drawstop per default).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>M100, M10, M1, P1, P10, P100</term>
          <listitem>
            <para>
+/- 1/10/100 button of the setter. The section must contain the GUI
attributes of a button (displayed as drawstop per default).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Home</term>
          <listitem>
            <para>
Move to 000 button of the setter. The section must contain the GUI
attributes of a button (displayed as drawstop per default).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Current</term>
          <listitem>
            <para>
Recall current number button of the setter. The section must contain the GUI
attributes of a button (displayed as drawstop per default).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>GC</term>
          <listitem>
            <para>
General cancel button of the setter. The section must contain the GUI
attributes of a button (displayed as drawstop per default).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>L0, L1, L2, L3, L4, L5, L6, L7, L8, L9</term>
          <listitem>
            <para>
Recall combination with the specified digit as last digit button of
the setter. The section must contain the GUI attributes of a button
(displayed as drawstop per default).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Regular, Scope, Scoped</term>
          <listitem>
            <para>
Button to switch between the various setter modes. The section must
contain the GUI attributes of a button (displayed as drawstop per
default).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Full</term>
          <listitem>
            <para>
Button to enable storing all elements in the setter (restrictions from
the ODF are ignored). The section must contain the GUI attributes of a
button (displayed as drawstop per default).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Insert, Delete</term>
          <listitem>
            <para>
Buttons to insert/remove a combination. The section must contain the
GUI attributes of a button (displayed as drawstop per default).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>General01 - General50</term>
          <listitem>
            <para>
Buttons for the setter generals. The section must contain the GUI
attributes of a button (displayed as piston per default).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>GeneralPrev, GeneralNext</term>
          <listitem>
            <para>
Buttons for switching banks of the setter generals. The section must
contain the GUI attributes of a button (displayed as drawstop per
default).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>GeneralLabel</term>
          <listitem>
            <para>
Represents a label with the general bank number. The section must contain the GUI
attributes of a label.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>CescendoA, CrescendoB, CrescendoC, CrescendoD</term>
          <listitem>
            <para>
Buttons to switch between the various crescendo modes. The section
must contain the GUI attributes of a button (displayed as drawstop per
default).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>CrescendoPrev, CrescendoNext, CrescendoCurrent</term>
          <listitem>
            <para>
Buttons for controlling the crescendo combinations. The section must
contain the GUI attributes of a button (displayed as drawstop per
default).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PitchP1, PitchP10, PitchP100, PitchM1, PitchM10, PitchM100</term>
          <listitem>
            <para>
Buttons for controlling the organ pitch (+1, +10, +100, -1, -10, -100
cent).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PitchLabel</term>
          <listitem>
            <para>
Label displaying the current pitch shift of the organ.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TemperamentPrev, TemperamentNext</term>
          <listitem>
            <para>
Buttons for switching temperaments.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TemperamentLabel</term>
          <listitem>
            <para>
Label displaying the current temperament of the organ.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TransposeDown, TransposeUp</term>
          <listitem>
            <para>
Buttons for transposing.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TransposeLabel</term>
          <listitem>
            <para>
Label displaying the current transpose setting.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Save</term>
          <listitem>
            <para>
Save button.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Display metrics</title>
      <para>
The layout of any panel is described by a layout model. The available
space is split vertically into three columns:
The left and the right column contain drawstops laid out via a mesh.
The middle row is vertically divided:
      </para>
      <para>
At the bottom, the pedal and its buttons are placed (if
present). Above, an extra row of buttons may follow. The next row
contains the enclosures. Then all manuals with their associated
buttons follow. The two rows are a block of buttons and pistons. The
exact order can be specified via an attribute.
      </para>
      <figure>
        <title>background regions</title>
        <mediaobject>
          <imageobject>
            <imagedata width="100%" scalefit="1" fileref="images/background-usage.jpg"/>
          </imageobject>
        </mediaobject>
      </figure>
      <para>
Has the following attributes:
      </para>
      <variablelist>
        <varlistentry>
          <term>DispScreenSizeHoriz</term>
          <listitem>
            <para>
(panel size, required) Width of the panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispScreenSizeVert</term>
          <listitem>
            <para>
(panel size, required) Height of the panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispDrawstopBackgroundImageNum</term>
          <listitem>
            <para>
(bitmap number, required) shown as 01 in the above image.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispConsoleBackgroundImageNum</term>
          <listitem>
            <para>
(bitmap number, required) shown as 05 in the above image.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispKeyHorizBackgroundImageNum</term>
          <listitem>
            <para>
(bitmap number, required) shown as 13 in the above image
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispKeyVertBackgroundImageNum</term>
          <listitem>
            <para>
(bitmap number, required) shown as 20 in the above image
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispDrawstopInsetBackgroundImageNum</term>
          <listitem>
            <para>
(bitmap number, required)
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispControlLabelFont</term>
          <listitem>
            <para>
(string, required) Name of the font for button labels.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispShortcutKeyLabelFont</term>
          <listitem>
            <para>
(string, required) Name of the font for shortcut labels - provided just for HW1 compatibility. DEPRECATED.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispShortcutKeyLabelColour</term>
          <listitem>
            <para>
(color, required) Color for shortcut labels - provided just for HW1 compatibility. DEPRECATED.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispGroupLabelFont</term>
          <listitem>
            <para>
(string, required) font name for labels
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispDrawstopCols</term>
          <listitem>
            <para>
(integer 2 - 12, required) number of drawstop columns. Must be even.
NOTE: If you want more than 12 drawstop columns, you must use absolute positioning.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispDrawstopRows</term>
          <listitem>
            <para>
(integer 1 - 20, required) Number of drawstop rows. 
NOTE: If you want more than 20 drawstop rows you must use absolute positioning.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispDrawstopColsOffset</term>
          <listitem>
            <para>
(boolean, required) If true, each second row of drawstops on the
left/right is displayed vertically shifted.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispDrawstopOuterColOffsetUp</term>
          <listitem>
            <para>
(boolean, required if DispDrawstopColsOffset is true)
Determines if second row is shifted up or down.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispPairDrawstopCols</term>
          <listitem>
            <para>
(boolean, required) group two drawstop rows together. Number of
drawstop rows must be divisible by 4.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispExtraDrawstopRows</term>
          <listitem>
            <para>
(integer 0 - 99, required) number of drawstop rows in the center block.
The row numbers start with 100.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispExtraDrawstopCols</term>
          <listitem>
            <para>
(integer 0 - 40, required) number of drawstop cols in the center block
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispButtonCols</term>
          <listitem>
            <para>
(integer 1 - 32, required) Number of columns for displaying pistons in the center block
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispExtraButtonRows</term>
          <listitem>
            <para>
(integer 0 - 99, required) number of rows for displaying extra 
pistons in the center block.
The row numbers start with 100.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispExtraPedalButtonRow</term>
          <listitem>
            <para>
(boolean, required) display an extra piston row with row number 9.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispExtraPedalButtonRowOffset</term>
          <listitem>
            <para>
(boolean, required if DispExtraPedalButtonRow is true) move extra
pistons row slightly to the left.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispExtraPedalButtonRowOffsetRight</term>
          <listitem>
            <para>
(boolean, required if DispExtraPedalButtonRow is true)
move extra pistons row slightly to the right.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispButtonsAboveManuals</term>
          <listitem>
            <para>
(boolean, required) Display the pistons associated with the manual
above (true) or below (false) the manual.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispTrimAboveManuals</term>
          <listitem>
            <para>
(boolean, required)
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispTrimBelowManuals</term>
          <listitem>
            <para>
(boolean, required)
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispTrimAboveExtraRows</term>
          <listitem>
            <para>
(boolean, required)
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispExtraDrawstopRowsAboveExtraButtonRows</term>
          <listitem>
            <para>
(boolean, required) Display extra drawstop block above or below the
extra piston block.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispDrawstopWidth</term>
          <listitem>
            <para>
(integer 1 - 150, default: 78) Drawstop width used for layout calculation
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispDrawstopHeight</term>
          <listitem>
            <para>
(integer 1 - 150, default: 69) Drawstop height used for layout calculation
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispPistonWidth</term>
          <listitem>
            <para>
(integer 1 - 150, default: 44) Piston width used for layout calculation
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispPistonHeight</term>
          <listitem>
            <para>
(integer 1 - 150, default: 40) Piston height used for layout calculation
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispEnclosureWidth</term>
          <listitem>
            <para>
(integer 1 - 150, default: 52) Enclosure width used for layout calculation
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispEnclosureHeight</term>
          <listitem>
            <para>
(integer 1 - 150, default: 63) Enclosure height used for layout calculation
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispPedalHeight</term>
          <listitem>
            <para>
(integer 1 - 500, default: 40) Pedal height used for layout calculation
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispPedalKeyWidth</term>
          <listitem>
            <para>
(integer 1 - 500, default: 7) Width of one pedal key used for layout calculation
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispManualHeight</term>
          <listitem>
            <para>
(integer 1 - 500, default: 32) Manual height used for layout calculation
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispManualKeyWidth</term>
          <listitem>
            <para>
(integer 1 - 500, default: 12) Width of one manual key used for layout calculation
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1 id="odfEnclosureEntry">
      <title>Enclosure objects</title>
      <para>
An enclosure represents a swell pedal. It consists of non-GUI
attributes describing its function. If it is displayed, it contains
additional GUI attributes. Best practice is to specify enclosures in
natural layout order (leftmost first) and give them incremental values
of MIDIInputNumber to make initial configurations easy for the user.
      </para>
      <variablelist>
        <varlistentry>
          <term>Name</term>
          <listitem>
            <para>
(string, required) Name of the control
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>AmpMinimumLevel</term>
          <listitem>
            <para>
(integer 0 - 100, required) Minimum volume, if the enclosure is closed.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MIDIInputNumber</term>
          <listitem>
            <para>
(integer 0 - 200, default: 0) This number is used while building the
initial MIDI configuration to map the enclosure object to one MIDI 
device the user can specify for the respective enclosure. A value of 0 
means no association, 1 means enclosure 1, 2 is enclosure 2 etc. 
Please note, that the GUI only allows the association of the first few 
enclosures.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Displayed</term>
          <listitem>
            <para>
(boolean, default: false for the new panel format, otherwise true) If
true, the enclosure is visible on the main panel.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
      <para>
If the enclosure is displayed, it contains the following GUI
attributes:
      </para>
      <variablelist>
        <varlistentry>
          <term>DispLabelColour</term>
          <listitem>
            <para>
(color, default: White) Color for the label text.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispLabelFontSize</term>
          <listitem>
            <para>
(font size, default: 7) Size of the label font
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispLabelFontName</term>
          <listitem>
            <para>
(string, default: empty) Font for the text. Empty means use the
default font.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispLabelText</term>
          <listitem>
            <para>
(string, default: Name of the enclosure) Content of the text label. You
should edit it if you need to display a shorter string.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>EnclosureStyle</term>
          <listitem>
            <para>
(integer 1 - 4, default: implementation dependent) Select a built-in
enclosure style.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>BitmapCount</term>
          <listitem>
            <para>
(integer 1 - 127, default: implementation dependent) Number of
bitmaps/steps.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Bitmap999</term>
          <listitem>
            <para>
(string, default: use internal bitmap) Specify the file name of an
image to use as on bitmap for position 999. If the bitmap contains a
mask for transparency, it will be used. All bitmaps must have the same
size.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Mask999</term>
          <listitem>
            <para>
(string, default: empty) File name for a external mask for bitmap
999. If empty, no mask is added.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PositionX</term>
          <listitem>
            <para>
(integer 0 - panel width, default: according to layout model) Allow to
override X position for enclosure.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PositionY</term>
          <listitem>
            <para>
(integer 0 - panel height, default: according to layout model) Allow
to override Y position for enclosure.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Width</term>
          <listitem>
            <para>
(integer 0 - panel width, default: bitmap width) Width of the
enclosure. If larger than the bitmap, the bitmap is tiled.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Height</term>
          <listitem>
            <para>
(integer 0 - panel height, default: bitmap height) Height of the
enclosure. If larger than the bitmap, the bitmap is tiled.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TileOffsetX</term>
          <listitem>
            <para>
(integer 0 - bitmap width, default: 0) X position on the bitmap of the
left pixel of the enclosure
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TileOffsetY</term>
          <listitem>
            <para>
(integer 0 - bitmap width, default: 0) Y position on the bitmap of the
top pixel of the enclosure
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MouseRectLeft</term>
          <listitem>
            <para>
(integer 0 - Width, default: 0) relative X of left border of the mouse
rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MouseRectTop</term>
          <listitem>
            <para>
(integer 0 - Height, default: implementation dependent) relative Y of
top border of the mouse rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MouseRectWidth</term>
          <listitem>
            <para>
(integer 0 - Width, default: Width) width of the mouse rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MouseRectHeight</term>
          <listitem>
            <para>
(integer 0 - Height, default: implementation dependent) height of the
mouse rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MouseAxisStart</term>
          <listitem>
            <para>
(integer 0 - MouseRectHeight, default: implementation dependent) top Y
coordinate of the axis
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MouseAxisEnd</term>
          <listitem>
            <para>
(integer MouseAxisStart - MouseRectHeight, default: implementation
dependent) bottom Y coordinate of the axis
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TextRectLeft</term>
          <listitem>
            <para>
(integer 0 - Width, default: 0) relative X of left border of the text
rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TextRectTop</term>
          <listitem>
            <para>
(integer 0 - Height, default: implementation dependent) relative Y of
top border of the text rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TextRectWidth</term>
          <listitem>
            <para>
(integer 0 - Width, default: Width) width of the text rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TextRectHeight</term>
          <listitem>
            <para>
(integer 0 - Height, default: implementation dependent) height of the
text rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TextBreakWidth</term>
          <listitem>
            <para>
(integer 0 - text rectangle width, default: TextWidth) If 0, no text
is displayed. Otherwise the value specifies the maximum line width
used for text breaking.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Combination data store</title>
      <para>
This object is used to store one combination It has the following attributes:
      </para>
      <variablelist>
        <varlistentry>
          <term>Protected</term>
          <listitem>
            <para>
(boolean, default: false) If true, the stored combination cannot be
changed.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfStops</term>
          <listitem>
            <para>
(integer 0 - number of stops defined in the ODF, required) Number of stop states stored in this
combination. The entries are called <emphasis>StopNumber999</emphasis>
and <emphasis>StopManual999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfCouplers</term>
          <listitem>
            <para>
(integer 0 - number of coupler defined in the ODF, required) Number of coupler states stored in this
combination. The entries are called
<emphasis>CouplerNumber999</emphasis> and
<emphasis>CouplerManual999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfTremulants</term>
          <listitem>
            <para>
(integer 0 - tremulant count, required) Number of tremulant states stored in this
combination. The entries are called <emphasis>TremulantNumber999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfSwitches</term>
          <listitem>
            <para>
(integer 0 - switch count, default: 0) Number of switch states stored in this
combination. The entries are called <emphasis>SwitchNumber999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfDivisionalCouplers</term>
          <listitem>
            <para>
(integer 0 - divisional coupler count, required if storing of
divisional coupler in the generals is enabled) Number of divisional coupler
state stored in this combination. The entries are called
<emphasis>DivisionalCouplerNumber999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>StopNumber999</term>
          <listitem>
            <para>
(integer -manual stop count - manual stop count, required) Number of
the stop on the manual. If the value is negative, it is turned off, else turned on.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>StopManual999</term>
          <listitem>
            <para>
(integer manual number, required) Number of the manual, which contains the stop.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>CouplerNumber999</term>
          <listitem>
            <para>
(integer -999 - 999, required) Number of the coupler on the manual. If the value is
negative, it is turned off, else it is turned on.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>CouplerManual999</term>
          <listitem>
            <para>
(integer manual number, required) Number of the manual, which contains the coupler.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TremulantNumber999</term>
          <listitem>
            <para>
(integer -tremulant count - tremulant count, required)
Number of the tremulant. If the value is negative, it is turned off,
else turned on.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>SwitchNumber999</term>
          <listitem>
            <para>
(integer -switch count - switch count, required)
Number of the switch. If the value is negative, it is turned off,
else it is turned on.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DivisionalCouplerNumber999</term>
          <listitem>
            <para>
(integer -divisional coupler count -divisional coupler count, required) Number of the divisional coupler. If the value is negative,
it is turned off, else it is turned on.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>General object</title>
      <para>
A general object consists of a push button and a combination data
store.
      </para>
    </sect1>
    <sect1>
      <title>Divisional coupler objects</title>
      <para>
A divisional coupler is a drawstop object. If enabled, activating a
divisional on one controlled manual will activate the corresponding
divisional on all other manuals. Additionally, it has the following
attributes:
      </para>
      <variablelist>
        <varlistentry>
          <term>BiDirectionalCoupling</term>
          <listitem>
            <para>
(boolean, required) If false, the coupler only couples upward in the
manual list of the coupler, else upward and downward.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfManuals</term>
          <listitem>
            <para>
(integer 1 - manual count, required) Number of manuals affected by
this coupler. The list entries are stored in
<emphasis>Manual999</emphasis> setting.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Manual999</term>
          <listitem>
            <para>
(integer manual number, required) Manual affected by the coupler
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Divisional objects</title>
      <para>
A divisional is a pushbutton object. Additionally, it has the
following attributes:
      </para>
      <variablelist>
        <varlistentry>
          <term>Protected</term>
          <listitem>
            <para>
(boolean, default: false) If true, the stored combination cannot be
changed.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfStops</term>
          <listitem>
            <para>
(integer 0 - stop count of the manual, required) Number of stop states
stored in this combination. The entries are called
<emphasis>Stop999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfCouplers</term>
          <listitem>
            <para>
(integer 0 - coupler count of the manual, required) Number of coupler
states stored in this combination. The entries are called
<emphasis>Coupler999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfTremulants</term>
          <listitem>
            <para>
(integer 0 - tremulant count of the manual, required) Number of
tremulant states stored in this combination. The entries are called
<emphasis>Tremulant999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfSwitches</term>
          <listitem>
            <para>
(integer 0 - switch count of the manual, default: 0) Number of
switch states stored in this combination. The entries are called
<emphasis>Switch999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Stop999</term>
          <listitem>
            <para>
(integer -manual stop count - manual stop count, required) Number of
the stop. If the value is negative, it is turned off, else turned on.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Coupler999</term>
          <listitem>
            <para>
(integer -999 - 999, required) Number of the coupler. If the value is
negative, it is turned off, else turned on.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Tremulant999</term>
          <listitem>
            <para>
(integer -manual tremulant count - manual tremulant count, required)
Number of the tremulant. If the value is negative, it is turned off,
else it is turned on.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Switch999</term>
          <listitem>
            <para>
(integer -manual switch count - manual switch count, required)
Number of the switch. If the value is negative, it is turned off,
else it is turned on.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1 id="odfManualEntry">
      <title>Manual objects</title>
      <para>
A manual is associated with a number of stops, tremulants, divisionals 
and couplers. The accessible range can be played via MIDI, the rest of
the logical keys can only be triggered by (octave) couplers. Best practice
is to specify the visible manuals in the order of appearance, lowest
first. Invisible manuals and those used for special effects should be 
specified after the visible ones. Manual objects contain the following
non-GUI attributes:
      </para>
      <variablelist>
        <varlistentry>
          <term>Name</term>
          <listitem>
            <para>
(string, required) Name of the manual
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfLogicalKeys</term>
          <listitem>
            <para>
(integer 1 - 192, required) Number of keys on this manual (including
non-playable ones).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>FirstAccessibleKeyLogicalKeyNumber</term>
          <listitem>
            <para>
(integer 1 - NumberOfLogicalKeys, required) number of the first
usable key
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>FirstAccessibleKeyMIDINoteNumber</term>
          <listitem>
            <para>
(integer 0 - 127, required) MIDI note number of the first MIDI accessible key.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfAccessibleKeys</term>
          <listitem>
            <para>
(integer 0 - 85, required) number of MIDI accessible keys.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MIDIInputNumber</term>
          <listitem>
            <para>
(integer 0 - 200, default: 0) This number is used while building the
initial MIDI configuration to map the manual object to what MIDI
device the the user has set for the respective pedal/manual. 0 means no
association. 1 maps to pedal, 2 to first manual, 3 to second manual etc. 
NOTE: the GUI only allows the association of the first few manuals.
Second touch manuals can be set to the same number as the main manual as the
user then only has to configure the low velocity to make it work.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Displayed</term>
          <listitem>
            <para>
(boolean, default: false) If true, the manual is visible on the main panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfStops</term>
          <listitem>
            <para>
(integer 0 - 999, required) Number of stops associated with this
manual. Starting with 1, for each stop, there is a
<emphasis>Stop999</emphasis> setting.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Stop999</term>
          <listitem>
            <para>
(integer, required) Number of the <emphasis>Stop999</emphasis> section
containing the stop details.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfCouplers</term>
          <listitem>
            <para>
(integer 0 - 999, default: 0) Number of couplers associated with this
manual. Starting with 1, for each coupler, there is a
<emphasis>Coupler999</emphasis> setting.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Coupler999</term>
          <listitem>
            <para>
(integer, required) Number of the <emphasis>Coupler999</emphasis>
section containing the coupler details.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfDivisionals</term>
          <listitem>
            <para>
(integer 0 - 999, default: 0) Number of divisionals associated with this
manual. Starting with 1, for each divisional, there is a
<emphasis>Divisional999</emphasis> setting.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Divisional999</term>
          <listitem>
            <para>
(integer, required) Number of the <emphasis>Divisional999</emphasis>
section containing the coupler details.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfTremulants</term>
          <listitem>
            <para>
(integer 0 - number of tremulants, default: 0) Number of tremulants associated with this
manual. Starting with 1, for each tremulant, there is a
<emphasis>Tremulant999</emphasis> setting.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Tremulant999</term>
          <listitem>
            <para>
(integer, required) Number of the <emphasis>Tremulant999</emphasis>
section containing the tremulant details.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfSwitches</term>
          <listitem>
            <para>
(integer 0 - number of switches, default: 0) Number of switches associated with this
manual. Starting with 1, for each switch, there is a
<emphasis>Switch999</emphasis> setting.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Switch999</term>
          <listitem>
            <para>
(integer, required) Number of the <emphasis>Switch999</emphasis>
section containing the switch details.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry id="midikeyentry">
          <term>MIDIKey000 - MIDIKey127</term>
          <listitem>
            <para>
(integer 0 - 127, default: same MIDI key number) Allows to map the MIDI
note in <emphasis>MIDIKey999</emphasis> to a different number. This
mapping is used by the default manual MIDI matching type - others may
or may not use this mapping table.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
      <para>
The various GUI manual attributes are specified for the different key
types. They are named: C, Cis, D, Dis, E, F, Fis, G, Gis, A, Ais,
B. If it is the first key on the manual, it is prefixed with First. If
it is the last key on the manual, it is prefixed with Last. So valid
values are eg. Gis, FirstDis, LastAis. In the following, these values
will be marked as <emphasis>KEYTYPE</emphasis>.
      </para>
      <para>
If the manual is displayed, it contains the following GUI attributes:
      </para>
      <variablelist>
        <varlistentry>
          <term>PositionX</term>
          <listitem>
            <para>
(integer 0 - panel width, default: according to layout model) Allow to
override X position for manual.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PositionY</term>
          <listitem>
            <para>
(integer 0 - panel height, default: according to layout model) Allow
to override Y position for manual.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>ImageOn_<emphasis>KEYTYPE</emphasis></term>
          <listitem>
            <para>
(string, default: implementation dependent bitmap) Bitmap for the
specified key type, if the key is pressed. The bitmap may contain a
mask.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>ImageOff_<emphasis>KEYTYPE</emphasis></term>
          <listitem>
            <para>
(string, default: implementation dependent bitmap) Bitmap for the
specified key type, if the key is not pressed. The bitmap may contain
a mask.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MaskOn_<emphasis>KEYTYPE</emphasis></term>
          <listitem>
            <para>
(string, default: empty string) Mask for the corresponding On
bitmap. If empty, no external mask is loaded.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MaskOff_<emphasis>KEYTYPE</emphasis></term>
          <listitem>
            <para>
(string, default: corresponding on mask) Mask for the corresponding
Off bitmap. If empty, no external mask is loaded.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Width_<emphasis>KEYTYPE</emphasis></term>
          <listitem>
            <para>
(integer 0 - 500, default: implementation dependent) This value is
added to the x position of the current key to determine the position
of the next key.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Offset_<emphasis>KEYTYPE</emphasis></term>
          <listitem>
            <para>
(integer -500 - 500, default: implementation dependent) This value
can be used to adjust the display of the current key, eg. to place a
sharp key overlapped with the previous key.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>YOffset_<emphasis>KEYTYPE</emphasis></term>
          <listitem>
            <para>
(integer -500 - 500, default: 0) This value is can be used to adjust the
Y coordinate of the current key.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Key999ImageOn</term>
          <listitem>
            <para>
(string, default: corresponding ImageOn_<emphasis>KEYTYPE</emphasis>)
Allows to set the on bitmap for the 999 key.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Key999ImageOff</term>
          <listitem>
            <para>
(string, default: corresponding ImageOff_<emphasis>KEYTYPE</emphasis>)
Allows to set the off bitmap for the 999 key.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Key999MaskOn</term>
          <listitem>
            <para>
(string, default: corresponding MaskOn_<emphasis>KEYTYPE</emphasis>)
Allows to set the on mask for the 999 key.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Key999MaskOff</term>
          <listitem>
            <para>
(string, default: corresponding MaskOff_<emphasis>KEYTYPE</emphasis>)
Allows to set the off mask for the 999 key.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Key999Width</term>
          <listitem>
            <para>
(integer 0 - 500, default: corresponding
Width_<emphasis>KEYTYPE</emphasis>) Allows to set the width of the 999
key.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Key999Offset</term>
          <listitem>
            <para>
(integer -500 - 500, default: corresponding
Offset_<emphasis>KEYTYPE</emphasis>) This value is
can be used to adjust the display of the 999 key, eg. to place a
sharp key overlapped with the previous 999 key.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Key999YOffset</term>
          <listitem>
            <para>
(integer -500 - 500, default: corresponding
YOffset_<emphasis>KEYTYPE</emphasis>) This value is can be used to
adjust the Y coordinate of the 999 key.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Key999MouseRectLeft</term>
          <listitem>
            <para>
(integer 0 - key bitmap width - 1 , default: 0) relative X of left border of the mouse
rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Key999MouseRectTop</term>
          <listitem>
            <para>
(integer 0 - key bitmap height - 1, default: 0) relative Y of top border
of the mouse rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Key999MouseRectWidth</term>
          <listitem>
            <para>
(integer 0 - key bitmap width, default: key bitmap width) width of the mouse rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Key999MouseRectHeight</term>
          <listitem>
            <para>
(integer 0 - key bitmap height, default: key bitmap height) height of the
mouse rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispKeyColourInverted</term>
          <listitem>
            <para>
(boolean, default: false) True means, the <emphasis>black</emphasis> keys
are drawn in a light color while the <emphasis>white</emphasis> keys
are drawn in a dark color.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispKeyColourWooden</term>
          <listitem>
            <para>
(boolean, default: false) True means, that a wood background is used
for the keys.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispImageNum</term>
          <listitem>
            <para>
(integer 1 - 2, default: 1) determines which set of builtin bitmaps is used for
displaying the keys.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DisplayFirstNote</term>
          <listitem>
            <para>
(integer 0 - 127, default: FirstAccessibleKeyMIDINoteNumber) Display
the first key as the following note.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DisplayKeys</term>
          <listitem>
            <para>
(integer 1 - NumberOfAccessibleKeys, default: NumberOfAccessibleKeys) number of keys
to display.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry id="displaykeyentry">
          <term>DisplayKey999</term>
          <listitem>
            <para>
(integer 0 - 127, default: FirstAccessibleKeyMIDINoteNumber +
<emphasis>999</emphasis>) The number in the key
(<emphasis>999</emphasis>) is between 1 and
<emphasis>DisplayKeys</emphasis>. It contains the MIDI number of the
backend key, that is connected to this GUI key.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry id="displaykeyentryNote">
          <term>DisplayKey999Note</term>
          <listitem>
            <para>
(integer 0 - 127, default: FirstAccessibleKeyMIDINoteNumber +
<emphasis>999</emphasis>) The number in the key
(<emphasis>999</emphasis>) is between 1 and
<emphasis>DisplayKeys</emphasis>. It contains the MIDI number of the
displayed frontend GUI key.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Label objects</title>
      <para>
Label object allows to display a text label. The background is an
image. It is tiled, if the image is smaller than the label area. A
label has the following attributes:
      </para>
      <variablelist>
        <varlistentry>
          <term>FreeXPlacement</term>
          <listitem>
            <para>
(boolean, default: true) True means that the X position is determined
by DispXpos, else by DispDrawstopCol and DispSpanDrawstopColToRight.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>FreeYPlacement</term>
          <listitem>
            <para>
(boolean, default: true) True means that the Y position is determined
by DispYpos, else by DispAtTopOfDrawstopCol.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispXpos</term>
          <listitem>
            <para>
(integer 0 - panel width, default: 0) absolute X position
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispYpos</term>
          <listitem>
            <para>
(integer 0 - panel height, default: 0) absolute Y position
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispAtTopOfDrawstopCol</term>
          <listitem>
            <para>
(boolean, required if FreeYPlacement is false) If true, the label is
displayed above the drawstop, else below.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispDrawstopCol</term>
          <listitem>
            <para>
(integer 1 - number of drawstop columns, required if FreeXPlacement is
false) Position label at the specified drawstop column.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispSpanDrawstopColToRight</term>
          <listitem>
            <para>
(boolean, required if FreeXPlacement is false) If true, move label half of the drawstop to the right.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispLabelColour</term>
          <listitem>
            <para>
(color, default: Black) Color for the label text.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispLabelFontSize</term>
          <listitem>
            <para>
(font size, default: normal) Size of the label font
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispLabelFontName</term>
          <listitem>
            <para>
(string, default: empty) Font for the text. Empty means use the
group label font of the panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Name</term>
          <listitem>
            <para>
(string, default: empty) The text to display on this object
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispImageNum</term>
          <listitem>
            <para>
	      (integer 0 - 15, default: 1) Builtin bitmap set to use. 0 means
	      that the label does not have a background image.
	    </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Image</term>
          <listitem>
            <para>
(string, default: use internal bitmap according to DispImageNum)
Specify the file name of an image to use as bitmap. If the bitmap
contains a mask for transparency, it will be used.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Mask</term>
          <listitem>
            <para>
(string, default: empty) File name for a external mask for the
bitmap. If empty, no mask is added.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PositionX</term>
          <listitem>
            <para>
(integer 0 - panel width, default: according to the definitions above) Allow
to override X position for label
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PositionY</term>
          <listitem>
            <para>
(integer 0 - panel height, default: according to definitions above) Allow
to override Y position for label
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Width</term>
          <listitem>
            <para>
(integer 0 - panel width, default: bitmap width) Width of the
label. If larger than the bitmap, the bitmap is tiled.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Height</term>
          <listitem>
            <para>
(integer 0 - panel height, default: bitmap height) Height of the
label. If larger than the bitmap, the bitmap is tiled.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TileOffsetX</term>
          <listitem>
            <para>
(integer 0 - bitmap width, default: 0) X position on the bitmap of the
left pixel of the label
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TileOffsetY</term>
          <listitem>
            <para>
(integer 0 - bitmap width, default: 0) Y position on the bitmap of the
top pixel of the label
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TextRectLeft</term>
          <listitem>
            <para>
(integer 0 - Width, default: 0) relative X of left border of the text
rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TextRectTop</term>
          <listitem>
            <para>
(integer 0 - Height, default: 0) relative Y of top border of the text
rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TextRectWidth</term>
          <listitem>
            <para>
(integer 0 - Width, default: Width) width of the text rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TextRectHeight</term>
          <listitem>
            <para>
(integer 0 - Height, default: Height) height of the text rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TextBreakWidth</term>
          <listitem>
            <para>
(integer 0 - text rectangle width, default: TextWidth) If 0, no text is
displayed. Otherwise the value specifies the maximum line width used
for text breaking.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Image objects</title>
      <para>
Image objects allow to display an image on a panel. They tile the images,
if it is bigger then image size. It has the following attributes:
      </para>
      <variablelist>
        <varlistentry>
          <term>Image</term>
          <listitem>
            <para>
(string, required) Specifies the file name of an image to use as a
bitmap. If the bitmap contains a mask for transparency, it will be
used.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Mask</term>
          <listitem>
            <para>
(string, default: empty) File name for a external mask for the
bitmap. If empty, no mask is added.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PositionX</term>
          <listitem>
            <para>
(integer 0 - panel width, default: 0) X coordinate of the left side.
to override X position for button
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PositionY</term>
          <listitem>
            <para>
(integer 0 - panel height, default: 0) Y coordinate of the left side.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Width</term>
          <listitem>
            <para>
(integer 0 - panel width, default: bitmap width) Width of the
button. If larger than the bitmap, the bitmap is tiled.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Height</term>
          <listitem>
            <para>
(integer 0 - panel height, default: bitmap height) Height of the
button. If larger than the bitmap, the bitmap is tiled.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TileOffsetX</term>
          <listitem>
            <para>
(integer 0 - bitmap width, default: 0) X position on the bitmap of the
left pixel of the image
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TileOffsetY</term>
          <listitem>
            <para>
(integer 0 - bitmap height, default: 0) Y position on the bitmap of the
top pixel of the image
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Button objects</title>
      <para>
Button objects are defined on the main panel. Their section name
is based on their function. They share the following common properties:
      </para>
      <variablelist>
        <varlistentry>
          <term>Name</term>
          <listitem>
            <para>
(string, required) Name of the object. The name may be presented to the
user in lists too, therefore it should be descriptive. If a GUI
representation requires a shorter name, please override this value
locally.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Displayed</term>
          <listitem>
            <para>
(boolean, default: false) If true, the section also includes the GUI
properties for the main panel. Otherwise it is not displayed on the
main panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DisplayInInvertedState</term>
          <listitem>
            <para>
(boolean, default: false) If true, off is displayed as on and on as
off.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>StopControlMIDIKeyNumber</term>
          <listitem>
            <para>
(integer 0 - 127, default: no MIDI event specified) Only used for building the initial configuration during
the first load - provided just for HW1 compatibility. DEPRECATED.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MIDIProgramChangeNumber</term>
          <listitem>
            <para>
(integer 1 - 128, default: no MIDI event specified) Only used for building the initial configuration during
the first load - provided just for HW1 compatibility. DEPRECATED.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>ShortcutKey</term>
          <listitem>
            <para>
(integer 0 - 255, default: 0) 0 means no shortcut, else it specifies the
key code of the shortcut key.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
      <para>
The GUI properties of button objects are:
</para>
      <variablelist>
        <varlistentry>
          <term>DisplayAsPiston</term>
          <listitem>
            <para>
(boolean, default: true for divisionals, generals and pistons, else
false) True means to display as piston, false as drawstop
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispLabelColour</term>
          <listitem>
            <para>
(color, default: Dark Red) Color for the label text.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispLabelFontSize</term>
          <listitem>
            <para>
(font size, default: normal) Size of the label font
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispLabelFontName</term>
          <listitem>
            <para>
(string, default: empty) Font for the text. Empty means use the
control label font of the panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispLabelText</term>
          <listitem>
            <para>
(string, default: Name of the button) Content of the text label. You
should edit it, if you need to display a shorter string on the label.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispKeyLabelOnLeft</term>
          <listitem>
            <para>
(boolean, default: true) If displayed as a piston and this attribute
is false, move it a little bit left. Otherwise ignored.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispImageNum</term>
          <listitem>
            <para>
(integer 1 - type dependent, default: see below) Builtin bitmap set to
use. GrandOrgue has 7 for drawstops and 5 for pistons. The default is
3 (piston) or 4 (drawstops) for read-only buttons, otherwise the
default is 1.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispButtonRow</term>
          <listitem>
            <para>
(button row, default: 1) If displayed as piston, it contains the
button row according to the layout model. Otherwise ignored.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispButtonCol</term>
          <listitem>
            <para>
(button column, default: 1) If displayed as piston, it contains the
button column according to the layout model. Otherwise ignored.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispDrawstopRow</term>
          <listitem>
            <para>
(drawstop row, default: 1) If displayed as drawstop, it contains the
drawstop row according to the layout model. Otherwise ignored.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DispDrawstopCol</term>
          <listitem>
            <para>
(drawstop column, default: 1) If displayed as drawstop, it contains
the drawstop column according to the layout model. Otherwise
ignored.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>ImageOn</term>
          <listitem>
            <para>
(string, default: use internal bitmap according to DispImageNum)
Specify the file name of an image to use as on bitmap. If the bitmap
contains a mask for transparency, it will be used.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>ImageOff</term>
          <listitem>
            <para>
(string, default: use internal bitmap according to DispImageNum)
Specify the file name of an image to use as off bitmap. If the bitmap
contains a mask for transparency, it will be used. The size must match
the on bitmap.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MaskOn</term>
          <listitem>
            <para>
(string, default: empty) File name for a external mask for the on
bitmap. If empty, no mask is added.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MaskOff</term>
          <listitem>
            <para>
(string, default: value of MaskOn) File name for a external mask for
the off bitmap. If empty, no mask is added.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PositionX</term>
          <listitem>
            <para>
(integer 0 - panel width, default: according to layout model) Allow
to override X position for button
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PositionY</term>
          <listitem>
            <para>
(integer 0 - panel height, default: according to layout model) Allow
to override Y position for button
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Width</term>
          <listitem>
            <para>
(integer 0 - panel width, default: bitmap width) Width of the
button. If larger than the bitmap, the bitmap is tiled.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Height</term>
          <listitem>
            <para>
(integer 0 - panel height, default: bitmap height) Height of the
button. If larger than the bitmap, the bitmap is tiled.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TileOffsetX</term>
          <listitem>
            <para>
(integer 0 - bitmap width, default: 0) X position on the bitmap of the
left pixel of the button
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TileOffsetY</term>
          <listitem>
            <para>
(integer 0 - bitmap width, default: 0) Y position on the bitmap of the
top pixel of the button
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MouseRectLeft</term>
          <listitem>
            <para>
(integer 0 - Width, default: 0) relative X of left border of the mouse
rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MouseRectTop</term>
          <listitem>
            <para>
(integer 0 - Height, default: 0) relative Y of top border of the mouse
rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MouseRectWidth</term>
          <listitem>
            <para>
(integer 0 - Width, default: Width) width of the mouse rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MouseRectHeight</term>
          <listitem>
            <para>
(integer 0 - Height, default: Height) height of the mouse rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MouseRadius</term>
          <listitem>
            <para>
(integer 0 - max(MouseRectHeight, MouseRectWidth), default:
min(MouseRectHeight, MouseRectWidth) / 2) If 0, the mouse events are
captured inside the mouse rectangle. Otherwise they must be inside a
circle of the specified size too.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TextRectLeft</term>
          <listitem>
            <para>
(integer 0 - Height, default: 1) relative X of left border of the text
rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TextRectTop</term>
          <listitem>
            <para>
(integer 0 - Height, default: 1) relative Y of top border of the text
rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TextRectWidth</term>
          <listitem>
            <para>
(integer 0 - Width, default: Width) width of the text rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TextRectHeight</term>
          <listitem>
            <para>
(integer 0 - Height, default: Height) height of the text rectangle
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TextBreakWidth</term>
          <listitem>
            <para>
(integer 0 - text rectangle width, default: slightly smaller than
TextWidth) If 0, no text is displayed. Otherwise the value specifies the
maximum line width used for text breaking.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
      <para>
Inside the button, the on/off bitmap (depending on the button state)
is tiled. If a text width is set, a text label is displayed on
it. Mouse events are only captured inside the mouse rectangle.
</para>
    </sect1>
    <sect1>
      <title>Drawstop objects</title>
      <para>
Drawstop objects are buttons with toggle functions. They contain these
additional non-GUI properties:
      </para>
      <variablelist>
        <varlistentry>
          <term>Function</term>
          <listitem>
            <para>
(enumeration, default: Input) Logical function of the drawstop. If the
value is <emphasis>Input</emphasis>, it is a normal user controllable
drawstop and has no input switches. <emphasis>Not</emphasis> has one
only input and negates the state of the input
switch. <emphasis>And</emphasis>, <emphasis>Xor</emphasis>,
<emphasis>Nand</emphasis>, <emphasis>Nor</emphasis> as well as
<emphasis>Or</emphasis> has a variable number of inputs.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>SwitchCount</term>
          <listitem>
            <para>
(integer 1 - switch count, required if the logical function allows a
variable number number of inputs) Contains the number of input ports.
<emphasis>Switch999</emphasis> contains the referenced switches.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Switch999</term>
          <listitem>
            <para>
(integer 1 - switch count, required) Lists the input switches of the
logical function of the drawstop. If the drawstop is a switch, it can
only reference switches with a lower number. The number of this
settings depends on the function.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DefaultToEngaged</term>
          <listitem>
            <para>
(boolean, required if Function is Input or not defined, else ignored) State of the button after loading.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>GCState</term>
          <listitem>
            <para>
(integer -1 - 1, default: implementation defined) State of the button
after pressing GC. -1 means no change, 0 off and 1 on.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry id="storeInDivisional">
          <term>StoreInDivisional</term>
          <listitem>
            <para>
(boolean, default: dependent on various settings) Determines, if the
button should be stored in divisionals without
<emphasis>FULL</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry id="storeInGeneral">
          <term>StoreInGeneral</term>
          <listitem>
            <para>
(boolean, default: dependent on various settings) Determines, if the
button should be stored in generals without
<emphasis>FULL</emphasis>.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Coupler objects</title>
      <para>
Couplers are drawstop objects. They forward key presses from one manual
to other manuals/keys. They have the following additional attributes:
      </para>
      <variablelist>
        <varlistentry>
          <term>UnisonOff</term>
          <listitem>
            <para>
(boolean, required) If true, this coupler decouples the manual from
the stops (turn it into a floating manual).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DestinationManual</term>
          <listitem>
            <para>
(integer manual number, required if not a unison off coupler) manual to forward key presses to.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DestinationKeyshift</term>
          <listitem>
            <para>
(integer -24 - 24, required if not a unison off coupler) specifies the
keyboard shift between source and destination manual in terms of absolute
MIDI note numbers
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>CoupleToSubsequentUnisonIntermanualCouplers</term>
          <listitem>
            <para>
(boolean, required if not a unison off/melody/bass coupler) Triggers further inter-manual coupler with a destination key shift of zero.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>CoupleToSubsequentUpwardIntermanualCouplers</term>
          <listitem>
            <para>
(boolean, required if not a unison off/melody/bass coupler) Triggers
further inter-manual coupler with a destination key shift greater than
zero.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>CoupleToSubsequentDownwardIntermanualCouplers</term>
          <listitem>
            <para>
(boolean, required if not a unison off/melody/bass coupler) Triggers
further inter-manual coupler with a destination key shift less than
zero.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>CoupleToSubsequentUpwardIntramanualCouplers</term>
          <listitem>
            <para>
(boolean, required if not a unison off/melody/bass coupler) Triggers
further intra-manual coupler with a destination key shift greater than
zero.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>CoupleToSubsequentDownwardIntramanualCouplers</term>
          <listitem>
            <para>
(boolean, required if not a unison off/melody/bass coupler) Triggers
further intra-manual coupler with a destination key shift less than
zero.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>CouplerType</term>
          <listitem>
            <para>
(enumeration, default: Normal) Type of the coupler: Normal, Bass or
Melody.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>FirstMIDINoteNumber</term>
          <listitem>
            <para>
(integer 0 - 127, default: 0) first MIDI note number to forward
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfKeys</term>
          <listitem>
            <para>
(integer 0 - 127, default: 0) number of keys to forward starting with
FirstMIDINoteNumber.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Switch objects</title>
      <para>
A switch object is a drawstop objects without any additional
attributes. It can be used, for example, to trigger stop action noises and key action noises. See the Demo organ and the Kalvtrask organ for examples of its use.
      </para>
    </sect1>
    <sect1>
      <title>Rank objects</title>
      <para>
A rank represents a row of pipes. It can be either be part of a stop
section or appear in its own section.
      </para>
      <variablelist>
        <varlistentry>
          <term>Name</term>
          <listitem>
            <para>
(string, required) Name of the rank. The name may be presented to the
user in lists too, therefore it should be descriptive.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>FirstMidiNoteNumber</term>
          <listitem>
            <para>
(integer 0 - 256, if the rank is part of a stop section, the default
value is derived from the associated manuals. Otherwise required) MIDI note
number of the first pipe
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfLogicalPipes</term>
          <listitem>
            <para>
(integer 1 - 192, required) Number of pipes in this rank
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>AmplitudeLevel</term>
          <listitem>
            <para>
(float 0 - 1000, default: 100) Linear amplitude scale factor applied to
the whole rank. 100 means no change.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Gain</term>
          <listitem>
            <para>
(float -120 - 40, default: 0) Amplitude scale factor in dB applied to
the whole rank. 0 means no change.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PitchTuning</term>
          <listitem>
            <para>
(float -1800 - 1800, default: 0) Retune the rank by the specified number
of cents.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TrackerDelay</term>
          <listitem>
            <para>
(integer 0 - 10000, default: 0) Delay introduced by the tracker for
that rank.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>HarmonicNumber</term>
          <listitem>
            <para>
(float 1 - 1024, default: 8) Harmonic number (= 64 / rank size), eg. 2
2/3 =&gt; 64 / (2 2/3) = 24. The harmonic number is used  determining alternative tunings.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PitchCorrection</term>
          <listitem>
            <para>
(float -1800 - 1800, default: 0) Correction factor in cent for the pitch
of the rank. This setting is used for retuning to other
temperaments.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>WindchestGroup</term>
          <listitem>
            <para>
(integer 1 - number of windchests, required) specify the windchest
on which the pipes of the are placed.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Percussive</term>
          <listitem>
            <para>
	      (boolean, default inherited from the Windchest section) If true,
	      the samples are played as is (without any loop/release handling).
	    </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>HasIndependentRelease</term>
          <listitem>
            <para>
	      (boolean, default inherited from the Windchest section). If true,
	      releases are played independently of the attacks.
	    </para>
            <para>
	      If HasIndependentRelease is true then Percussive must also be set
	      to true.
	    </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MinVelocityVolume</term>
          <listitem>
            <para>
(float 0 - 1000, default: 100) Linear amplitude scale factor at low
velocity applied to the whole rank. 100 means no change.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>MaxVelocityVolume</term>
          <listitem>
            <para>
(float 0 - 1000, default: 100) Linear amplitude scale factor at high
velocity applied to the whole rank. 100 means no change.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>AcceptsRetuning</term>
          <listitem>
            <para>
(boolean, default: true) Determines if the rank will be retuned
according to the current temperament. Retuning should be only disabled
for sound effects.
            </para>
          </listitem>
        </varlistentry>
      </variablelist>
      <para>
A rank section contains the attributes of each of its pipes too.
The attributes of each pipe are prefixed with
<emphasis>Pipe999</emphasis> (number starting with 1). The supported
attributes are:
      </para>
      <variablelist>
        <varlistentry>
          <term>Pipe999</term>
          <listitem>
            <para>
(string, required) Relative path to the sample WAV file of the first
attack. It may be listed as REF:aa:bb:cc too. In that case, it means
that this pipe is borrowed from manual aa, first rank of stop bb, the pipe cc.
It may contain DUMMY, which defines a non-sounding placeholder.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Percussive</term>
          <listitem>
            <para>
	      (boolean, default: rank Percussive setting) If true, the samples
	      are played as is (without any loop/release handling)
	    </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999HasIndependentRelease</term>
          <listitem>
            <para>
	      (boolean, default: rank HasIndependentRelease setting). If true,
	      releases are played independently of attacks in this pipe.
	    </para>
            <para>
	      If HasIndependentRelease is true then Pipe999Percussive must be
	      also true and Pipe999ReleaseCount must be greater than 0.
	    </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999AmplitudeLevel</term>
          <listitem>
            <para>
(float 0 - 1000, default: 100) Linear amplitude scale factor applied to
the pipe (in addition to the organ/windchest/rank factor). 100 means no change.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Gain</term>
          <listitem>
            <para>
(float -120 - 40, default: 0) Amplitude scale factor in dB applied to
the pipe (in addition to the organ/windchest/rank factor). 0 means no change.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999PitchTuning</term>
          <listitem>
            <para>
(float -1800 - 1800, default: 0) Retune this pipe the specified
number of cents (in addition to the organ/windchest/rank factor).
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999TrackerDelay</term>
          <listitem>
            <para>
(integer 0 - 10000, default: 0) Delay introduced by the tracker for
that pipe.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999LoadRelease</term>
          <listitem>
            <para>
(boolean, default: reverse of percussive setting) If true, the release
part is loaded from the first attack sample.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999AttackVelocity</term>
          <listitem>
            <para>
(integer 0 - 127, default: 0) minimum velocity to use this attack sample.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999MaxTimeSinceLastRelease</term>
          <listitem>
            <para>
(integer -1 - 100000, default: -1) maximum time since the last release of
the key to be able to use that attack. -1 means infinite.
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999IsTremulant</term>
          <listitem>
            <para>
(integer -1 - 1, default: -1) 1 means, that it is played, if the associated
wave-based tremulant is on. 0 means, that it is played, if the
associated wave-based tremulant is off. -1 means, that it is not affected
by a wave-based tremulant.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999MaxKeyPressTime</term>
          <listitem>
            <para>
(integer -1 - 100000, default: -1) Up to this time value in ms, the
release sample is chosen. -1 means infinite.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999AttackStart</term>
          <listitem>
            <para>
(integer 0 - 158760000, default: 0) Allows to override the start of the
sample. This option is specified in samples.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999CuePoint</term>
          <listitem>
            <para>
(integer -1 - 158760000, default: -1) Allows to override the cue point for
the release. -1 means use from the wave file. This option is specified
in samples.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999ReleaseEnd</term>
          <listitem>
            <para>
(integer -1 - 158760000, default: -1) Allows to override the end of the
release. -1 means play till the end of the wav. This option is
specified in samples.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999LoopCount</term>
          <listitem>
            <para>
(integer 0 - 100, default: 0) Allows to override the loops in the WAV file.
0 means use loops from the wave file.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Loop999Start</term>
          <listitem>
            <para>
(integer 0 - 158760000, default: 0) Start sample of the loop. The value
must be within the WAV file. This option is specified in samples.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Loop999End</term>
          <listitem>
            <para>
(integer Pipe999Loop999Start + 1 - 158760000, required if Pipe999LoopCount
is not zero) End sample of the loop. The value must be within the WAV
file. This option is specified in samples.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999HarmonicNumber</term>
          <listitem>
            <para>
(float 1 - 1024, default: rank harmonic number) Harmonic number (= 64 /
rank size), eg. 2 2/3 =&gt; 64 / (2 2/3) = 24.
     </para>
          </listitem>
        </varlistentry>
  <varlistentry>
    <term>Pipe999MIDIKeyNumber</term>
    <listitem>
      <para>
(integer -1 - 127, default: -1) If -1, use pitch information from the
Pipe999 sample, else override the information in the sample with this
MIDI note number (Pipe999MIDIPitchFraction is used for specifying the
fraction). Specifying the MIDI note number also resets the pitch
fraction in the sample to 0 unless Pipe999MIDIPitchFraction is also specified.
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term>Pipe999MIDIPitchFraction</term>
    <listitem>
      <para>
	(float 0 - 100, default: -1) If -1, use pitch information from the
	Pipe999 sample, else override the information in the sample with this
	value. Describes the actual existing pitch fraction in cent over the
	normal (440hz equal) tone of the midi key specified in the sample or in
	the Pipe999MIDIKeyNumber. This setting (together with
	Pipe999MIDIKeyNumber) is used when retuning to other temperaments.
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term>Pipe999PitchCorrection</term>
    <listitem>
      <para>
	(float -1800 - 1800, default: 0) Correction factor in cent for the
	pitch specified in the sample in addition to PitchCorrection of
	the whole organ, of the windchest and of the rank. This setting is used
	to adjust tuning while in other temperaments (than original). A positive
	value raise the pitch, a negative value lowers the pitch.
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
          <term>Pipe999AcceptsRetuning</term>
          <listitem>
            <para>
(boolean, default: rank setting) Determines if the pipe will be retuned
according to the current temperament. Retuning should be only disabled
for sound effects.
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999WindchestGroup</term>
          <listitem>
            <para>
(integer 1 - number of windchests, default: rank windchest) specify
the windchest, on which this pipe is placed.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999MinVelocityVolume</term>
          <listitem>
            <para>
(float 0 - 1000, default: corresponding rank setting) Linear amplitude
scale factor at low velocity applied to the pipe. 100 means no change.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999MaxVelocityVolume</term>
          <listitem>
            <para>
(float 0 - 1000, default: corresponding rank setting) Linear amplitude
scale factor at high velocity applied to the pipe. 100 means no
change.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999AttackCount</term>
          <listitem>
            <para>
(integer 0 - 100, default: 0) Number of additional attack samples
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Attack999</term>
          <listitem>
            <para>
(string, required) Relative path to the sample WAV file.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Attack999LoadRelease</term>
          <listitem>
            <para>
(boolean, default: reverse of percussive setting) If true, the release
part is loaded.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Attack999AttackVelocity</term>
          <listitem>
            <para>
(integer 0 - 127, default: 0) minimum velocity to use this attack sample.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Attack999MaxTimeSinceLastRelease</term>
          <listitem>
            <para>
(integer -1 - 100000, default: -1) maximum time since the last release of
the key to be able to use that attack. -1 means infinite.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Attack999IsTremulant</term>
          <listitem>
            <para>
(integer -1 - 1, default: -1) 1 means, that it is played, if the associated
wave-based tremulant is on. 0 means, that it is played, if the
associated wave-based tremulant is off. -1 means, that it not affected
by a wave-based tremulant.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Attack999MaxKeyPressTime</term>
          <listitem>
            <para>
(integer -1 - 100000, default: -1) Up to this time value in ms, the
release sample is chosen. -1 means infinite.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Attack999AttackStart</term>
          <listitem>
            <para>
(integer 0 - 158760000, default: 0) Allows to override the start of the
sample. This option is specified in samples.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Attack999CuePoint</term>
          <listitem>
            <para>
(integer -1 - 158760000, default: -1) Allows to override the cue point for
the release. -1 means use from the wave file. This option is specified
in samples.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Attack999ReleaseEnd</term>
          <listitem>
            <para>
(integer -1 - 158760000, default: -1) Allows to override the end of the
release. -1 means play till the end of the wav. This option is
specified in samples.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Attack999LoopCount</term>
          <listitem>
            <para>
(integer 0 - 100, default: 0) Allows to override the loops in the WAV file.
0 means use loops from the wave file.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Attack999Loop999Start</term>
          <listitem>
            <para>
(integer 0 - 158760000, default: 0) Start sample of the loop. The value
must be within the WAV file. This option is specified in samples.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Attack999Loop999End</term>
          <listitem>
            <para>
(integer Pipe999Loop999Start + 1 - 158760000, required if Pipe999LoopCount
is not zero) End sample of the loop. The value must be within the WAV
file. This option is specified in samples.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999ReleaseCount</term>
          <listitem>
            <para>
(integer 0 - 100, default: 0) Number of additional release samples
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Release999</term>
          <listitem>
            <para>
(string, required) Relative path to the sample WAV file.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Release999IsTremulant</term>
          <listitem>
            <para>
(integer -1 - 1, default: -1) 1 means, that it is played, if the associated
wave-based tremulant is on. 0 means, that it is played, if the
associated wave-based tremulant is off. -1 means, that it not affected
by a wave-based tremulant.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Release999MaxKeyPressTime</term>
          <listitem>
            <para>
(integer -1 - 100000, default: -1) Up to this time value in ms, the
release sample is chosen. -1 means infinite.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Release999CuePoint</term>
          <listitem>
            <para>
(integer -1 - 158760000, default: -1) Allows to override the cue point for
the release. -1 means use from the wave file.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Release999ReleaseEnd</term>
          <listitem>
            <para>
(integer -1 - 158760000, default: -1) Allows to override the end of the
release. -1 means play till the end of the wav. This option is
specified in samples.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999LoopCrossfadeLength</term>
          <listitem>
            <para>
	      (integer 0 - 3000, default: 0) Crossfade length in ms between loop
	      end and loop start for all loops loaded from the file specified in
	      the Pipe999 parameter. A cross fade requires enough samples before
	      the start of the loop.
            </para>
            <para>
	      This parameter is not inherited by loops loaded from additional
	      attack files specified in the Pipe999Attack999 parameters
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999Attack999LoopCrossfadeLength</term>
          <listitem>
            <para>
	      (integer 0 - 3000, default: 0) Crossfade length in ms between loop
	      end and loop start for all loops loaded from the file
	      Pipe999Attack999. A cross fade requires enough samples before the
	      start of the loop.
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Pipe999ReleaseCrossfadeLength</term>
          <listitem>
            <para>
	      (integer 0 - 3000, default: 0). 0 means automatic selection.
            </para>
            <para>
	      Crossfade length in ms between loop and the release loaded from
	      the file specified in the Pipe999 parameter or between different
	      attack samples if Pipe999AttackCount > 0.
            </para>
            <para>
	      This parameter is not inherited by the releases loaded from
	      additional attack and release files specified in the
	      Pipe999Attack999 and Pipe999Release999 parameters that should be
	      specified with the
	      Pipe999Attack999ReleaseCrossfadeLength and 
	      Pipe999Release999ReleaseCrossfadeLength parameters.
            </para>
          </listitem>
          <term>Pipe999Attack999ReleaseCrossfadeLength</term>
          <listitem>
            <para>
	      (integer 0 - 3000, default: 0). 0 means automatic selection.
            </para>
            <para>
	      Crossfade length in ms between loop and the release loaded from
	      the file specified in the Pipe999Attack999 parameter.
            </para>
          </listitem>
          <term>Pipe999Release999ReleaseCrossfadeLength</term>
          <listitem>
            <para>
	      (integer 0 - 3000, default: 0). 0 means automatic selection.
            </para>
            <para>
	      Crossfade length in ms between loop and the release loaded from
	      the file specified in the Pipe999Release999 parameter.
            </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Stop objects</title>
      <para>
Stop objects are drawstop objects. A stop consists of a number of ranks. If
the number of ranks is set to zero, the stop contains one rank, which
is defined in the stop section - else it references a list of ranks.
Only the accessible pipes can be triggered from the manual. A stop has
the following additions attributes:
      </para>
      <variablelist>
        <varlistentry>
          <term>NumberOfRanks</term>
          <listitem>
            <para>
(integer 0 - 999, default: 0)
Number of referenced ranks. If zero, one rank definition is included
in the stop section. The lists of references is specified via the
<emphasis>Rank999...</emphasis> settings.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>FirstAccessiblePipeLogicalKeyNumber</term>
          <listitem>
            <para>
(integer 1 - 128, required) The key number on the manual of the first
accessible pipe.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfAccessiblePipes</term>
          <listitem>
            <para>
(integer 1 - 192, required) Number of pipes, that are
playable from the manual starting from the first accessible pipe.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>FirstAccessiblePipeLogicalPipeNumber</term>
          <listitem>
            <para>
(integer 1 - 192, required if NumberOfRanks=0) The number of the first
pipe accessible from the manual. If NumberOfRanks is not 0, this
setting is not necessary.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Rank999</term>
          <listitem>
            <para>
(integer 0 - rank count specified in the organ section, required)
Reference to a rank from the organ section.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Rank999FirstPipeNumber</term>
          <listitem>
            <para>
(integer 1 - number of pipes in the rank, default: 1)
Number of first mapped pipe from the rank
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Rank999PipeCount</term>
          <listitem>
            <para>
(integer 0 - remaining number of pipes in the rank, default: remaining
number of pipes in the rank) Number of pipes mapped from the rank.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Rank999FirstAccessibleKeyNumber</term>
          <listitem>
            <para>
(integer 1 - NumberOfAccessiblePipes, default: 1) Key number offset
(starting with FirstAccessiblePipeLogicalKeyNumber) for the pipe
referenced by Rank999FirstPipeNumber.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Pushbutton objects</title>
      <para>
Pushbuttons are buttons without any state. It is displayed as a piston.
      </para>
    </sect1>
    <sect1>
      <title>Piston objects</title>
      <para>
A piston is a pushbutton which triggers other elements. It contains the
following additional attributes:
      </para>
      <variablelist>
        <varlistentry>
          <term>ObjectType</term>
          <listitem>
            <para>
(string, required) Type of the element to trigger. Value can be STOP,
COUPLER, SWITCH or TREMULANT.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>ManualNumber</term>
          <listitem>
            <para>
(integer first manual index - last manual index, required for stops
and coupler) The manual, to which the referenced object belongs.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>ObjectNumber</term>
          <listitem>
            <para>
(integer, required) Determines the number of the object. Depending on
the object it must be a valid stop/coupler/switch number on the
referenced manual or a valid global tremulant number.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Tremulant objects</title>
      <para>
Tremulants are drawstop objects with the following additional attributes:
      </para>
      <variablelist>
        <varlistentry>
          <term>TremulantType</term>
          <listitem>
            <para>
(enumeration, default: Synth) Type of the tremulant. Valid values are:
Synth (synthesized tremulant) and Wave (tremulant based on different
wave samples).
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
      <para>
Synthesized tremulants have the following attributes:
      </para>
      <variablelist>
        <varlistentry>
          <term>Period</term>
          <listitem>
            <para>
(integer 32 - 44100, required) Period of the tremulant in ms
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>StartRate</term>
          <listitem>
            <para>
(integer 1 - 100, required) Determines the startup time of the tremulant.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>StopRate</term>
          <listitem>
            <para>
(integer 1 - 100, required) Determines the stop time of the tremulant.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>AmpModDepth</term>
          <listitem>
            <para>
(integer 1 - 100, required) Determines, how much the volume will be changed.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Windchest objects</title>
      <para>
Windchest objects represent a windchest on which pipes of ranks are placed.
It has the following attributes:
      </para>
      <variablelist>
        <varlistentry>
          <term>Name</term>
          <listitem>
            <para>
(string, default: implementation dependent) Display name of this
windchest
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfEnclosures</term>
          <listitem>
            <para>
(integer 0 - enclosure count, required) Number of enclosures, which
influence this windchest. The list is specified by the
<emphasis>Enclosure999</emphasis> entries in the windchest section.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfTremulants</term>
          <listitem>
            <para>
(integer 0 - tremulant count, required) Number of tremulants, which
influence this windchest. The list is specified by the
<emphasis>Tremulant999</emphasis> entries in the windchest section.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Enclosure999</term>
          <listitem>
            <para>
(integer 1 - enclosure count, required) Number of an enclosure, which
influences this windchest.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Tremulant999</term>
          <listitem>
            <para>
(integer 1 - tremulant count, required) Number of a tremulant, which
influences this windchest.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>AmplitudeLevel</term>
          <listitem>
            <para>
	      (float 0 - 1000, default: 100) Linear amplitude scale factor in
	      percents applied to the windchest. It is multilied to the
	      AmplitudeLevel value of the Organ section. 100 means no change.
	    </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Gain</term>
          <listitem>
            <para>
	      (float -120 - 40, default: 0) Amplitude scale factor in dB applied
	      to the windchest. It is added to the Gain value of the Organ
	      section. 0 means no change.
	    </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PitchTuning</term>
          <listitem>
            <para>
	      (float -1800 - 1800, default: 0) Retune the windchest by the
	      specified number of cents. It is added to the PitchTuning value of
	      the Organ section. 0 means no change. This setting is used only
	      for the original temperament.
	    </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>PitchCorrection</term>
          <listitem>
            <para>
	      (float -1800 - 1800, default: 0) Correction factor in cent for the
	      pitch of the windchest. It is added to the PitchTuning value of
	      the Organ section. 0 means no change. This setting is used for
	      retuning to other temperaments.
	    </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>TrackerDelay</term>
          <listitem>
            <para>
	      (integer 0 - 10000, default: 0) Delay in miliseconds introduced by
	      the tracker applied to the windchest. It is added to the
	      TrackerDelay value of the Organ section.
	    </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Percussive</term>
          <listitem>
            <para>
	      (boolean, default inherited from the Organ section) If true, the
	      samples are played as is (without any loop/release handling).
	    </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>HasIndependentRelease</term>
          <listitem>
            <para>
	      (boolean, default inherited from the Organ section). If true,
	      releases are played independently of the attacks.
	    </para>
            <para>
	      If HasIndependentRelease is true then Percussive must also be set
	      to true.
	    </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Crescendo objects</title>
      <para>
Crescendo objects represent a crescendo bank. The number of crescendo banks are always 4: from 0 to 3
      </para>
      <variablelist>
        <varlistentry>
          <term>OverrideMode</term>
          <listitem>
            <para>
              (boolean, default: true) The crescendo mode: how the crescendo operates with stops enabled by the user.
            </para>
            <para>true - Override mode</para>
            <para>true - Add mode</para>
            <para>The difference between these modes are described at <link
linkend="crescendoopmodes">Crescendo operational modes</link></para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Additional panels (old format)</title>
      <para>
It is possible to define additional panels. The section is called
<emphasis>Panel999</emphasis> with a number starting from 001. All
panels use the same layout engine as the main panel, therefore the
section includes all display metrics attributes. Additionally it
includes the following attributes:
</para>
      <variablelist>
        <varlistentry>
          <term>Name</term>
          <listitem>
            <para>
(string, required) Name of the panel
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Group</term>
          <listitem>
            <para>
(string, default: empty) If not empty, place it in the submenu with
the specified name, else directly in the panel menu.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfManuals</term>
          <listitem>
            <para>
(integer 1 - number of defined manuals) number of manuals to display on this panel
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>HasPedals</term>
          <listitem>
            <para>
(boolean, required) Includes a manual displayed as pedal
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfSetterElements</term>
          <listitem>
            <para>
(integer 0 - 999, default: 0) Number of
setter elements on the panel. The section of the GUI definitions are
called <emphasis>Panel999SetterElement999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfEnclosures</term>
          <listitem>
            <para>
(integer 0 - number of defined enclosures, required) Number of
enclosures on the panel. The section of the enclosures GUI definitions
are called <emphasis>Panel999Enclosure999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Enclosure999</term>
          <listitem>
            <para>
(valid enclosure number, required) Reference to the enclosure on the
main panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfTremulants</term>
          <listitem>
            <para>
(integer 0 - number of defined tremulants, required) Number of
tremulant on the panel. The section of the tremulants GUI definitions
are called <emphasis>Panel999Tremulant999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Tremulant999</term>
          <listitem>
            <para>
(valid tremulant number, required) Reference to the tremulant on the
main panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfReversiblePistons</term>
          <listitem>
            <para>
(integer 0 - number of defined reversible pistons, required) Number of
reversible pistons on the panel. The section of the reversible pistons
GUI definitions are called
<emphasis>Panel999ReversiblePiston999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>ReversiblePiston999</term>
          <listitem>
            <para>
(valid reversible piston number, required) Reference to the reversible
piston on the main panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfSwitches</term>
          <listitem>
            <para>
(integer 0 - number of defined switches, default: 0) Number of
switches on the panel. The section of the switches GUI definitions are
called <emphasis>Panel999Switchn999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Switch999</term>
          <listitem>
            <para>
(valid switch number, required) Reference to the switch on the main
panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfGenerals</term>
          <listitem>
            <para>
(integer 0 - number of defined generals, required) Number of generals
on the panel. The section of the generals GUI definitions are called
<emphasis>Panel999General999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>General999</term>
          <listitem>
            <para>
(valid general number, required) Reference to the general on the main
panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfDivisionalCouplers</term>
          <listitem>
            <para>
(integer 0 - number of defined divisional couplers, required) Number
of divisional couplers on the panel. The section of the divisional
coupler GUI definitions are called
<emphasis>Panel999DivisionalCoupler999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DivisionalCoupler999</term>
          <listitem>
            <para>
(valid divisional coupler number, required) Reference to the divisional coupler on the
main panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Manual999</term>
          <listitem>
            <para>
(valid manual number, required) Number of the manual to use a
specified manual on the panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfStops</term>
          <listitem>
            <para>
(integer 0 - 999, required) Number of stops on the panel. The
section of the stops GUI definitions are called
<emphasis>Panel999Stop999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Stop999Manual</term>
          <listitem>
            <para>
(valid manual number, required) Reference to the manual of the
stop on the main panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Stop999</term>
          <listitem>
            <para>
(valid stop number, required) Reference to the stop on the
main panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfCouplers</term>
          <listitem>
            <para>
(integer 0 - 999, required) Number of couplers on the panel. The
section of the couplers GUI definitions are called
<emphasis>Panel999Coupler999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Coupler999Manual</term>
          <listitem>
            <para>
(valid manual number, required) Reference to the manual of the
coupler on the main panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Divisional999</term>
          <listitem>
            <para>
(valid coupler number, required) Reference to the divisional on the
main panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfDivisionals</term>
          <listitem>
            <para>
(integer 0 - 999, required) Number of divisionals on the panel. The
section of the divisionals GUI definitions are called
<emphasis>Panel999Divisional999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Divisional999Manual</term>
          <listitem>
            <para>
(valid manual number, required) Reference to the manual of the
divisional on the main panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Divisional999</term>
          <listitem>
            <para>
(valid divisional number, required) Reference to the divisional on the
main panel.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfLabels</term>
          <listitem>
            <para>
(integer 0 - 999, required) Number of labels on the panel. The section
of the label GUI definitions are called
<emphasis>Panel999Label999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfImages</term>
          <listitem>
            <para>
(integer 0 - 999, default: 0) Number of images on the panel. The section
of the image GUI definitions are called
<emphasis>Panel999Image999</emphasis>.
            </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Panels (new format)</title>
      <para>
The section is called
<emphasis>Panel999</emphasis>. <emphasis>Panel000</emphasis> is the
main panel. Additional panels start with number 001. The section
includes the display metrics. Additionally it includes the following
attributes:
</para>
      <variablelist>
        <varlistentry>
          <term>Name</term>
          <listitem>
            <para>
(string, required for non-main panels) Name of the panel
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Group</term>
          <listitem>
            <para>
(string, default: empty, only for non-main panels) If not empty, place
it in the submenu with the specified name, else directly in the panel
menu.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>HasPedals</term>
          <listitem>
            <para>
(boolean, required) Includes a manual displayed as pedal
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfImages</term>
          <listitem>
            <para>
(integer 0 - 999, default: 0) Number of images on the panel. The section
of the image GUI definitions are called
<emphasis>Panel999Image999</emphasis>.
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>NumberOfGUIElements</term>
          <listitem>
            <para>
(integer 0 - 999, required for the main panel, default 0 for any other
panel) Number of elements on the panel. The section of the GUI
elements are called <emphasis>Panel999Element999</emphasis>.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>GUI elements</title>
      <para>
The attribute <emphasis>Type</emphasis> can be one of the following
values:
      </para>
      <variablelist>
        <varlistentry>
          <term>Divisional</term>
          <listitem>
            <para>
The section contains the GUI attributes of a divisional. Additionally
it includes the following attributes:
            </para>
            <variablelist>
              <varlistentry>
                <term>Manual</term>
                <listitem>
                  <para>
(valid manual number, required) Number of the manual.
                  </para>
                </listitem>
              </varlistentry>
              <varlistentry>
                <term>Divisional</term>
                <listitem>
                  <para>
(valid divisional number, required) Number of the divisional on the
manual.
                  </para>
                </listitem>
              </varlistentry>
            </variablelist>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Coupler</term>
          <listitem>
            <para>
The section contains the GUI attributes of a coupler. Additionally
it includes the following attributes:
            </para>
            <variablelist>
              <varlistentry>
                <term>Manual</term>
                <listitem>
                  <para>
(valid manual number, required) Number of the manual.
                  </para>
                </listitem>
              </varlistentry>
              <varlistentry>
                <term>Coupler</term>
                <listitem>
                  <para>
(valid coupler number, required) Number of the coupler on the
manual.
                  </para>
                </listitem>
              </varlistentry>
            </variablelist>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Stop</term>
          <listitem>
            <para>
The section contains the GUI attributes of a stop. Additionally
it includes the following attributes:
            </para>
            <variablelist>
              <varlistentry>
                <term>Manual</term>
                <listitem>
                  <para>
(valid manual number, required) Number of the manual.
                  </para>
                </listitem>
              </varlistentry>
              <varlistentry>
                <term>Stop</term>
                <listitem>
                  <para>
(valid stop number, required) Number of the stop on the
manual.
                  </para>
                </listitem>
              </varlistentry>
            </variablelist>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Enclosure</term>
          <listitem>
            <para>
The section contains the GUI attributes of an enclosure. Additionally
it includes the following attributes:
            </para>
            <variablelist>
              <varlistentry>
                <term>Enclosure</term>
                <listitem>
                  <para>
(valid enclosure number, required) Number of the enclosure.
                  </para>
                </listitem>
              </varlistentry>
            </variablelist>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Tremulant</term>
          <listitem>
            <para>
The section contains the GUI attributes of a tremulant. Additionally
it includes the following attributes:
            </para>
            <variablelist>
              <varlistentry>
                <term>Tremulant</term>
                <listitem>
                  <para>
(valid tremulant number, required) Number of the tremulant.
                  </para>
                </listitem>
              </varlistentry>
            </variablelist>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DivisionalCoupler</term>
          <listitem>
            <para>
The section contains the GUI attributes of a divisional coupler. Additionally
it includes the following attributes:
            </para>
            <variablelist>
              <varlistentry>
                <term>DivisionalCoupler</term>
                <listitem>
                  <para>
(valid divisional coupler number, required) Number of the divisional coupler.
                  </para>
                </listitem>
              </varlistentry>
            </variablelist>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>General</term>
          <listitem>
            <para>
The section contains the GUI attributes of a general. Additionally
it includes the following attributes:
            </para>
            <variablelist>
              <varlistentry>
                <term>General</term>
                <listitem>
                  <para>
(valid general number, required) Number of the general.
                  </para>
                </listitem>
              </varlistentry>
            </variablelist>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>ReversiblePiston</term>
          <listitem>
            <para>
The section contains the GUI attributes of a reversible piston. Additionally
it includes the following attributes:
            </para>
            <variablelist>
              <varlistentry>
                <term>ReversiblePiston</term>
                <listitem>
                  <para>
(valid reversible piston number, required) Number of the reversible piston.
                  </para>
                </listitem>
              </varlistentry>
            </variablelist>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Switch</term>
          <listitem>
            <para>
The section contains the GUI attributes of a switch. Additionally
it includes the following attributes:
            </para>
            <variablelist>
              <varlistentry>
                <term>Switch</term>
                <listitem>
                  <para>
(valid switch number, required) Number of the switch.
                  </para>
                </listitem>
              </varlistentry>
            </variablelist>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Label</term>
          <listitem>
            <para>
The section contains the GUI attributes of a label.
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Manual</term>
          <listitem>
            <para>
The section contains the GUI attributes of a manual. Additionally
it includes the following attributes:
            </para>
            <variablelist>
              <varlistentry>
                <term>Manual</term>
                <listitem>
                  <para>
(valid manual number, required) Number of the manual.
                  </para>
                </listitem>
              </varlistentry>
            </variablelist>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Any setter element type</term>
          <listitem>
            <para>
See the setter element section for further description.
            </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
  </chapter>
  <chapter id="organ_package_format">
    <title>The GrandOrgue organ package format</title>
    <sect1>
      <title>General information</title>
      <para>
An organ package is a ZIP file using only the
<emphasis>STORED</emphasis> compression [= compression level 0] with
the extension <emphasis>orgue</emphasis>. It may use the ZIP64
extensions - no other extensions are allowed. It is possible to store
file names containing directories.
      </para>
      <para>
The ID of an organ package is its SHA1 sum with all letter converted
to upper case.
      </para>
      <para>
Each organ package must contain an index file named
<emphasis>organindex.ini</emphasis>. This file lists all contained
organs as well as any other organ package they might depend on.
      </para>
      <para>
Referenced files are only loaded from the organ package - not from the
file system. If a file is missing in the main organ package, it will
search <emphasis>Dependency001</emphasis>, then
<emphasis>Dependency002</emphasis> and so on.
      </para>
      <para>
Use wavpack to compress samples. Use PNG for lossless compression of
images.
      </para>
    </sect1>
    <sect1>
      <title>Index file specification</title>
      <para>
It has the same syntax rules as an organ definition file. The
<emphasis>General</emphasis> section has the following elements:
      </para>
      <variablelist>
        <varlistentry>
          <term>Title</term>
          <listitem>
            <para>
(string, required) Name of the organ package
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>OrganCount</term>
          <listitem>
            <para>
(integer 0 - 100, required) Number of organs installed by this
package. The organs are defined in a section named
<emphasis>Organ999</emphasis>.
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>DepenencyCount</term>
          <listitem>
            <para>
(integer 0 - 100, default: 0) Number of organs packages required by this
organ package. The dependencies are defined in a section named
<emphasis>Dependency999</emphasis>.
            </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Dependency section</title>
      <para>
The section has the following elements:
      </para>
      <variablelist>
        <varlistentry>
          <term>PackageID</term>
          <listitem>
            <para>
(string, required) ID of the package file, that should be searched for
missing files.
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>Title</term>
          <listitem>
            <para>
(string, required) Name of the package file.
            </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
    <sect1>
      <title>Organ section</title>
      <para>
This section has the following elements:
      </para>
      <variablelist>
        <varlistentry>
          <term>Filename</term>
          <listitem>
            <para>
(string, required) Filename of organ definition file in the organ
package.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>ChurchName</term>
          <listitem>
            <para>
(string, required) Name of the organ/church. This setting must match
the organ definition file.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>OrganBuilder</term>
          <listitem>
            <para>
(string, required) informational text displayed in the property
dialog. This setting must match the organ definition file.
     </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term>RecordingDetails</term>
          <listitem>
            <para>
(string, required) informational text displayed in the property
dialog. This setting must match the organ definition file.
     </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </sect1>
  </chapter>
  <chapter>
    <title>Technical Support</title>
    <indexterm>
      <primary>Technical Support</primary>
    </indexterm>
    <para>
GrandOrgue is an open source project distributed under the GNU General
Public License. For information, comments, questions, or problems,
please visit the project pages on GitHub.
    </para>
  </chapter>
  <chapter>
    <title>History</title>
    <indexterm>
      <primary>History</primary>
    </indexterm>
    <para>
GrandOrgue is a project based on a previous GNU GPL project with a
very similar name that that has been discontinued.
    </para>
  </chapter>
  <appendix>
    <title>Short octave</title>
    <simpara>GrandOrgue can use three different methods to make a short octave keyboard:</simpara>
    <itemizedlist>
      <listitem>
        <simpara><emphasis>Tie samples to keys</emphasis></simpara>
        <simpara>This is the build scheme:</simpara>
        <itemizedlist>
          <listitem><simpara>The keyboard defines e.g. 45 keys (full compass: 49)</simpara></listitem>
          <listitem><simpara>The first accessible key on the physical keyboard is low E</simpara></listitem>
          <listitem><simpara>The first sample (Pipe001) refers to low C (read: press low E, hear low C)</simpara></listitem>
          <listitem><simpara>The second sample (Pipe002) refers to low F (read: press low F, hear low F)</simpara></listitem>
          <listitem><simpara>The third sample (Pipe003) refers to low D (read: press low F#, hear low D)</simpara></listitem>
          <listitem><simpara>The fourth sample (Pipe004) refers to low G (read: press low G, hear low G)</simpara></listitem>
          <listitem><simpara>The fifth sample (Pipe005) refers to low E (read: press low G#, hear low E)</simpara></listitem>
          <listitem><simpara>From the sixth sample and upwards, the keyboard layout is "normal"</simpara></listitem>
        </itemizedlist>
        <para>
          The pipe layout to the keys being hardwired, many useful features which expect 12-note octaves are broken in the low octave:
          <itemizedlist>
            <listitem><simpara>Octave and suboctave couplers (Even if this feature is unlikely when reproducing old organs)</simpara></listitem>
            <listitem><simpara>Bass and melody couplers</simpara></listitem>
            <listitem><simpara>Tuning to other temperaments</simpara></listitem>
          </itemizedlist>
        </para>
        <simpara>
This method should be considered as legacy and used only for backward
compatibility with Hauptwerk&#8482; version 1 sample sets. The preferred method
for designing a short octave keyboard is through a key mapping (see <link
linkend="midikeyentry">MIDIKey999</link>) and below.
        </simpara>
      </listitem>
      <listitem>
        <simpara><emphasis>MIDI setting: 9x Note short octave at low key</emphasis></simpara>
        <simpara>
Use this setting to simulate a short octave keyboard when the Organ Definition
File only provides a full compass keyboard. GrandOrgue renders sound as if the
keyboard were fitted with a short octave, but the visual feedback is that of a
full compass keyboard (e.g. press low E and the keyboard image in the GUI
displays a depressed low C).
        </simpara>
        <simpara />
      </listitem>
      <listitem>
        <simpara><emphasis>MIDI mapping on full compass</emphasis></simpara>
        <para>This is the build scheme:
          <itemizedlist>
            <listitem><simpara>The keyboard defines e.g. 49 keys, full compass</simpara></listitem>
            <listitem><simpara>The first accessible key on the physical keyboard is low C</simpara></listitem>
            <listitem><simpara><emphasis>Pipe999</emphasis> entries refer to all pipes starting a low C, as usual</simpara><simpara/></listitem>
            <listitem><simpara>Configure the GUI:</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="150px"/>
                  <colspec colname="c2" colsep="0" rowsep="0"/>
                  <tbody>
                    <row valign="top">
                      <entry>DisplayKeys=45</entry>
                      <entry>Display only 45 keys</entry>
                    </row>
                    <row valign="top">
                      <entry>DisplayFirstNote=40</entry>
                      <entry>The fist displayed key is low E</entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
              <simpara />
            </listitem>
            <listitem><simpara>Add <emphasis>MIDIKey999</emphasis> entries.</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="150px"/>
                  <colspec colname="c2" colsep="0" rowsep="0"/>
                  <tbody>
                    <row valign="top">
                      <entry>MIDIKey036=0</entry>
                      <entry>Disable low C</entry>
                    </row>
                    <row valign="top">
                      <entry>MIDIKey037=0</entry>
                      <entry>Disable low C#</entry>
                    </row>
                    <row valign="top">
                      <entry>MIDIKey038=0</entry>
                      <entry>Disable low D</entry>
                    </row>
                    <row valign="top">
                      <entry>MIDIKey039=0</entry>
                      <entry>Disable low D#</entry>
                    </row>
                    <row valign="top">
                      <entry>MIDIKey040=36</entry>
                      <entry>Map physical low E to sound low C</entry>
                    </row>
                    <row valign="top">
                      <entry>MIDIKey041=41</entry>
                      <entry>Map physical low F to sound low F</entry>
                    </row>
                    <row valign="top">
                      <entry>MIDIKey042=38</entry>
                      <entry>Map physical low F# to sound low D</entry>
                    </row>
                    <row valign="top">
                      <entry>MIDIKey043=43</entry>
                      <entry>Map physical low G to sound low G</entry>
                    </row>
                    <row valign="top">
                      <entry>MIDIKey044=40</entry>
                      <entry>Map physical low G# to sound low E</entry>
                    </row>
                    <row valign="top">
                      <entry>MIDIKey045=45</entry>
                      <entry>Map physical low A to sound low A. From this key up to the top end of the keyboard, the mapping is usual and can be omitted. </entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
              <para />
            </listitem>
            <listitem><simpara>Add <link linkend="displaykeyentry">DisplayKey999</link> entries to tie GUI keys to MIDI note numbers:</simpara>
              <informaltable frame="none">
                <tgroup cols="2">
                  <colspec colname="c1" colsep="0" rowsep="0" colwidth="150px"/>
                  <colspec colname="c2" colsep="0" rowsep="0"/>
                  <tbody>
                    <row valign="top">
                      <entry>DisplayKey001=36</entry>
                      <entry>1st Key is depressed in the GUI when MIDI note 36 (low C) is received</entry>
                    </row>
                    <row valign="top">
                      <entry>DisplayKey002=41</entry>
                      <entry>2nd Key is depressed in the GUI when MIDI note 41 (low F) is received</entry>
                    </row>
                    <row valign="top">
                      <entry>DisplayKey003=38</entry>
                      <entry>3rd Key is depressed in the GUI when MIDI note 38 (low D) is received</entry>
                    </row>
                    <row valign="top">
                      <entry>DisplayKey004=43</entry>
                      <entry>4th Key is depressed in the GUI when MIDI note 43 (low G) is received</entry>
                    </row>
                    <row valign="top">
                      <entry>DisplayKey005=40</entry>
                      <entry>5th Key is depressed in the GUI when MIDI note 40 (low E) is received</entry>
                    </row>
                    <row valign="top">
                      <entry>DisplayKey006=45</entry>
                      <entry>6th Key is depressed in the GUI when MIDI note 45 (low A) is received. From this key up to the top end of the keyboard, the mapping is usual and can be omitted.
                      </entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>
            </listitem>
          </itemizedlist>
          <note>
            <simpara>
When sampling a real-world organ, missing samples in the low octave need to be
generated to get a complete low octave. If this is not done, holes will appear
in the low octave if the keyboard is converted to full compass using the
<link linkend="N9xnoteWOmap">9x Note without map</link> MIDI setting.
            </simpara>
          </note>
        </para>
      </listitem>
    </itemizedlist>
  </appendix>
  <!--
  <appendix>
              <informaltable>
                <tgroup cols="2">
                  <tbody>
                    <row valign="top">
                      <entry valign="top">9x Note</entry>
                      <entry valign="top">
                        <simpara>When the message sequence is NoteOn ; NoteOff or NoteOn w/ velocity=0.</simpara>
                        <simpara>
The lower limit is <emphasis role="bold">always</emphasis> rendered as 0. The upper limit is <emphasis role="bold">always</emphasis> rendered as 1, whatever the actual velocity values.
                        </simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>9x Note On Toggle</entry>
                      <entry>
                        <simpara>When the message sequence is NoteOn ; NoteOn.</simpara>
                        <simpara>The upper limit is <emphasis role="bold">always</emphasis> rendered as 1, whatever the actual velocity value.</simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>9x Note Off Toggle</entry>
                      <entry>When the message sequence is NoteOff or NoteOn w/ velocity=0; NoteOff or NoteOn w/ velocity=0.</entry>
                    </row>
                    <row valign="top">
                      <entry>Bx Controller</entry>
                      <entry>
                        <simpara>When the message sequence is Bn Controller# &lt;high value&gt; ; Bn Controller# &lt;low value&gt;.</simpara>
                        <simpara>
The lower limit is <emphasis role="bold">always</emphasis> rendered as 0. The
upper limit is <emphasis role="bold">always</emphasis> rendered as 1, whatever
the actual controller values.
                        </simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>Bx Controller On Toggle</entry>
                      <entry>
                        <simpara>When the message sequence is Bn Controller# value ; Bn Controller# same value.</simpara>
                        <simpara>The upper limit is <emphasis role="bold">always</emphasis> rendered as 1, whatever the actual controller value.</simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>Bx Controller Off Toggle</entry>
                      <entry>
                        When the message sequence is Bn Controller# &lt;0&gt; ; Bn Controller# &lt;0&gt;.
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>Cx Program Change</entry>
                      <entry>
                        When the message sequence is Cn &lt;Program#&gt; ; Cn &lt;same Program#&gt;.
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>RPN</entry>
                      <entry>
                        <simpara>
When the message sequence is Bn 0x64 &lt;value1&gt; [Bn 0x65 &lt;value2&gt;] Bn
0x06 &lt;value3&gt; ; [Bn 0x64 &lt;value1&gt; [Bn 0x65 &lt;value2&gt;]] Bn 0x06
&lt;value4&gt;.
                        </simpara>
                        <simpara>
The lower limit is <emphasis role="bold">always</emphasis> rendered as 0. The
upper limit is <emphasis role="bold">always</emphasis> rendered as 1, whatever
the actual controller values.
                        </simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>NRPN</entry>
                      <entry>
                        <simpara>
When the message sequence is Bn 0x63 &lt;value1&gt; [Bn 0x62 &lt;value2&gt;] Bn
0x06 &lt;value3&gt; ; [Bn 0x63 &lt;value1&gt; [Bn 0x62 &lt;value2&gt;]] Bn 0x06
&lt;value4&gt;.
                        </simpara>
                        <simpara>
The lower limit is <emphasis role="bold">always</emphasis> rendered as 0. The
upper limit is <emphasis role="bold">always</emphasis> rendered as 1, whatever
the actual controller values.
                        </simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>RPN On Toggle</entry>
                      <entry>
When the message sequence is Bn 0x64 &lt;value1&gt; [Bn 0x65 &lt;value2&gt;] Bn
0x06 &lt;<emphasis>value3</emphasis>&gt; ; [Bn 0x64 &lt;value1&gt; [Bn 0x65
&lt;value2&gt;]] Bn 0x06 &lt;<emphasis>value3</emphasis>&gt;.
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>RPN Off Toggle</entry>
                      <entry>
When the message sequence is Bn 0x64 &lt;value1&gt; [Bn 0x65 &lt;value2&gt;] Bn
0x06 &lt;0&gt; ; [Bn 0x64 &lt;value1&gt; [Bn 0x65
&lt;value2&gt;]] Bn 0x06 &lt;0&gt;.
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>NRPN On Toggle</entry>
                      <entry>
When the message sequence is Bn 0x62 &lt;value1&gt; [Bn 0x63 &lt;value2&gt;] Bn
0x06 &lt;<emphasis>value3</emphasis>&gt; ; [Bn 0x62 &lt;value1&gt; [Bn 0x63
&lt;value2&gt;]] Bn 0x06 &lt;<emphasis>value3</emphasis>&gt;.
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>NRPN Off Toggle</entry>
                      <entry>
When the message sequence is Bn 0x62 &lt;value1&gt; [Bn 0x63 &lt;value2&gt;] Bn
0x06 &lt;0&gt; ; [Bn 0x62 &lt;value1&gt; [Bn 0x63
&lt;value2&gt;]] Bn 0x06 &lt;0&gt;.
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>Ctrl Change Bitfield</entry>
                      <entry>
When the message sequence is Bn Controller# &lt;bit <emphasis>n</emphasis>
raised&gt; ; Bn Controller# &lt;bit <emphasis>n</emphasis> cleared&gt;.
E.g. Bn Ctrl# 64 ; Bn Ctrl# 0
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>Bx Ctrl Change Fixed Value</entry>
                      <entry>
                        <simpara>
When the message sequence is Bn Controller# &lt;value&gt; ; Bn Controller#
&lt;value - 64&gt;. &lt;value&gt; is in the range [64, 127].
                        </simpara>
                        <simpara>
Remember that this setting is aimed at Ahlborn&#8482; organs. If the stop is
not properly detected, kindly report the organ model and its MIDI chart to have
the detection algorithm updated.
                        </simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>Bx Ctrl Change Fixed On Value Toggle</entry>
                      <entry>
                        <simpara>
When the message sequence is Bn Controller# &lt;value&gt; ; Bn Controller#
&lt;same value&gt;. &lt;value&gt; is in the range [64, 127].
                        </simpara>
                        <simpara>
Undetectable. It is always detected as <emphasis>Bx Controller On Toggle</emphasis>.
                        </simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>Bx Ctrl Change Fixed Off Value Toggle</entry>
                      <entry>
                        <simpara>
When the message sequence is Bn Controller# &lt;value&gt; ; Bn Controller#
&lt;same value&gt;. &lt;value&gt; is in the range [0, 63].
                        </simpara>
                        <simpara>
Undetectable. It is always detected as <emphasis>Bx Controller On Toggle</emphasis>.
                        </simpara>
                      </entry>
                    </row>
                    <row valign="top">
                      <entry>Sys Ex Johannus</entry>
                      <entry>
When the message sequence is 0xF0 0x00 0x4A 0x4F 0x48 0x41 0x53 &lt;value&gt; 0xF7. &lt;value&gt; is in the range [0, 127].
                      </entry>
                    </row>
                  </tbody>
                </tgroup>
              </informaltable>

  </appendix>
  -->
</book>
<!--
 vim: ts=2 sw=2 et 
-->
