Parameters
6 · Parameters, Ranges & Values
← Effects · Manual index · Next: Patch Management →
This chapter is the reference for values: the CV conventions, the scaling math, and the
complete table of parameter IDs the engine exposes (gdvp_param_id_t in
gdvp_parameter_bridge.h). For an alphabetical lookup see the Parameter Index.
6.1 The CV convention
Almost every continuous parameter is a 14-bit control value: integer 0–16383.
- Unipolar parameters (cutoff, gain, amplitude, rate, level…):
0= minimum,16383= maximum. - Bipolar parameters (pitch bend, modulation offsets, pan):
8192= centre/zero, below is negative, above is positive.
The engine speaks 14 bits because that is high-resolution MIDI's resolution; a 7-bit MIDI CC is
expanded to 14-bit on entry (see MIDI 14-bit). The UI knobs and the .gvp
file use the same 14-bit currency, so a value is portable between knob, file and MIDI.
A few discrete parameters break the mould: enums (waveform 0–5, filter mode 0–3, slope
0–3), booleans (mute, saturation, pan law), and the detune field which is a signed 8-bit
trim (±128 ≈ ±1 semitone). Voice-allocation params (glide, unison, arp…) are UI-space 0–255
or small enums, not 14-bit CV — see Performance.
6.2 Scaling math you can rely on
All integer, all deterministic (CR-001). The conversions that affect what you hear:
- Pitch:
128 CV = 1 semitone,1536 CV = 1 octave. A 14-bit pitch CV spans 128 semitones, centre8192. (Concepts §1.3.) - Envelope time CV → rate: inverted (
0=fastest,16383=slowest) then x⁶ expansion, with a +1 floor so it can't hang. (Envelope §time.) - Filter cutoff CV → coefficient index: x³ perceptual curve so the sweep sounds even. (Filter §cutoff.)
- LFO rate CV → increment: logarithmic via LUT. (LFO.)
- Sustain CV → amplitude: 14-bit
0–16383expanded to 16-bit0–65535by bit replication (no division). (Envelope.)
You don't compute these — you turn a knob and the engine applies the curve — but they explain why e.g. the bottom of the cutoff range isn't where the audible action is.
6.3 The bifurcated parameter model
This is the single most important idea for controlling GDVP live. Each modulatable parameter has two destinations in the node, written by two different paths:
| Path | Writes | Math | Example |
|---|---|---|---|
| Host / patch (macro) | the base field | absolute unsigned value | UI cutoff knob → base_cutoff_q16 |
| DSP / MIDI / LFO (micro) | the modulation field | bipolar offset centred at 8192 | CC 74 / LFO → mod_cutoff_q16 |
The DSP merges base + modulation at audio rate. The consequences:
- MIDI automation does not fight the knob. Sending CC 74 adds a bipolar offset around the
knob's base position;
8192over MIDI means "no change". Pull below8192to subtract, push above to add. - Patches store the base; performance rides the modulation. Loading a patch sets bases; your controller and LFOs ride on top without overwriting them.
The registry that enforces this (gdvp_param_registry[], gdvp_parameter_registry.h) holds two
handlers per parameter — one for the host path, one for the DSP path — so the math can never drift
between them.
6.4 Complete parameter ID table
Every entry in gdvp_param_id_t. "Domain" notes whether the value is unipolar 14-bit, bipolar
14-bit (centre 8192), or discrete. CC/NRPN columns show the default MIDI mapping where one exists
(full MIDI map).
Core voice
| Parameter ID | Domain | MIDI | Target |
|---|---|---|---|
GDVP_PARAM_PITCH_CV |
pitch 14-bit | (note) | Oscillator pitch — primary |
GDVP_PARAM_PITCH_TARGET |
pitch 14-bit | — | Glide target |
GDVP_PARAM_OSC_PORTAMENTO |
0–255 | — | Glide rate |
GDVP_PARAM_OSC_FM_DEPTH_CV |
unipolar | NRPN 1/0 | Oscillator FM depth |
GDVP_PARAM_OSC_FM_RATIO_CV |
unipolar | NRPN 1/1 | Oscillator FM ratio |
GDVP_PARAM_OSC_AMPLITUDE_CV |
unipolar | — | Oscillator amplitude |
GDVP_PARAM_OSC_DETUNE_CV |
signed ±128 | — | Oscillator detune (±1 semitone) |
GDVP_PARAM_OSC_BASE_PHASE_INC |
— | — | Deprecated (use PITCH_CV) |
Filter
| Parameter ID | Domain | MIDI | Target |
|---|---|---|---|
GDVP_PARAM_FILTER_CUTOFF_CV |
unipolar | CC 74 | Cutoff |
GDVP_PARAM_FILTER_RESONANCE_CV |
unipolar | CC 71 | Resonance |
GDVP_PARAM_FILTER_DRIVE_CV |
unipolar | NRPN 2/0 | Drive |
GDVP_PARAM_FILTER_TYPE_CV |
discrete | NRPN 2/1 | Mode LP/BP/HP/Notch |
GDVP_PARAM_FILTER_SLOPE |
discrete 0–3 | — | 6/12/18/24 dB/oct |
GDVP_PARAM_FILTER_ATTACK_CV |
unipolar | CC 75 | Filter-env attack |
GDVP_PARAM_FILTER_DECAY_CV |
unipolar | CC 76 | Filter-env decay |
GDVP_PARAM_FILTER_SUSTAIN_CV |
unipolar | CC 77 | Filter-env sustain |
GDVP_PARAM_FILTER_RELEASE_CV |
unipolar | CC 78 | Filter-env release |
Amplitude envelope / VCA
| Parameter ID | Domain | MIDI | Target |
|---|---|---|---|
GDVP_PARAM_ENV_ATTACK_RATE |
unipolar | (CC 73) | Envelope attack |
GDVP_PARAM_ENV_DECAY_RATE |
unipolar | — | Envelope decay |
GDVP_PARAM_ENV_SUSTAIN_LEVEL |
unipolar | — | Envelope sustain |
GDVP_PARAM_ENV_RELEASE_RATE |
unipolar | (CC 72) | Envelope release |
GDVP_PARAM_VCA_GAIN_CV |
unipolar | — | VCA gain |
GDVP_PARAM_VCA_SATURATION |
bool | — | VCA tanh enable |
GDVP_PARAM_VCA_MUTE |
bool | — | VCA mute |
Per-oscillator extended (MIS canonical map)
| Parameter ID | Domain | MIDI | Target |
|---|---|---|---|
GDVP_PARAM_OSC1_PITCH_BEND_CV |
bipolar | CC 16 | Osc1 bend offset |
GDVP_PARAM_OSC1_PWM_CV |
unipolar | CC 17 | Osc1 pulse width |
GDVP_PARAM_OSC1_SHAPE_CV |
unipolar | CC 18 | Osc1 waveform morph |
GDVP_PARAM_OSC2_PITCH_BEND_CV |
bipolar | CC 20 | Osc2 bend offset |
GDVP_PARAM_OSC2_PWM_CV |
unipolar | CC 21 | Osc2 pulse width |
GDVP_PARAM_OSC2_SHAPE_CV |
unipolar | CC 22 | Osc2 waveform morph |
GDVP_PARAM_OSC2_DETUNE_CV |
bipolar | CC 23 | Osc2 detune |
GDVP_PARAM_OSC_MIX_CV |
unipolar | CC 24 | Osc1/Osc2 crossfade |
Channel / global modulation
| Parameter ID | Domain | MIDI | Target |
|---|---|---|---|
GDVP_PARAM_MOD_WHEEL_CV |
unipolar | CC 1 | Mod wheel |
GDVP_PARAM_VOLUME_CV |
unipolar | CC 7 | Channel volume |
GDVP_PARAM_PAN_CV |
bipolar | CC 10 | Pan |
MPE / expression
| Parameter ID | Domain | MIDI | Target |
|---|---|---|---|
GDVP_PARAM_PITCH_BEND_CV |
bipolar | (pitch-bend) | MPE pitch bend |
GDVP_PARAM_CHANNEL_PRESSURE_CV |
unipolar | (channel AT) | MPE channel pressure |
GDVP_PARAM_POLY_PRESSURE_CV |
unipolar | (poly AT) | MPE poly pressure |
Mixer
| Parameter ID | Domain | MIDI | Target |
|---|---|---|---|
GDVP_PARAM_MIXER_MASTER_GAIN |
unipolar | CC 87 | Mixer master |
GDVP_PARAM_MIXER_INPUT_GAIN_0…5 |
unipolar | CC 88–90 + | Mixer inputs |
GDVP_PARAM_MIXER_MUTE |
bool | — | Mixer mute |
GDVP_PARAM_PAN_LAW |
bool | — | Panner law |
Exciter
| Parameter ID | Domain | Target |
|---|---|---|
GDVP_PARAM_EXCITER_SOURCE_MODE |
discrete 0–4 | Source family |
GDVP_PARAM_EXCITER_COLOR |
discrete 0–4 | Noise color |
GDVP_PARAM_EXCITER_FLAGS |
bitmask | Bipolar/Tempo/Gaussian/Crush |
GDVP_PARAM_EXCITER_CRUSH_BITS |
small int | Bit-crush depth |
GDVP_PARAM_EXCITER_RATE |
unipolar | S&H rate / density |
GDVP_PARAM_EXCITER_LEVEL |
unipolar | Output level |
GDVP_PARAM_EXCITER_PARAM_A |
unipolar | slew/steps/dust amp |
GDVP_PARAM_EXCITER_DECORR_OFFSET |
unipolar | Per-voice decorrelation |
MIDI columns in parentheses (e.g. CC 72/73, channel/poly aftertouch) indicate controllers the canonical map or MIDI processor names but which are routed via generic sound-controller handling rather than an explicit per-parameter binding in
gdvp_canonical_map.json. The explicit, guaranteed bindings are CC 1, 7, 10, 16–24, 71, 74–78, and NRPN 1/0, 1/1, 2/0, 2/1. See MIDI.
6.5 Discrete value cheat-sheet
| Field | Values |
|---|---|
| Oscillator waveform | 0 Sine · 1 Square · 2 Triangle · 3 Saw · 4 Pulse · 5 Noise |
| Filter mode | 0 LP · 1 BP · 2 HP · 3 Notch |
| Filter slope | 0 = 6 · 1 = 12 · 2 = 18 · 3 = 24 dB/oct |
| Envelope curve (each stage) | 0 Linear · 1 Log · 2 Exp · 3 Sigmoid |
| LFO shape | 0 Sine · 1 Square · 2 Triangle · 3 Saw · 4 S&H · 5 Noise |
| LFO sync | 0 Free · 1 Transport (⚠️ inactive) · 2 Key |
| Panner law | 0 Linear · 1 Constant-power |
| Exciter source | 0 Audio · 1 Particle · 2 S&H step · 3 S&H quant · 4 S&H smooth |
| Exciter color | 0 White · 1 Pink · 2 Red · 3 Blue · 4 Violet |
| Voice mode | 0 Mono · 1 Legato · 2 Poly · 3 Unison · 4 Duo · 5 Chord · 6 Delay · 7 Arp |
← Effects · Manual index · Next: Patch Management →