hexter 2.7.0
FB-01 banks load
The Yamaha FB-01 was the last four-operator machine hexter could not read, and the README
has listed it as out of reach for as long as there has been a README. It reads them now.
The FB-01's bank is not the DX7 message under a different format byte, the way the
DX21/DX27/DX100/TX81Z dumps are. It is a message of its own:
- 6363 bytes, holding 48 voices rather than 32
- seven-character names rather than ten
- every value stored as a pair of nibbles, low one first
Each voice is converted the same way a DX100 or TX81Z voice is: the four operators become
four of the DX7's six, wired with whichever DX7 algorithm stands closest, and the other two
stay silent. Envelopes, ratios, detune, feedback, the LFO, level scaling and the name come
across.
The part that would have been silently wrong
Two of the FB-01's values, an operator's level and its sustain, are stored as
attenuation: zero is loudest and the maximum is silence, the opposite way round from
the DX7. They are turned round on the way in.
Read the other way a bank would load without complaint, name its patches correctly, and
every one of them would come out inside out and silent. So besides checking the converted
bytes there is a check that plays a converted voice and compares it against a bank with
every operator wide open. With the inversion removed, that check renders an actual zero.
Every new check was confirmed by removing the behavior it names: both inversions, the
reversed operator storage, the operator enable bits, the signed detune, and the bank
identification, each in turn.
Credit, and a licensing note
The format was read from the FB01 Sound Editor
by Frederic Meslin, which Reaper10 pointed at. That program is GPLv3 and hexter is
GPL-2.0-or-later, so none of its code is here: what was taken is the description of a file
format, which is a fact about the hardware rather than anyone's code. It is credited in
AUTHORS.
Caveats, and a request
Like the TX81Z support, this is built from the format rather than from a real dump. The
FB-01 banks shipping in banks/ are conversions somebody made long ago, not originals, so
they do not exercise any of it. If you have real FB-01 bank files, they would be worth
more to this than any amount of re-reading.
DX7 output is unchanged, byte for byte against 2.5.1.
Also in this release: the engine's sources are listed in three separate builds, and a new
check makes CI fail immediately when they disagree, rather than letting a linker discover
it on a runner half an hour later.