Skip to content

Synthstrom Deluge: keep the loop when the source omits the loop end#160

Open
douglas-carmichael wants to merge 1 commit into
git-moss:mainfrom
douglas-carmichael:fix-deluge-loop-end-default
Open

Synthstrom Deluge: keep the loop when the source omits the loop end#160
douglas-carmichael wants to merge 1 commit into
git-moss:mainfrom
douglas-carmichael:fix-deluge-loop-end-default

Conversation

@douglas-carmichael

Copy link
Copy Markdown
Contributor

A Deluge sample oscillator stores no endLoopPos when the loop runs to the end of the sample — only startLoopPos is written. The detector set the loop end only when endLoopPos was present:

if (loopEnd > 0)
    loop.setEnd (loopEnd);

so in the (common) loop-to-end case the loop end stayed at the model default of −1. Creators then wrote a negative, degenerate loop, and the sound lost its sustain — a looping pad ended abruptly instead of sustaining until the release.

Example

The "R663 A4 Organ Dream Pad" preset (firmware 3.x) has startLoopPos="111218", endSamplePos="164574" and no endLoopPos. Converted to a Waldorf Iridium (QPAT), the sample-map row was:

… loopMode=1  loopStart=0.67578915  loopEnd=-0.00000608 …

loopEnd = −1 / 164574. With the loop start (0.676) past the loop end (~0) the device can't loop, so the sample plays once and stops; the sustaining pad lost its sustain and ended abruptly instead of fading out over its (correctly converted) ~6 s release.

Fix

Default the loop end to the zone/sample end (endSamplePos, falling back to the sample frame count) when endLoopPos is absent. The same preset now writes:

… loopMode=1  loopStart=0.67578915  loopEnd=0.99999392 …

a valid forward loop, and the pad sustains again. Verified end-to-end (Deluge → QPAT).

Follow-up to the Deluge format support (#152); independent of the root-tag read fix (#159).

A Deluge sample oscillator stores no endLoopPos when the loop runs to the
end of the sample. The detector only set the loop end when endLoopPos was
present, so in that case the loop end stayed at the model default of -1.
Creators then wrote a negative, degenerate loop (e.g. the Waldorf QPAT
sample map got a loop end of -1/frames), and the sound lost its sustain -
a looping pad ended abruptly instead of sustaining until the release.

Default the loop end to the zone/sample end when endLoopPos is absent.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant