214 lines
7.5 KiB
JavaScript
214 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' },
|
||
|
|
];
|