Skip to content

hexter 2.7.1

Choose a tag to compare

@keithadler keithadler released this 20 Sep 02:48
· 14 commits to master since this release

Activating the plugin now actually resets the engine

A voice keeps its oscillator phase between notes when a patch has key sync switched off.
That is what a DX7 does, and it is right while the synth is playing.

But a host calls the same reset when it activates the plugin, and there it has to mean
start over. It did not. An engine that had already played rendered slightly differently
from a fresh one handed the same work, which meant an instance restored from a saved
session did not sound quite like the one it was saved from.

How it stayed hidden

The check that should have caught it accepted any two renders within two percent of each
other. In the fixed-point engine the difference landed just inside that window. In floating
point it landed just outside.

And nothing ever built the floating-point engine. -DHEXTER_FLOATING_POINT=ON is offered
in the README, no workflow had ever configured it, and so it had been carrying a failing
test that nobody was in a position to see.

What changed

  • Reset clears each voice's oscillator phase and its feedback memory.
  • The state check compares a restored instance against the original sample for sample,
    not by level. Taking the phase clearing back out now fails it in both engines.
  • CI builds and tests both engines, so the floating-point option is no longer something
    that only compiles in theory.

Existing patches are unaffected: DX7 output is still byte for byte what 2.5.1 renders, since
a fresh engine always started from phase zero anyway.