251 lines
12 KiB
C++
251 lines
12 KiB
C++
#include "FactoryPresets.h"
|
|
|
|
namespace serum
|
|
{
|
|
|
|
namespace
|
|
{
|
|
using P = std::pair<const char*, float>;
|
|
inline P p (const char* id, float v) { return { id, v }; }
|
|
|
|
// Semitones -> normalised coarse value (param range -24..+24).
|
|
inline float coarse (int semitones) { return (float) (semitones + 24) / 48.0f; }
|
|
// Unison count -> normalised value.
|
|
inline float unison (int n) { return (float) (n - 1) / 15.0f; }
|
|
// 6/12/24 dB slope -> normalised value.
|
|
inline float slope (int db) { return db == 6 ? 0.0f : (db == 12 ? 0.5f : 1.0f); }
|
|
// FxType -> normalised value.
|
|
inline float fx (FxType t) { return (float) (int) t / 9.0f; }
|
|
// LFO shape -> normalised value.
|
|
inline float lfoShape (LfoShape s) { return (float) (int) s / 6.0f; }
|
|
|
|
inline ModConnection mod (ModSource s, ModTarget t, float d, bool b = false)
|
|
{
|
|
return { s, t, d, b };
|
|
}
|
|
}
|
|
|
|
const std::vector<FactoryPreset>& getFactoryPresets()
|
|
{
|
|
static const std::vector<FactoryPreset> presets = []
|
|
{
|
|
std::vector<FactoryPreset> v;
|
|
FactoryPreset pr;
|
|
|
|
// 1. Init Saw
|
|
pr = {};
|
|
pr.name = "Init Saw";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 0.0f), p (ids::oscAWtPos, 1.0f),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 0.0f), p (ids::f1Cutoff, 0.75f), p (ids::f1Res, 0.05f), p (ids::f1Slope, 1.0f)
|
|
};
|
|
v.push_back (pr);
|
|
|
|
// 2. Supersaw Stack
|
|
pr = {};
|
|
pr.name = "Supersaw Stack";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 0.0f), p (ids::oscAWtPos, 1.0f),
|
|
p (ids::oscAUnison, unison (7)), p (ids::oscADetune, 0.55f), p (ids::oscASpread, 0.75f), p (ids::oscALevel, 0.85f),
|
|
p (ids::oscBOn, 1.0f), p (ids::oscBWave, 0.0f), p (ids::oscBWtPos, 1.0f),
|
|
p (ids::oscBUnison, unison (5)), p (ids::oscBDetune, 0.45f), p (ids::oscBSpread, 0.6f), p (ids::oscBLevel, 0.55f),
|
|
p (ids::oscBCoarse, coarse (12)),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 0.0f), p (ids::f1Cutoff, 0.68f), p (ids::f1Res, 0.12f), p (ids::f1Slope, 1.0f),
|
|
p (ids::fx1Type, fx (FxType::Chorus)), p (ids::fx1Mix, 0.35f), p (ids::fx1P1, 0.4f), p (ids::fx1P2, 0.4f),
|
|
p (ids::fx2Type, fx (FxType::Reverb)), p (ids::fx2Mix, 0.25f), p (ids::fx2P1, 0.55f)
|
|
};
|
|
v.push_back (pr);
|
|
|
|
// 3. Wobble Bass
|
|
pr = {};
|
|
pr.name = "Wobble Bass";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 9.0f / 9.0f), p (ids::oscAWtPos, 0.6f),
|
|
p (ids::subOn, 1.0f), p (ids::subShape, 0.0f), p (ids::subOct, 0.5f), p (ids::subLevel, 0.6f),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 0.0f), p (ids::f1Cutoff, 0.35f), p (ids::f1Res, 0.35f), p (ids::f1Slope, 1.0f),
|
|
p (ids::lfo1Shape, lfoShape (LfoShape::Square)), p (ids::lfo1Rate, 0.55f),
|
|
p (ids::env1D, 0.35f), p (ids::env1S, 0.8f)
|
|
};
|
|
pr.mods = {
|
|
mod (ModSource::Lfo1, ModTarget::Filter1Cutoff, 0.5f, false),
|
|
mod (ModSource::Env2, ModTarget::Filter1Cutoff, 0.3f, false)
|
|
};
|
|
v.push_back (pr);
|
|
|
|
// 4. Pluck
|
|
pr = {};
|
|
pr.name = "Pluck";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 0.0f), p (ids::oscAWtPos, 0.8f),
|
|
p (ids::env1A, 0.02f), p (ids::env1D, 0.18f), p (ids::env1S, 0.0f), p (ids::env1R, 0.2f),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 0.0f), p (ids::f1Cutoff, 0.7f), p (ids::f1Res, 0.15f), p (ids::f1Slope, 1.0f),
|
|
p (ids::fx1Type, fx (FxType::Delay)), p (ids::fx1Mix, 0.3f), p (ids::fx1P1, 0.45f), p (ids::fx1P2, 0.45f)
|
|
};
|
|
v.push_back (pr);
|
|
|
|
// 5. Electric Keys
|
|
pr = {};
|
|
pr.name = "Electric Keys";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 5.0f / 9.0f), p (ids::oscAWtPos, 0.5f),
|
|
p (ids::oscBOn, 1.0f), p (ids::oscBWave, 5.0f / 9.0f), p (ids::oscBWtPos, 0.4f), p (ids::oscBLevel, 0.4f),
|
|
p (ids::env1D, 0.4f), p (ids::env1S, 0.7f), p (ids::env1R, 0.35f),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 0.0f), p (ids::f1Cutoff, 0.6f), p (ids::f1Res, 0.05f), p (ids::f1Slope, 0.5f),
|
|
p (ids::lfo1Shape, lfoShape (LfoShape::Sine)), p (ids::lfo1Rate, 0.7f)
|
|
};
|
|
pr.mods = { mod (ModSource::Lfo1, ModTarget::Amp, 0.15f, true) };
|
|
v.push_back (pr);
|
|
|
|
// 6. Pad Dreams
|
|
pr = {};
|
|
pr.name = "Pad Dreams";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 8.0f / 9.0f), p (ids::oscAWtPos, 0.7f),
|
|
p (ids::oscAUnison, unison (5)), p (ids::oscADetune, 0.5f), p (ids::oscASpread, 0.8f),
|
|
p (ids::oscBOn, 1.0f), p (ids::oscBWave, 4.0f / 9.0f), p (ids::oscBWtPos, 0.4f), p (ids::oscBLevel, 0.5f),
|
|
p (ids::env1A, 0.5f), p (ids::env1D, 0.5f), p (ids::env1S, 0.9f), p (ids::env1R, 0.7f),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 0.0f), p (ids::f1Cutoff, 0.5f), p (ids::f1Res, 0.05f), p (ids::f1Slope, 0.5f),
|
|
p (ids::fx1Type, fx (FxType::Chorus)), p (ids::fx1Mix, 0.5f), p (ids::fx1P1, 0.3f), p (ids::fx1P2, 0.6f),
|
|
p (ids::fx2Type, fx (FxType::Reverb)), p (ids::fx2Mix, 0.5f), p (ids::fx2P1, 0.75f), p (ids::fx2P2, 0.5f)
|
|
};
|
|
v.push_back (pr);
|
|
|
|
// 7. Lead
|
|
pr = {};
|
|
pr.name = "Lead";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 6.0f / 9.0f), p (ids::oscAWtPos, 1.0f),
|
|
p (ids::oscAUnison, unison (3)), p (ids::oscADetune, 0.3f), p (ids::oscASpread, 0.5f),
|
|
p (ids::oscBOn, 1.0f), p (ids::oscBWave, 1.0f / 9.0f), p (ids::oscBWtPos, 0.5f), p (ids::oscBLevel, 0.4f), p (ids::oscBCoarse, coarse (12)),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 0.0f), p (ids::f1Cutoff, 0.6f), p (ids::f1Res, 0.2f), p (ids::f1Slope, 1.0f),
|
|
p (ids::env2D, 0.4f), p (ids::env2S, 0.4f),
|
|
p (ids::fx1Type, fx (FxType::Distortion)), p (ids::fx1Mix, 0.2f), p (ids::fx1P1, 0.25f),
|
|
p (ids::fx2Type, fx (FxType::Delay)), p (ids::fx2Mix, 0.3f), p (ids::fx2P1, 0.4f), p (ids::fx2P2, 0.4f)
|
|
};
|
|
v.push_back (pr);
|
|
|
|
// 8. Sub Bass
|
|
pr = {};
|
|
pr.name = "Sub Bass";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 9.0f / 9.0f), p (ids::oscAWtPos, 0.0f),
|
|
p (ids::subOn, 1.0f), p (ids::subShape, 0.0f), p (ids::subOct, 0.0f), p (ids::subLevel, 0.9f),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 0.0f), p (ids::f1Cutoff, 0.4f), p (ids::f1Res, 0.05f), p (ids::f1Slope, 1.0f)
|
|
};
|
|
v.push_back (pr);
|
|
|
|
// 9. Vowel Morph
|
|
pr = {};
|
|
pr.name = "Vowel Morph";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 4.0f / 9.0f), p (ids::oscAWtPos, 0.3f),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 5.0f / 6.0f), p (ids::f1Cutoff, 0.5f), p (ids::f1Res, 0.2f),
|
|
p (ids::lfo1Shape, lfoShape (LfoShape::Sine)), p (ids::lfo1Rate, 0.3f)
|
|
};
|
|
pr.mods = { mod (ModSource::Lfo1, ModTarget::OscAWtPos, 0.6f, false) };
|
|
v.push_back (pr);
|
|
|
|
// 10. Glass Bell
|
|
pr = {};
|
|
pr.name = "Glass Bell";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 8.0f / 9.0f), p (ids::oscAWtPos, 0.6f),
|
|
p (ids::env1A, 0.01f), p (ids::env1D, 0.5f), p (ids::env1S, 0.0f), p (ids::env1R, 0.8f),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 0.0f), p (ids::f1Cutoff, 0.8f), p (ids::f1Res, 0.1f), p (ids::f1Slope, 0.5f),
|
|
p (ids::fx1Type, fx (FxType::Reverb)), p (ids::fx1Mix, 0.6f), p (ids::fx1P1, 0.7f), p (ids::fx1P2, 0.35f)
|
|
};
|
|
v.push_back (pr);
|
|
|
|
// 11. Sync Riser
|
|
pr = {};
|
|
pr.name = "Sync Riser";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 2.0f / 9.0f), p (ids::oscAWtPos, 0.2f),
|
|
p (ids::oscAWarp, 3.0f / 7.0f), p (ids::oscAWarpAmt, 0.6f),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 0.0f), p (ids::f1Cutoff, 0.3f), p (ids::f1Res, 0.2f), p (ids::f1Slope, 1.0f),
|
|
p (ids::lfo1Shape, lfoShape (LfoShape::Saw)), p (ids::lfo1Rate, 0.2f)
|
|
};
|
|
pr.mods = { mod (ModSource::Lfo1, ModTarget::OscAWtPos, 0.8f, false) };
|
|
v.push_back (pr);
|
|
|
|
// 12. 8-Bit Blast
|
|
pr = {};
|
|
pr.name = "8-Bit Blast";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 7.0f / 9.0f), p (ids::oscAWtPos, 0.9f),
|
|
p (ids::oscAWarp, 4.0f / 7.0f), p (ids::oscAWarpAmt, 0.5f),
|
|
p (ids::env1D, 0.15f), p (ids::env1S, 0.0f), p (ids::env1R, 0.1f),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 0.0f), p (ids::f1Cutoff, 0.7f), p (ids::f1Res, 0.05f), p (ids::f1Slope, 1.0f)
|
|
};
|
|
v.push_back (pr);
|
|
|
|
// 13. Organ
|
|
pr = {};
|
|
pr.name = "Cathedral Organ";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 5.0f / 9.0f), p (ids::oscAWtPos, 0.8f),
|
|
p (ids::oscBOn, 1.0f), p (ids::oscBWave, 5.0f / 9.0f), p (ids::oscBWtPos, 0.3f), p (ids::oscBLevel, 0.5f), p (ids::oscBCoarse, coarse (12)),
|
|
p (ids::env1A, 0.05f), p (ids::env1S, 1.0f), p (ids::env1R, 0.3f),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 0.0f), p (ids::f1Cutoff, 0.7f), p (ids::f1Res, 0.0f), p (ids::f1Slope, 0.5f),
|
|
p (ids::fx1Type, fx (FxType::Reverb)), p (ids::fx1Mix, 0.35f), p (ids::fx1P1, 0.6f), p (ids::fx1P2, 0.4f)
|
|
};
|
|
v.push_back (pr);
|
|
|
|
// 14. Choir
|
|
pr = {};
|
|
pr.name = "Choir";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 4.0f / 9.0f), p (ids::oscAWtPos, 0.5f),
|
|
p (ids::oscAUnison, unison (9)), p (ids::oscADetune, 0.4f), p (ids::oscASpread, 0.7f),
|
|
p (ids::env1A, 0.45f), p (ids::env1S, 0.85f), p (ids::env1R, 0.6f),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 5.0f / 6.0f), p (ids::f1Cutoff, 0.45f), p (ids::f1Res, 0.15f),
|
|
p (ids::fx1Type, fx (FxType::Chorus)), p (ids::fx1Mix, 0.5f), p (ids::fx1P1, 0.3f), p (ids::fx1P2, 0.7f),
|
|
p (ids::fx2Type, fx (FxType::Reverb)), p (ids::fx2Mix, 0.55f), p (ids::fx2P1, 0.75f), p (ids::fx2P2, 0.5f)
|
|
};
|
|
v.push_back (pr);
|
|
|
|
// 15. Acid
|
|
pr = {};
|
|
pr.name = "Acid";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 0.0f), p (ids::oscAWtPos, 1.0f),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 0.0f), p (ids::f1Cutoff, 0.3f), p (ids::f1Res, 0.6f), p (ids::f1Slope, 1.0f),
|
|
p (ids::env2A, 0.02f), p (ids::env2D, 0.25f), p (ids::env2S, 0.1f)
|
|
};
|
|
pr.mods = { mod (ModSource::Env2, ModTarget::Filter1Cutoff, 0.7f, false) };
|
|
v.push_back (pr);
|
|
|
|
// 16. RAVE Anthem Lead
|
|
pr = {};
|
|
pr.name = "RAVE Anthem Lead";
|
|
pr.params = {
|
|
p (ids::oscAOn, 1.0f), p (ids::oscAWave, 0.0f), p (ids::oscAWtPos, 1.0f),
|
|
p (ids::oscAUnison, unison (4)), p (ids::oscADetune, 0.4f), p (ids::oscASpread, 0.6f), p (ids::oscALevel, 0.85f),
|
|
p (ids::oscBOn, 1.0f), p (ids::oscBWave, 0.0f), p (ids::oscBWtPos, 1.0f),
|
|
p (ids::oscBUnison, unison (4)), p (ids::oscBDetune, 0.35f), p (ids::oscBSpread, 0.5f), p (ids::oscBLevel, 0.5f), p (ids::oscBCoarse, coarse (12)),
|
|
p (ids::env1D, 0.4f), p (ids::env1S, 0.8f), p (ids::env1R, 0.3f),
|
|
p (ids::f1On, 1.0f), p (ids::f1Type, 0.0f), p (ids::f1Cutoff, 0.6f), p (ids::f1Res, 0.15f), p (ids::f1Drive, 0.15f), p (ids::f1Slope, 1.0f),
|
|
p (ids::fx1Type, fx (FxType::Hyper)), p (ids::fx1Mix, 0.35f), p (ids::fx1P1, 0.5f),
|
|
p (ids::fx2Type, fx (FxType::Delay)), p (ids::fx2Mix, 0.28f), p (ids::fx2P1, 0.42f), p (ids::fx2P2, 0.4f),
|
|
p (ids::fx3Type, fx (FxType::Reverb)), p (ids::fx3Mix, 0.22f), p (ids::fx3P1, 0.55f)
|
|
};
|
|
pr.macroAssigns = {
|
|
{ 0, ModTarget::OscADetune, 0.5f },
|
|
{ 0, ModTarget::OscBDetune, 0.4f },
|
|
{ 0, ModTarget::Filter1Drive, 0.4f },
|
|
{ 1, ModTarget::OscASpread, 0.6f },
|
|
{ 1, ModTarget::OscBSpread, 0.5f },
|
|
{ 2, ModTarget::Filter1Drive, 0.5f },
|
|
{ 2, ModTarget::Filter2Drive, 0.4f },
|
|
{ 3, ModTarget::Fx3Mix, 0.4f }
|
|
};
|
|
v.push_back (pr);
|
|
|
|
return v;
|
|
}();
|
|
|
|
return presets;
|
|
}
|
|
|
|
} // namespace serum
|