Additive engine: 5 presets across 3 tiers (Spectral Basics, Formant Play, Harmonic Sculptor, Phase Explorer, Full Spectrum). FM engine: 5 presets across 3 tiers (Simple FM, Bell Tones, Matrix Explorer, Feedback Machine, Full Matrix). Engine-aware preset system: applyPreset() dispatches to C15 groupOverrides or new flat engineParamOverrides depending on active engine. Preset selector dropdown rebuilds on engine switch. URL ?preset param searches all engines.
213 lines
7.5 KiB
JavaScript
213 lines
7.5 KiB
JavaScript
// FM synth presets for NISPS playground
|
|
// Each preset defines which params are active (ML-controlled) and which are
|
|
// muted at safe defaults. Param IDs match faustParamAddress() output from
|
|
// fm-matrix.json (e.g. 'operators_op_1_op1_ratio', 'matrix_m21').
|
|
//
|
|
// 3 tiers of progressive complexity across 5 presets.
|
|
|
|
export const FM_PRESETS = [
|
|
// ======================================================================
|
|
// TIER 1 — Beginner (~12-15 active params)
|
|
// ======================================================================
|
|
{
|
|
id: 'fm-1',
|
|
name: '1.1',
|
|
tier: 1,
|
|
description: 'Simple FM — Op1/Op2 ratio+level, m21 mod index, op1 ADSR, master level',
|
|
active: [
|
|
'operators_op_1_op1_ratio',
|
|
'operators_op_1_op1_level',
|
|
'operators_op_2_op2_ratio',
|
|
'operators_op_2_op2_level',
|
|
'matrix_m21',
|
|
'operators_op_1_op1_attack',
|
|
'operators_op_1_op1_decay',
|
|
'operators_op_1_op1_sustain',
|
|
'operators_op_1_op1_release',
|
|
'master_level',
|
|
'master_stereo_spread',
|
|
'master_waveform_blend',
|
|
],
|
|
overrides: {
|
|
'operators_op_1_op1_ratio': { min: 0.15, max: 0.65, curve: 0.5 },
|
|
'operators_op_2_op2_ratio': { min: 0.15, max: 0.65, curve: 0.5 },
|
|
'matrix_m21': { min: 0.0, max: 0.5, curve: 0.4 },
|
|
'operators_op_1_op1_attack': { min: 0.0, max: 0.6, curve: 0.35 },
|
|
'operators_op_1_op1_decay': { min: 0.05, max: 0.5, curve: 0.4 },
|
|
'operators_op_1_op1_sustain': { min: 0.2, max: 0.9, curve: 0.55 },
|
|
'operators_op_1_op1_release': { min: 0.1, max: 0.6, curve: 0.45 },
|
|
'master_level': { min: 0.3, max: 0.85, curve: 0.5 },
|
|
'master_waveform_blend': { min: 0.0, max: 0.5, curve: 0.4 },
|
|
},
|
|
mutedOverrides: {},
|
|
groupCurves: {},
|
|
},
|
|
|
|
{
|
|
id: 'fm-2',
|
|
name: '1.2',
|
|
tier: 1,
|
|
description: 'Bell Tones — Op1-3 ratios+levels, m21+m31 indices, op1 ADSR, fb1, level',
|
|
active: [
|
|
'operators_op_1_op1_ratio',
|
|
'operators_op_1_op1_level',
|
|
'operators_op_2_op2_ratio',
|
|
'operators_op_2_op2_level',
|
|
'operators_op_3_op3_ratio',
|
|
'operators_op_3_op3_level',
|
|
'matrix_m21',
|
|
'matrix_m31',
|
|
'feedback_fb1',
|
|
'operators_op_1_op1_attack',
|
|
'operators_op_1_op1_decay',
|
|
'operators_op_1_op1_sustain',
|
|
'operators_op_1_op1_release',
|
|
'master_level',
|
|
],
|
|
overrides: {
|
|
'operators_op_1_op1_ratio': { min: 0.15, max: 0.55, curve: 0.5 },
|
|
'operators_op_2_op2_ratio': { min: 0.2, max: 0.7, curve: 0.55 },
|
|
'operators_op_3_op3_ratio': { min: 0.2, max: 0.7, curve: 0.55 },
|
|
'matrix_m21': { min: 0.0, max: 0.4, curve: 0.35 },
|
|
'matrix_m31': { min: 0.0, max: 0.35, curve: 0.3 },
|
|
'feedback_fb1': { min: 0.0, max: 0.4, curve: 0.3 },
|
|
'operators_op_1_op1_attack': { min: 0.0, max: 0.5, curve: 0.3 },
|
|
'operators_op_1_op1_decay': { min: 0.1, max: 0.6, curve: 0.45 },
|
|
'operators_op_1_op1_sustain': { min: 0.1, max: 0.7, curve: 0.45 },
|
|
'operators_op_1_op1_release': { min: 0.15, max: 0.7, curve: 0.5 },
|
|
'master_level': { min: 0.3, max: 0.8, curve: 0.5 },
|
|
},
|
|
mutedOverrides: {},
|
|
groupCurves: {},
|
|
},
|
|
|
|
// ======================================================================
|
|
// TIER 2 — Intermediate (~25-30 active params)
|
|
// ======================================================================
|
|
{
|
|
id: 'fm-3',
|
|
name: '2.1',
|
|
tier: 2,
|
|
description: 'Matrix Explorer — all 4 op ratios+levels, 6 cross-mod indices, all 4 ADSRs, LFO, level',
|
|
active: [
|
|
// All 4 operator ratios + levels
|
|
'operators_op_1_op1_ratio',
|
|
'operators_op_1_op1_level',
|
|
'operators_op_2_op2_ratio',
|
|
'operators_op_2_op2_level',
|
|
'operators_op_3_op3_ratio',
|
|
'operators_op_3_op3_level',
|
|
'operators_op_4_op4_ratio',
|
|
'operators_op_4_op4_level',
|
|
// 6 cross-modulation indices (half the matrix)
|
|
'matrix_m21',
|
|
'matrix_m31',
|
|
'matrix_m41',
|
|
'matrix_m32',
|
|
'matrix_m42',
|
|
'matrix_m43',
|
|
// All 4 operator ADSRs (op1 only for now — full for intermediate)
|
|
'operators_op_1_op1_attack',
|
|
'operators_op_1_op1_decay',
|
|
'operators_op_1_op1_sustain',
|
|
'operators_op_1_op1_release',
|
|
'operators_op_2_op2_attack',
|
|
'operators_op_2_op2_decay',
|
|
'operators_op_2_op2_sustain',
|
|
'operators_op_2_op2_release',
|
|
// LFO
|
|
'global_lfo_rate',
|
|
'global_lfo_depth',
|
|
'global_lfo_waveform',
|
|
// Master
|
|
'master_level',
|
|
'master_stereo_spread',
|
|
],
|
|
overrides: {
|
|
'matrix_m21': { min: 0.0, max: 0.5, curve: 0.4 },
|
|
'matrix_m31': { min: 0.0, max: 0.45, curve: 0.35 },
|
|
'matrix_m41': { min: 0.0, max: 0.4, curve: 0.35 },
|
|
'matrix_m32': { min: 0.0, max: 0.4, curve: 0.35 },
|
|
'matrix_m42': { min: 0.0, max: 0.35, curve: 0.3 },
|
|
'matrix_m43': { min: 0.0, max: 0.35, curve: 0.3 },
|
|
'global_lfo_depth': { min: 0.0, max: 0.6, curve: 0.35 },
|
|
},
|
|
mutedOverrides: {},
|
|
groupCurves: {},
|
|
},
|
|
|
|
{
|
|
id: 'fm-4',
|
|
name: '2.2',
|
|
tier: 2,
|
|
description: 'Feedback Machine — all op params, all 4 feedbacks, 4 key matrix indices, waveform blend, saturation, level',
|
|
active: [
|
|
// All 4 operator ratios + levels
|
|
'operators_op_1_op1_ratio',
|
|
'operators_op_1_op1_level',
|
|
'operators_op_2_op2_ratio',
|
|
'operators_op_2_op2_level',
|
|
'operators_op_3_op3_ratio',
|
|
'operators_op_3_op3_level',
|
|
'operators_op_4_op4_ratio',
|
|
'operators_op_4_op4_level',
|
|
// All 4 feedbacks
|
|
'feedback_fb1',
|
|
'feedback_fb2',
|
|
'feedback_fb3',
|
|
'feedback_fb4',
|
|
// 4 key cross-mod indices
|
|
'matrix_m21',
|
|
'matrix_m31',
|
|
'matrix_m12',
|
|
'matrix_m34',
|
|
// Op1 + Op2 ADSR
|
|
'operators_op_1_op1_attack',
|
|
'operators_op_1_op1_decay',
|
|
'operators_op_1_op1_sustain',
|
|
'operators_op_1_op1_release',
|
|
'operators_op_2_op2_attack',
|
|
'operators_op_2_op2_decay',
|
|
'operators_op_2_op2_sustain',
|
|
'operators_op_2_op2_release',
|
|
// Waveform, saturation, master
|
|
'master_waveform_blend',
|
|
'master_output_saturation',
|
|
'master_level',
|
|
'master_stereo_spread',
|
|
],
|
|
overrides: {
|
|
'feedback_fb1': { min: 0.0, max: 0.6, curve: 0.35 },
|
|
'feedback_fb2': { min: 0.0, max: 0.6, curve: 0.35 },
|
|
'feedback_fb3': { min: 0.0, max: 0.5, curve: 0.3 },
|
|
'feedback_fb4': { min: 0.0, max: 0.5, curve: 0.3 },
|
|
'master_output_saturation': { min: 0.0, max: 0.5, curve: 0.35 },
|
|
'matrix_m21': { min: 0.0, max: 0.5, curve: 0.4 },
|
|
'matrix_m31': { min: 0.0, max: 0.45, curve: 0.35 },
|
|
'matrix_m12': { min: 0.0, max: 0.4, curve: 0.35 },
|
|
'matrix_m34': { min: 0.0, max: 0.4, curve: 0.35 },
|
|
},
|
|
mutedOverrides: {},
|
|
groupCurves: {},
|
|
},
|
|
|
|
// ======================================================================
|
|
// TIER 3 — Advanced (all 55 params)
|
|
// ======================================================================
|
|
{
|
|
id: 'fm-5',
|
|
name: '3.1',
|
|
tier: 3,
|
|
description: 'Full Matrix — all 55 params active, no restrictions',
|
|
active: null, // null = all params active
|
|
overrides: {},
|
|
mutedOverrides: {},
|
|
groupCurves: {},
|
|
},
|
|
];
|
|
|
|
export const FM_PRESET_TIERS = [
|
|
{ tier: 1, label: 'Beginner' },
|
|
{ tier: 2, label: 'Intermediate' },
|
|
{ tier: 3, label: 'Advanced' },
|
|
];
|