Skip to content

Synthstrom Deluge: carry filter & amplitude patch-cable modulations (keytrack, filter envelope, velocity)#161

Open
douglas-carmichael wants to merge 1 commit into
git-moss:mainfrom
douglas-carmichael:add-deluge-filter-keytracking
Open

Synthstrom Deluge: carry filter & amplitude patch-cable modulations (keytrack, filter envelope, velocity)#161
douglas-carmichael wants to merge 1 commit into
git-moss:mainfrom
douglas-carmichael:add-deluge-filter-keytracking

Conversation

@douglas-carmichael

Copy link
Copy Markdown
Contributor

The Deluge stores keyboard tracking, the filter envelope and velocity sensitivity as patch cables under defaultParams. Until now the reader only picked up the amplitude envelope and the static filter cut-off/resonance, so a converted patch lost those modulations - most audibly, a patch with filter keyboard-tracking came out dark in the upper octaves because it could no longer open up as you played higher.

This reads four patch-cable modulations and routes them to the shared model so any creator that supports them can write them:

Deluge patch cable Model property Example destination (Waldorf QPAT)
note -> filter frequency IFilter cutoff key-tracking (new) Filter1Keytrack / Filter2Keytrack (new write)
envelope2 -> filter frequency filter cutoff envelope modulator (ADSR + depth) Filter1Env* + Filter1EnvAmount
velocity -> filter frequency filter cutoff velocity modulator Filter1VeloAmount
velocity -> volume amplitude envelope modulator depth AmpVeloAmount

Notes for review:

  • Model addition: IFilter gains getCutoffKeyTracking() / setCutoffKeyTracking(double) (range [-1..1], 0 = no tracking), implemented in DefaultFilter (the only implementation - field, getter, setter, equals/hashCode). The other three modulations reuse existing model fields.
  • Only Filter1Keytrack/Filter2Keytrack is a new write in WaldorfQpatCreator. It already wrote Filter1EnvAmount, Filter1VeloAmount and AmpVeloAmount, but no reader ever filled those depths, so they were always 0 - they now carry real values.
  • Patch-cable amounts map to a normalized [-1..1] depth via the new DelugeValues.patchAmountToModulationDepth (= amount / 0x3FFFFFE8), kept as the single calibration point.
  • The filter is now read per zone so zones do not share mutable modulators.

Verified end-to-end on a Deluge -> Waldorf Iridium conversion of a sampled pad: the note->lpfFrequency amount 0x0F5C28F0 becomes Filter1Keytrack 0.62 (+24 %), the envelope2->lpfFrequency envelope shape and amount carry across, and velocity->volume becomes AmpVeloAmount +100 %. Confirmed on the hardware - the patch is bright across the keyboard again.

Documentation and CHANGELOG updated; a new limitation note records that effects (reverb / delay / chorus / etc.) are outside the multi-sample model, so a patch that leans on them can sound drier after conversion.

Based on current main (includes #159). Follows up the Synthstrom Deluge support added in #152.

…o QPAT

The Deluge stores keyboard tracking, the filter envelope and velocity
sensitivity as patch cables. Previously only the amplitude envelope and the
static filter cutoff/resonance were read, so converted patches lost these:

- Filter cutoff keyboard tracking (note -> filter frequency): written to the
  Waldorf Quantum/Iridium Filter1Keytrack/Filter2Keytrack (new), so a patch
  keeps its brightness up the keyboard instead of going dark in the upper
  octaves.
- Filter modulation envelope (envelope2 -> filter frequency): its ADSR shape
  and amount now fill the filter cutoff envelope modulator.
- Filter velocity (velocity -> filter frequency): fills the filter cutoff
  velocity modulator.
- Amplitude velocity (velocity -> volume): fills the amplitude envelope
  modulator depth.

The Waldorf QPAT creator already wrote the envelope/velocity amounts (always
zero without a reader to fill them); only Filter1Keytrack/Filter2Keytrack is
a new write. Patch-cable amounts map to a normalized [-1..1] depth via the new
DelugeValues.patchAmountToModulationDepth, the single place to calibrate it.
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