diff --git a/Source/LcdPanel.cpp b/Source/LcdPanel.cpp index 2f44a92..ecaf59f 100644 --- a/Source/LcdPanel.cpp +++ b/Source/LcdPanel.cpp @@ -644,7 +644,8 @@ void LcdPanel::drawParamScreen (juce::Graphics& g) pxTextM (g, 3, 1, paramScreenTitle (paramScreenIdx), 1.0f); drawFilled (g, 3, 6, gridW - 6, 1, 0.35f); - static const prm::Id voice[] = { prm::Id::osc1Wave, prm::Id::osc2Wave, prm::Id::detune1, prm::Id::detune, prm::Id::oscMix }; + static const prm::Id voice[] = { prm::Id::osc1Wave, prm::Id::osc2Wave, prm::Id::detune1, prm::Id::detune, prm::Id::oscMix, + prm::Id::xmod, prm::Id::xmix, prm::Id::evolve, prm::Id::warp }; static const prm::Id filter[] = { prm::Id::fltType, prm::Id::fltCutoff, prm::Id::fltRes, prm::Id::fltEnv, prm::Id::fltKey }; static const prm::Id envMt[] = { prm::Id::ampA, prm::Id::ampD, prm::Id::ampS, prm::Id::ampR, prm::Id::fenvA, prm::Id::fenvD, prm::Id::fenvS, prm::Id::fenvR }; diff --git a/Source/Params.cpp b/Source/Params.cpp index b5ae80c..61ff47a 100644 --- a/Source/Params.cpp +++ b/Source/Params.cpp @@ -5,8 +5,8 @@ namespace prm { static const Desc table[num] = { // id name short min max def disc fine coarse - { "osc1wave", "OSC1 WAVE", "O1WV", 0, 4, 2, true, 1, 1 }, - { "osc2wave", "OSC2 WAVE", "O2WV", 0, 4, 3, true, 1, 1 }, + { "osc1wave", "OSC1 WAVE", "O1WV", 0, 14, 2, true, 1, 1 }, + { "osc2wave", "OSC2 WAVE", "O2WV", 0, 14, 3, true, 1, 1 }, { "detune", "DETUNE 2", "DT2", -50, 50, 8, false, 1, 6 }, { "oscmix", "OSC BAL", "MIX", 0, 100, 52, false, 1, 8 }, { "flttype", "FILTER TYPE", "FTYP", 0, 3, 1, true, 1, 1 }, @@ -26,7 +26,7 @@ static const Desc table[num] = { { "lfoshape", "LFO SHAPE", "LFS", 0, 3, 0, true, 1, 1 }, { "lfodepth", "LFO DEPTH", "LFD", 0, 1, 0.22f, false, 0.01f, 0.08f }, { "lfotarget", "LFO TARGET", "LFT", 0, 2, 0, true, 1, 1 }, - { "fxtype", "FX TYPE", "FXT", 0, 3, 1, true, 1, 1 }, + { "fxtype", "FX TYPE", "FXT", 0, 7, 1, true, 1, 1 }, { "fxamt", "FX DEPTH", "FXD", 0, 1, 0.30f, false, 0.01f, 0.08f }, { "fxtime", "FX TIME", "FXT", 0.05f, 1.2f, 0.28f, false, 0.01f, 0.12f }, { "vol", "MASTER VOL", "VOL", 0, 1, 0.85f, false, 0.01f, 0.08f }, @@ -41,6 +41,10 @@ static const Desc table[num] = { { "arpoct", "ARP OCTAVES", "AOC", 1, 4, 1, true, 1, 1 }, { "arpgate", "ARP GATE", "AGT", 10, 100, 70, false, 1, 10 }, { "detune1", "DETUNE 1", "DT1", -50, 50, 0, false, 1, 6 }, + { "xmod", "CROSS MOD", "XML", 0, 3, 0, true, 1, 1 }, + { "xmix", "XMIX AMT", "XMX", 0, 1, 0, false, 0.01f, 0.08f }, + { "evolve", "EVOLVE", "EVO", 0, 1, 0, false, 0.01f, 0.08f }, + { "warp", "WARP", "WRP", 0, 1, 0, false, 0.01f, 0.08f }, }; const Desc& desc (Id id) { return table[static_cast(id)]; } @@ -74,7 +78,11 @@ juce::AudioProcessorValueTreeState::ParameterLayout createLayout() const char* waveName (int w) { switch (w) { case 0: return "SINE"; case 1: return "TRIANG"; case 2: return "SAWTOOTH"; - case 3: return "PULSE"; case 4: return "NOISE"; default: return "-----"; } + case 3: return "PULSE"; case 4: return "NOISE"; case 5: return "FM "; + case 6: return "PWM "; case 7: return "SUPRSW "; case 8: return "DBLSAW "; + case 9: return "WARP "; case 10: return "HSYNC "; case 11: return "TINE "; + case 12: return "SEQ "; case 13: return "CHORD "; case 14: return "SUPRPL "; + default: return "-----"; } } const char* fltTypeName (int t) @@ -97,8 +105,15 @@ const char* lfoTargetName (int t) const char* fxTypeName (int t) { - switch (t) { case 0: return "OFF"; case 1: return "CHORUS"; case 2: return "DELAY "; - case 3: return "SPACE"; default: return "OFF"; } + switch (t) { case 0: return "OFF"; case 1: return "CHORUS"; case 2: return "DELAY "; + case 3: return "SPACE"; case 4: return "REV HALL"; case 5: return "ENS+REV"; + case 6: return "DLY+REV"; case 7: return "CATHEDRAL"; default: return "OFF"; } +} + +const char* xmodTypeName (int t) +{ + switch (t) { case 0: return "OFF "; case 1: return "RING "; case 2: return "FM "; + case 3: return "AM "; default: return "OFF "; } } const char* arpRateName (int r) @@ -204,6 +219,10 @@ juce::String formatParam (Id id, float v) return juce::String (t > 0 ? "+" : "") + juce::String (t) + "ST"; } case Id::hq: return v >= 0.5f ? "HQ" : "ECO"; + case Id::xmod: return xmodTypeName ((int) v); + case Id::xmix: + case Id::evolve: + case Id::warp: return fmtPercent (v); case Id::arpOn: return v >= 0.5f ? "ON " : "OFF"; case Id::arpRate: return arpRateName ((int) v); case Id::arpPattern: return arpPatternName ((int) v); diff --git a/Source/Params.h b/Source/Params.h index e82e9e4..fceb0aa 100644 --- a/Source/Params.h +++ b/Source/Params.h @@ -13,10 +13,11 @@ enum class Id : int { vol, pan, poly, glide, tune, hq, arpOn, arpRate, arpPattern, arpOct, arpGate, - detune1 + detune1, + xmod, xmix, evolve, warp }; -constexpr int num = 36; +constexpr int num = 40; struct Desc { const char* id; @@ -40,6 +41,7 @@ const char* fltTypeName (int t); const char* lfoShapeName (int s); const char* lfoTargetName (int t); const char* fxTypeName (int t); +const char* xmodTypeName (int t); const char* arpRateName (int r); const char* arpPatternName (int p); diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index 193aed2..6831686 100644 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -14,7 +14,8 @@ static inline void dbgNote (const char* ev, int note, float vel) } class RMX19AudioProcessor::FxEngine -{public: +{ +public: void prepare (double sampleRate, int maxSamples) { sr = sampleRate; @@ -28,6 +29,9 @@ class RMX19AudioProcessor::FxEngine chorusR.setMaximumDelayInSamples (maxDelay); delL.setMaximumDelayInSamples (maxDelay); delR.setMaximumDelayInSamples (maxDelay); + + rebuildCombBuffers (true); + rebuildCombBuffers (false); } void reset() @@ -35,6 +39,11 @@ class RMX19AudioProcessor::FxEngine chorusL.reset(); chorusR.reset(); delL.reset(); delR.reset(); chPh = 0.0; + lpL = lpR = 0.0f; + for (auto& c : combL) c.reset(); + for (auto& c : combR) c.reset(); + for (auto& a : apL) a.reset(); + for (auto& a : apR) a.reset(); } void process (const VParams& p, float* L, float* R, int num, int syncIdx, double bpm) @@ -43,53 +52,137 @@ class RMX19AudioProcessor::FxEngine if (type == 0) return; const float wet = p.fxAmt; - const float dry = 1.0f - wet * 0.5f; - const float chBase = 0.008f * (float) sr; // 8 ms chorus base - const float chDepth = 0.0035f * (float) sr; // +-3.5 ms wobble + const float dryCh = 1.0f - wet * 0.5f; + const float chBase = 0.009f * (float) sr; // 9 ms ensemble base + const float chDepth = 0.006f * (float) sr; // +-6 ms wobble float delSamples = (float) (p.fxTime * sr); if (syncIdx > 0 && bpm > 1.0) delSamples = (float) ((60.0 / bpm) * prm::delaySyncBeats (syncIdx) * sr); - const float feedback = 0.40f; + const float fb = 0.20f + 0.35f * wet; + const float ff = 0.18f; // darkening of repeats + + const bool doChorus = (type == 1 || type == 3 || type == 5 || type == 7); + const bool doDelay = (type == 2 || type == 3 || type == 6 || type == 7); + const bool doVerb = (type >= 4); for (int s = 0; s < num; ++s) { const float inL = L[s], inR = R[s]; - float outL = inL * dry, outR = inR * dry; + float outL = inL * dryCh, outR = inR * dryCh; - if (type == 1 || type == 3) + if (doChorus) { - const double rate = type == 3 ? 0.55 : 0.38; - chPh += rate / sr; - if (chPh >= 1.0) chPh -= 1.0; - const float m = 0.5f + 0.5f * (float) std::sin (chPh * 2.0 * juce::MathConstants::pi); + // 3-voice ensemble with a touch of internal regeneration + const double w = chPh * 2.0 * juce::MathConstants::pi; + const float t1 = (float) std::sin (w); + const float t2 = (float) std::sin (w + 2.09439f); + const float t3 = (float) std::sin (w + 4.18879f); + chPh += 0.34 / sr; if (chPh >= 1.0) chPh -= 1.0; chorusL.pushSample (0, inL); chorusR.pushSample (0, inR); - const float mL = chorusL.popSample (0, chBase + chDepth * m); - const float mR = chorusR.popSample (0, chBase + chDepth * (1.0f - m)); - outL += mL * wet * 0.7f; - outR += mR * wet * 0.7f; + const float mL = 0.5f * (chorusL.popSample (0, chBase + chDepth * t1) + + chorusL.popSample (0, chBase + chDepth * t2)); + const float mR = 0.5f * (chorusR.popSample (0, chBase + chDepth * t2) + + chorusR.popSample (0, chBase + chDepth * t3)); + chorusL.pushSample (0, mL * 0.30f); + chorusR.pushSample (0, mR * 0.30f); + outL += mL * wet * 0.8f; + outR += mR * wet * 0.8f; } - if (type == 2 || type == 3) + if (doDelay) { const float rL = delL.popSample (0, delSamples); const float rR = delR.popSample (0, delSamples); - delL.pushSample (0, inL + rR * feedback); - delR.pushSample (0, inR + rL * feedback); + lpL += ff * (rL - lpL); lpR += ff * (rR - lpR); + delL.pushSample (0, inL + lpR * fb); + delR.pushSample (0, inR + lpL * fb); outL += rL * wet; outR += rR * wet; } + if (doVerb) + { + float revL = 0.0f, revR = 0.0f; + for (int i = 0; i < 6; ++i) + { + float o = combL[i].process (inL * 0.25f, 0.84f, 0.30f); + revL += o * 0.22f; + o = combR[i].process (inR * 0.25f, 0.84f, 0.30f); + revR += o * 0.22f; + } + apL[0].process (revL, 0.70f); apL[1].process (revL, 0.57f); + apR[0].process (revR, 0.70f); apR[1].process (revR, 0.57f); + const float revWet = (type == 7 ? wet : wet * 0.8f); + outL += revL * revWet; + outR += revR * revWet; + } + L[s] = outL; R[s] = outR; } } private: + struct Comb + { + void prepare (double s, double seconds) + { + size = (int) (s * seconds); + buf.assign (size, 0.0f); + idx = 0; out = 0.0f; lpIn = 0.0f; lpOut = 0.0f; + } + void reset() { std::fill (buf.begin(), buf.end(), 0.0f); idx = 0; out = 0.0f; lpIn = lpOut = 0.0f; } + float process (float in, float fb, float damp) + { + out = buf[idx]; + lpOut = out * (1.0f - damp) + lpIn * damp; + lpIn = out; + buf[idx] = in + lpOut * fb; + if (++idx >= size) idx = 0; + return out; + } + std::vector buf; + int size = 0, idx = 0; + float out = 0.0f, lpIn = 0.0f, lpOut = 0.0f; + }; + struct Allpass + { + void prepare (double s, double seconds) + { + size = (int) (s * seconds); + buf.assign (size, 0.0f); + idx = 0; + } + void reset() { std::fill (buf.begin(), buf.end(), 0.0f); idx = 0; } + void process (float& x, float fb) + { + const float w = buf[idx]; + buf[idx] = x + w * fb; + x = w - fb * buf[idx]; + if (++idx >= size) idx = 0; + } + std::vector buf; + int size = 0, idx = 0; + }; + + void rebuildCombBuffers (bool left) + { + const double combs[6] = { 0.0297, 0.0371, 0.0411, 0.0437, 0.0311, 0.0290 }; + const double off = left ? 0.0 : 0.008; + for (int i = 0; i < 6; ++i) + (left ? combL[i] : combR[i]).prepare (sr, combs[i] + off); + (left ? apL[0] : apR[0]).prepare (sr, 0.0050 + (left ? 0.0 : 0.0011)); + (left ? apL[1] : apR[1]).prepare (sr, 0.0161 + (left ? 0.0 : 0.0023)); + } + juce::dsp::DelayLine chorusL, chorusR, delL, delR; + std::array combL, combR; + std::array apL, apR; double sr = 48000.0; double chPh = 0.0; + float lpL = 0.0f, lpR = 0.0f; }; // --------------------------------------------------------------------------- diff --git a/Source/PluginProcessor.h b/Source/PluginProcessor.h index 183d7fa..10ba465 100644 --- a/Source/PluginProcessor.h +++ b/Source/PluginProcessor.h @@ -22,7 +22,7 @@ public: const juce::String getName() const override; bool acceptsMidi() const override { return true; } bool producesMidi() const override { return false; } - double getTailLengthSeconds() const override { return prm::delaySyncMaxTime() + 1.0; } + double getTailLengthSeconds() const override { return prm::delaySyncMaxTime() + 2.0; } int getNumPrograms() override; int getCurrentProgram() override; diff --git a/Source/PresetBank.cpp b/Source/PresetBank.cpp index 5bdf522..0e20cb7 100644 --- a/Source/PresetBank.cpp +++ b/Source/PresetBank.cpp @@ -1,7 +1,8 @@ #include "PresetBank.h" // Oscillator wave indices (see prm::waveName) -enum { O_SIN = 0, O_TRI, O_SAW, O_PUL, O_NOI }; +enum { O_SIN = 0, O_TRI, O_SAW, O_PUL, O_NOI, O_FM, O_PWM, O_SUP, O_DSW, O_WRP, + O_HSY, O_TNE, O_SEQ, O_CHD, O_SPL }; // Parameter order matches the prm::desc table: // 0 osc1Wave 1 osc2Wave 2 detune 3 oscMix @@ -10,668 +11,1786 @@ enum { O_SIN = 0, O_TRI, O_SAW, O_PUL, O_NOI }; // 13 fenvA 14 fenvD 15 fenvS 16 fenvR // 17 lfoRate 18 lfoShape 19 lfoDepth 20 lfoTarget // 21 fxType 22 fxAmt 23 fxTime -// 24 vol 25 pan 26 poly 27 glide 28 tune +// 24 vol 25 pan 26 poly 27 glide 28 tune 29 hq +// 30 arpOn 31 arpRate 32 arpPattern 33 arpOct 34 arpGate +// 35 detune1 36 xmod 37 xmix 38 evolve 39 warp static const Patch defs[] = { // == POLY PAD ========================================================== // 1 Warm Pad - { "Warm Pad", "POLY PAD", { O_SAW, O_SAW, 8, 55, 1, 2600, 0.20f, 60, 35, - 0.60f, 1.6f, 0.80f, 1.20f, - 0.40f, 0.9f, 0.35f, 0.5f, - 4.0f, 0, 0.18f, 0, - 1, 0.32f, 0.30f, - 0.82f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Warm Pad", "POLY PAD", { O_SAW, O_SAW, 8, 55, 1, 2600, 0.20f, 60, 35, +0.60f, 1.6f, 0.80f, 1.20f, +0.40f, 0.9f, 0.35f, 0.5f, +4.0f, 0, 0.18f, 0, +5, 0.40, 0.30, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 0, 0.00, 0.50, 0.30} }, // 2 Glass Pad - { "Glass Pad", "POLY PAD", { O_TRI, O_TRI, 12, 60, 1, 1400, 0.55f, 75, 30, - 0.80f, 1.8f, 0.90f, 1.60f, - 0.50f, 1.2f, 0.40f, 0.8f, - 5.2f, 0, 0.16f, 2, - 3, 0.38f, 0.40f, - 0.92f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Glass Pad", "POLY PAD", { O_TRI, O_TRI, 12, 60, 1, 1400, 0.55f, 75, 30, +0.80f, 1.8f, 0.90f, 1.60f, +0.50f, 1.2f, 0.40f, 0.8f, +5.2f, 0, 0.16f, 2, +5, 0.40, 0.30, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 1, 0.38, 0.50, 0.30} }, // 3 Dream Pad - { "Dream Pad", "POLY PAD", { O_SAW, O_PUL, -7, 50, 1, 3000, 0.25f, 70, 40, - 1.10f, 2.4f, 0.85f, 1.80f, - 0.60f, 1.4f, 0.30f, 0.9f, - 0.35f, 1, 0.20f, 0, - 1, 0.40f, 0.50f, - 0.80f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Dream Pad", "POLY PAD", { O_SUP, O_SUP, -7, 50, 1, 3000, 0.25f, 70, 40, +1.10f, 2.4f, 0.85f, 1.80f, +0.60f, 1.4f, 0.30f, 0.9f, +2.5f, 1, 0.55f, 0, +5, 0.40, 0.30, +0.40f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 0, 0.00, 0.50, 0.30} }, // 15 Choir Layered - { "Choir Layered", "POLY PAD",{ O_SAW, O_PUL, 9, 48, 1, 2600, 0.14f, 62, 45, - 0.35f, 0.80f, 0.85f, 1.10f, - 0.30f, 0.60f, 0.35f, 0.60f, - 3.4f, 1, 0.12f, 0, - 1, 0.38f, 0.42f, - 0.82f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Choir Layered", "POLY PAD",{ O_SUP, O_PUL, 9, 48, 1, 2600, 0.14f, 62, 45, +0.35f, 0.80f, 0.85f, 1.10f, +0.30f, 0.60f, 0.35f, 0.60f, +2.0f, 2, 0.25, 0, +7, 0.50, 0.28, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 0, 0.00, 0.50, 0.30} }, // 17 Shimmer Pad - { "Shimmer Pad", "POLY PAD", { O_TRI, O_TRI, 14, 55, 1, 1800, 0.50f, 60, 20, - 0.50f, 2.0f, 0.85f, 2.0f, - 0.30f, 1.5f, 0.40f, 1.0f, - 5.2f, 0, 0.20f, 2, - 3, 0.38f, 0.55f, - 0.90f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Shimmer Pad", "POLY PAD", { O_CHD, O_SUP, 14, 55, 1, 1800, 0.50f, 60, 20, +0.50f, 2.0f, 0.85f, 2.0f, +0.30f, 1.5f, 0.40f, 1.0f, +1.2f, 0, 0.6f, 2, +5, 0.40, 0.30, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 1, 0.51, 0.50, 0.30} }, // 25 Deep Space Pad - { "Deep Space Pad","POLY PAD", { O_SAW, O_SAW, 16, 60, 1, 1500, 0.45f, 70, 35, - 0.90f, 2.4f, 0.85f, 2.2f, - 0.50f, 1.6f, 0.45f, 1.2f, - 5.0f, 0, 0.22f, 2, - 3, 0.42f, 0.70f, - 0.80f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Deep Space Pad","POLY PAD", { O_DSW, O_SAW, 16, 60, 1, 1500, 0.45f, 70, 35, +0.90f, 2.4f, 0.85f, 2.2f, +0.50f, 1.6f, 0.45f, 1.2f, +0.5f, 0, 0.5f, 2, +5, 0.40, 0.30, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 1, 0.51, 0.50, 0.30} }, // 34 Space Choir - { "Space Choir", "POLY PAD", { O_TRI, O_SAW, 12, 50, 1, 2400, 0.35f, 65, 45, - 0.45f, 1.4f, 0.82f, 1.7f, - 0.30f, 0.90f, 0.40f, 0.9f, - 3.8f, 1, 0.15f, 0, - 3, 0.46f, 0.65f, - 0.82f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Space Choir", "POLY PAD", { O_SUP, O_TRI, 12, 50, 1, 2400, 0.35f, 65, 45, +0.45f, 1.4f, 0.82f, 1.7f, +0.30f, 0.90f, 0.40f, 0.9f, +1.0f, 0, 0.55f, 2, +7, 0.50, 0.28, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 1, 0.47, 0.50, 0.30} }, // 39 Crystal Pad - { "Crystal Pad", "POLY PAD", { O_SIN, O_TRI, 18, 55, 1, 3600, 0.40f, 50, 25, - 0.60f, 2.2f, 0.85f, 2.0f, - 0.40f, 1.4f, 0.40f, 1.2f, - 5.5f, 0, 0.20f, 2, - 3, 0.40f, 0.60f, - 0.80f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Crystal Pad", "POLY PAD", { O_TNE, O_SIN, 18, 55, 1, 3600, 0.40f, 50, 25, +0.60f, 2.2f, 0.85f, 2.0f, +0.40f, 1.4f, 0.40f, 1.2f, +1.8f, 1, 0.4f, 2, +5, 0.40, 0.30, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 1, 0.48, 0.50, 0.30} }, // 41 Infinite Pad - { "Infinite Pad", "POLY PAD", { O_SAW, O_SAW, 20, 50, 1, 1800, 0.30f, 75, 35, - 2.0f, 3.5f, 0.90f, 4.0f, - 1.5f, 2.5f, 0.50f, 3.0f, - 0.25f, 1, 0.25f, 2, - 3, 0.50f, 0.55f, - 0.80f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Infinite Pad", "POLY PAD", { O_PWM, O_PWM, 20, 50, 1, 1800, 0.30f, 75, 35, +2.0f, 3.5f, 0.90f, 4.0f, +1.5f, 2.5f, 0.50f, 3.0f, +0.7f, 0, 0.55f, 2, +5, 0.40, 0.30, +0.85f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 0, 0.00, 0.50, 0.30} }, // 42 Nebula - { "Nebula", "POLY PAD", { O_TRI, O_PUL, 15, 55, 1, 2000, 0.25f, 65, 30, - 1.8f, 3.0f, 0.88f, 3.5f, - 1.2f, 2.0f, 0.45f, 2.5f, - 0.30f, 0, 0.20f, 0, - 3, 0.55f, 0.65f, - 0.82f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Nebula", "POLY PAD", { O_TRI, O_PUL, 15, 55, 1, 2000, 0.25f, 65, 30, +1.8f, 3.0f, 0.88f, 3.5f, +1.2f, 2.0f, 0.45f, 2.5f, +1.5f, 3, 0.5f, 0, +5, 0.40, 0.30, +0.99f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 0, 0.00, 0.50, 0.30} }, // 43 Cathedral Pad - { "Cathedral Pad","POLY PAD", { O_SIN, O_SAW, 12, 45, 2, 1600, 0.45f, 80, 40, - 2.5f, 4.0f, 0.92f, 5.0f, - 1.8f, 3.0f, 0.55f, 3.5f, - 4.0f, 0, 0.15f, 0, - 3, 0.60f, 0.80f, - 0.78f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Cathedral Pad","POLY PAD", { O_CHD, O_SAW, 12, 45, 2, 1600, 0.45f, 80, 40, +2.5f, 4.0f, 0.92f, 5.0f, +1.8f, 3.0f, 0.55f, 3.5f, +0.9f, 0, 0.5f, 0, +7, 0.40, 0.40, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +6, 0, 0.00, 0.50, 0.30} }, // 45 Monolith - { "Monolith", "POLY PAD", { O_SIN, O_SIN, 0, 50, 1, 320, 0.25f, 40, 15, - 2.0f, 3.0f, 0.88f, 4.5f, - 1.5f, 2.5f, 0.50f, 3.0f, - 3.5f, 0, 0.18f, 2, - 3, 0.42f, 0.75f, - 0.78f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Monolith", "POLY PAD", { O_SIN, O_SIN, 0, 50, 1, 320, 0.25f, 40, 15, +2.0f, 3.0f, 0.88f, 4.5f, +1.5f, 2.5f, 0.50f, 3.0f, +3.5f, 0, 0.18f, 2, +5, 0.40, 0.30, +0.92f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 0, 0.00, 0.50, 0.30} }, // 46 Quantum Drift - { "Quantum Drift","POLY PAD", { O_SAW, O_SAW, 22, 48, 2, 2200, 0.40f, 70, 30, - 0.80f, 2.2f, 0.88f, 3.0f, - 0.50f, 1.8f, 0.45f, 2.0f, - 5.8f, 0, 0.22f, 0, - 3, 0.45f, 0.65f, - 0.82f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Quantum Drift","POLY PAD", { O_SEQ, O_SAW, 22, 48, 2, 2200, 0.40f, 70, 30, +0.80f, 2.2f, 0.88f, 3.0f, +0.50f, 1.8f, 0.45f, 2.0f, +2.2f, 3, 0.5f, 0, +5, 0.40, 0.30, +0.87f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 0, 0.00, 0.50, 0.30} }, // 47 Horizon - { "Horizon", "POLY PAD", { O_TRI, O_SAW, 4, 50, 1, 1800, 0.20f, 65, 35, - 1.5f, 2.8f, 0.90f, 3.5f, - 1.0f, 2.0f, 0.50f, 2.5f, - 0.3f, 1, 0.18f, 0, - 1, 0.40f, 0.55f, - 0.80f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Horizon", "POLY PAD", { O_TRI, O_SUP, 4, 50, 1, 1800, 0.20f, 65, 35, +1.5f, 2.8f, 0.90f, 3.5f, +1.0f, 2.0f, 0.50f, 2.5f, +1.1f, 0, 0.5f, 2, +5, 0.40, 0.30, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 0, 0.00, 0.50, 0.30} }, // 52 Abyss - { "Abyss", "POLY PAD", { O_SAW, O_TRI, 14, 50, 1, 1200, 0.35f, 80, 30, - 2.5f, 3.5f, 0.90f, 5.0f, - 2.0f, 3.0f, 0.50f, 3.5f, - 4.0f, 1, 0.18f, 0, - 3, 0.70f, 0.80f, - 0.78f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Abyss", "POLY PAD", { O_DSW, O_TRI, 14, 50, 1, 1200, 0.35f, 80, 30, +2.5f, 3.5f, 0.90f, 5.0f, +2.0f, 3.0f, 0.50f, 3.5f, +0.9f, 2, 0.25, 0, +5, 0.40, 0.30, +0.98f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 0, 0.00, 0.50, 0.30} }, // 53 Shimmer Reverb - { "Shimmer Reverb","POLY PAD",{ O_TRI, O_SIN, 8, 55, 2, 3400, 0.50f, 75, 25, - 3.0f, 4.0f, 0.92f, 5.5f, - 2.2f, 3.5f, 0.55f, 4.0f, - 5.0f, 0, 0.20f, 2, - 3, 0.75f, 0.70f, - 0.76f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Shimmer Reverb","POLY PAD",{ O_CHD, O_SIN, 8, 55, 2, 3400, 0.50f, 75, 25, +3.0f, 4.0f, 0.92f, 5.5f, +2.2f, 3.5f, 0.55f, 4.0f, +1.5f, 1, 0.6f, 0, +5, 0.40, 0.30, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 1, 0.44, 0.50, 0.30} }, // 54 Temple - { "Temple", "POLY PAD", { O_PUL, O_SAW, 6, 48, 1, 1600, 0.30f, 70, 35, - 2.0f, 3.0f, 0.88f, 4.5f, - 1.5f, 2.5f, 0.48f, 3.0f, - 3.5f, 0, 0.15f, 0, - 3, 0.65f, 0.75f, - 0.80f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Temple", "POLY PAD", { O_PUL, O_SAW, 6, 48, 1, 1600, 0.30f, 70, 35, +2.0f, 3.0f, 0.88f, 4.5f, +1.5f, 2.5f, 0.48f, 3.0f, +3.5f, 0, 0.15f, 0, +5, 0.40, 0.30, +0.94f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 0, 0.00, 0.50, 0.30} }, // 55 Silk Pad - { "Silk Pad", "POLY PAD", { O_TRI, O_TRI, 6, 55, 1, 3400, 0.20f, 55, 25, - 1.2f, 2.5f, 0.90f, 3.0f, - 0.8f, 1.8f, 0.45f, 2.0f, - 3.0f, 0, 0.18f, 0, - 1, 0.38f, 0.45f, - 0.82f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Silk Pad", "POLY PAD", { O_PWM, O_TRI, 6, 55, 1, 3400, 0.20f, 55, 25, +1.2f, 2.5f, 0.90f, 3.0f, +0.8f, 1.8f, 0.45f, 2.0f, +0.8f, 0, 0.5f, 0, +5, 0.40, 0.30, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 0, 0.00, 0.50, 0.30} }, // 56 Glass Cloud - { "Glass Cloud", "POLY PAD", { O_SIN, O_TRI, 16, 50, 1, 3800, 0.35f, 65, 20, - 1.5f, 2.8f, 0.88f, 3.5f, - 1.0f, 2.0f, 0.40f, 2.5f, - 0.35f, 1, 0.22f, 0, - 3, 0.55f, 0.60f, - 0.80f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Glass Cloud", "POLY PAD", { O_TNE, O_TRI, 16, 50, 1, 3800, 0.35f, 65, 20, +1.5f, 2.8f, 0.88f, 3.5f, +1.0f, 2.0f, 0.40f, 2.5f, +2.0f, 1, 0.45f, 2, +5, 0.40, 0.30, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 1, 0.51, 0.50, 0.30} }, // 57 Velvet Pad - { "Velvet Pad", "POLY PAD", { O_SAW, O_TRI, 10, 52, 1, 1600, 0.25f, 70, 30, - 1.8f, 3.0f, 0.90f, 3.5f, - 1.2f, 2.2f, 0.50f, 2.5f, - 0.30f, 1, 0.20f, 0, - 3, 0.48f, 0.55f, - 0.82f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Velvet Pad", "POLY PAD", { O_PWM, O_TRI, 10, 52, 1, 1600, 0.25f, 70, 30, +1.8f, 3.0f, 0.90f, 3.5f, +1.2f, 2.2f, 0.50f, 2.5f, +0.6f, 0, 0.5f, 0, +5, 0.40, 0.30, +0.77f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 0, 0.00, 0.50, 0.30} }, // == KEY =============================================================== // 5 Electric Piano - { "Electric Piano", "KEY", { O_PUL, O_TRI, 5, 62, 1, 2800, 0.25f, 45, 40, - 0.004f, 1.4f, 0.30f, 0.40f, - 0.004f, 0.2f, 0.10f, 0.3f, - 6.0f, 0, 0.05f, 2, - 1, 0.35f, 0.30f, - 0.80f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Electric Piano", "KEY", { O_PUL, O_TRI, 5, 62, 1, 2800, 0.25f, 45, 40, +0.004f, 1.4f, 0.30f, 0.40f, +0.004f, 0.2f, 0.10f, 0.3f, +6.0f, 0, 0.05f, 2, +4, 0.30, 0.32, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +4, 1, 0.37, 0.30, 0.18} }, // 6 Acoustic Piano - { "Acoustic Piano", "KEY", { O_SAW, O_TRI, 3, 55, 1, 5200, 0.18f, 30, 60, - 0.003f, 2.2f, 0.25f, 0.50f, - 0.002f, 0.25f, 0.05f, 0.35f, - 4.0f, 0, 0.03f, 2, - 1, 0.22f, 0.30f, - 0.80f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Acoustic Piano", "KEY", { O_SAW, O_TRI, 3, 55, 1, 5200, 0.18f, 30, 60, +0.003f, 2.2f, 0.25f, 0.50f, +0.002f, 0.25f, 0.05f, 0.35f, +4.0f, 0, 0.03f, 2, +4, 0.30, 0.32, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +4, 1, 0.41, 0.30, 0.18} }, // 7 Toy Piano - { "Toy Piano", "KEY", { O_PUL, O_PUL, 0, 70, 1, 2100, 0.50f, 30, 45, - 0.002f, 0.35f, 0.0f, 0.18f, - 0.002f, 0.05f, 0.02f, 0.08f, - 5.0f, 0, 0.03f, 2, - 2, 0.18f, 0.17f, - 0.90f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Toy Piano", "KEY", { O_TNE, O_PUL, 0, 70, 1, 2100, 0.50f, 30, 45, +0.002f, 0.35f, 0.0f, 0.18f, +0.002f, 0.05f, 0.02f, 0.08f, +3.0f, 2, 0.35f, 2, +4, 0.30, 0.32, +0.90f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +4, 1, 0.53, 0.30, 0.18} }, // 8 Clavinet 70 - { "Clavinet 70", "KEY", { O_PUL, O_PUL, 0, 40, 1, 1500, 0.40f, 60, 30, - 0.002f, 0.50f, 0.45f, 0.12f, - 0.001f, 0.05f, 0.05f, 0.10f, - 4.0f, 0, 0.05f, 0, - 1, 0.30f, 0.28f, - 0.92f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Clavinet 70", "KEY", { O_WRP, O_PUL, 0, 40, 1, 1500, 0.40f, 60, 30, +0.002f, 0.50f, 0.45f, 0.12f, +0.001f, 0.05f, 0.05f, 0.10f, +4.0f, 2, 0.25, 0, +4, 0.30, 0.32, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +4, 0, 0.00, 0.30, 0.18} }, // 9 Organ Drawbar - { "Organ Drawbar", "KEY", { O_SAW, O_SAW, 0, 50, 1, 10000, 0.10f, 20, 80, - 0.010f, 0.10f, 0.98f, 0.10f, - 0.010f, 0.10f, 0.50f, 0.10f, - 8.0f, 3, 0.03f, 1, - 1, 0.20f, 0.28f, - 0.82f, 0.0f, 8, 0.0f, 0, 0 } }, + { "Organ Drawbar", "KEY", { O_CHD, O_SAW, 0, 50, 1, 10000, 0.10f, 20, 80, +0.010f, 0.10f, 0.98f, 0.10f, +0.010f, 0.10f, 0.50f, 0.10f, +1.5f, 2, 0.10, 1, +7, 0.40, 0.40, +0.72f, 0.0f, 8, 0.0f, 0, 0, +0, 0, 0, 0, 0, +6, 2, 0.39, 0.30, 0.18} }, // 10 FM E.Piano - { "FM E.Piano", "KEY", { O_SIN, O_TRI, 0, 30, 1, 4000, 0.12f, 50, 50, - 0.002f, 1.0f, 0.50f, 0.30f, - 0.002f, 0.20f, 0.10f, 0.25f, - 4.5f, 0, 0.04f, 2, - 1, 0.40f, 0.30f, - 0.86f, 0.0f, 12, 0.0f, 0, 0 } }, + { "FM E.Piano", "KEY", { O_FM, O_FM, 0, 30, 1, 4000, 0.12f, 50, 50, +0.002f, 1.0f, 0.50f, 0.30f, +0.002f, 0.20f, 0.10f, 0.25f, +1.2f, 0, 0.35f, 2, +4, 0.30, 0.32, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +4, 1, 0.42, 0.30, 0.18} }, // 19 Church Bell - { "Church Bell", "KEY", { O_SIN, O_SIN, 0, 40, 1, 3200, 0.40f, 40, 30, - 0.002f, 2.5f, 0.10f, 1.8f, - 0.002f, 0.3f, 0.10f, 0.6f, - 4.4f, 0, 0.05f, 2, - 3, 0.30f, 0.60f, - 0.92f, 0.0f, 10, 0.0f, 0, 0 } }, + { "Church Bell", "KEY", { O_TNE, O_SIN, 0, 40, 1, 3200, 0.40f, 40, 30, +0.002f, 2.5f, 0.10f, 1.8f, +0.002f, 0.3f, 0.10f, 0.6f, +2.5f, 3, 0.4f, 2, +7, 0.40, 0.40, +1.00f, 0.0f, 10, 0.0f, 0, 0, +0, 0, 0, 0, 0, +6, 1, 0.41, 0.30, 0.18} }, // 20 E.Piano 2 - { "E.Piano 2", "KEY", { O_PUL, O_TRI, 4, 58, 1, 2500, 0.30f, 40, 35, - 0.003f, 1.2f, 0.40f, 0.5f, - 0.003f, 0.25f, 0.20f, 0.3f, - 6.0f, 0, 0.04f, 2, - 1, 0.35f, 0.30f, - 0.80f, 0.0f, 12, 0.0f, 0, 0 } }, + { "E.Piano 2", "KEY", { O_TNE, O_TRI, 4, 58, 1, 2500, 0.30f, 40, 35, +0.003f, 1.2f, 0.40f, 0.5f, +0.003f, 0.25f, 0.20f, 0.3f, +1.6f, 1, 0.4f, 2, +4, 0.30, 0.32, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +4, 1, 0.44, 0.30, 0.18} }, // 26 Liquid Keys - { "Liquid Keys", "KEY", { O_TRI, O_TRI, 8, 55, 1, 2800, 0.30f, 55, 30, - 0.30f, 1.6f, 0.60f, 0.90f, - 0.20f, 1.0f, 0.30f, 0.60f, - 3.6f, 0, 0.16f, 2, - 3, 0.36f, 0.50f, - 0.84f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Liquid Keys", "KEY", { O_PWM, O_TRI, 8, 55, 1, 2800, 0.30f, 55, 30, +0.30f, 1.6f, 0.60f, 0.90f, +0.20f, 1.0f, 0.30f, 0.60f, +2.2f, 0, 0.45f, 0, +4, 0.30, 0.32, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +4, 0, 0.00, 0.30, 0.18} }, // 29 Glassy Chime - { "Glassy Chime", "KEY", { O_SIN, O_TRI, 20, 65, 1, 4200, 0.35f, 35, 40, - 0.005f, 2.0f, 0.30f, 1.6f, - 0.004f, 0.35f, 0.15f, 0.6f, - 5.6f, 0, 0.08f, 2, - 3, 0.34f, 0.60f, - 0.82f, 0.0f, 10, 0.0f, 0, 0 } }, + { "Glassy Chime", "KEY", { O_TNE, O_TRI, 20, 65, 1, 4200, 0.35f, 35, 40, +0.005f, 2.0f, 0.30f, 1.6f, +0.004f, 0.35f, 0.15f, 0.6f, +3.0f, 1, 0.5f, 2, +4, 0.30, 0.32, +1.00f, 0.0f, 10, 0.0f, 0, 0, +0, 0, 0, 0, 0, +4, 1, 0.41, 0.30, 0.18} }, // 30 Chorus Organ - { "Chorus Organ", "KEY", { O_SAW, O_SAW, 0, 42, 1, 8000, 0.14f, 30, 75, - 0.010f, 0.10f, 0.95f, 0.12f, - 0.010f, 0.12f, 0.60f, 0.15f, - 7.5f, 3, 0.04f, 1, - 1, 0.40f, 0.34f, - 0.86f, 0.0f, 8, 0.0f, 0, 0 } }, + { "Chorus Organ", "KEY", { O_SPL, O_SPL, 0, 42, 1, 8000, 0.14f, 30, 75, +0.010f, 0.10f, 0.95f, 0.12f, +0.010f, 0.12f, 0.60f, 0.15f, +2.0f, 2, 0.10, 1, +7, 0.40, 0.40, +0.74f, 0.0f, 8, 0.0f, 0, 0, +0, 0, 0, 0, 0, +6, 0, 0.00, 0.30, 0.18} }, // 35 Retro Clav - { "Retro Clav", "KEY", { O_PUL, O_TRI, 2, 55, 1, 2600, 0.35f, 40, 35, - 0.003f, 0.60f, 0.40f, 0.15f, - 0.002f, 0.10f, 0.08f, 0.12f, - 5.0f, 0, 0.05f, 2, - 3, 0.25f, 0.30f, - 0.86f, 0.0f, 10, 0.0f, 0, 0 } }, + { "Retro Clav", "KEY", { O_PUL, O_TRI, 2, 55, 1, 2600, 0.35f, 40, 35, +0.003f, 0.60f, 0.40f, 0.15f, +0.002f, 0.10f, 0.08f, 0.12f, +5.0f, 0, 0.05f, 2, +4, 0.30, 0.32, +1.00f, 0.0f, 10, 0.0f, 0, 0, +0, 0, 0, 0, 0, +4, 0, 0.00, 0.30, 0.18} }, // 40 Funk Wah - { "Funk Wah", "KEY", { O_PUL, O_SAW, 0, 40, 1, 1800, 0.55f, 75, 20, - 0.004f, 0.70f, 0.50f, 0.20f, - 0.004f, 0.20f, 0.20f, 0.15f, - 7.0f, 2, 0.40f, 0, - 1, 0.32f, 0.30f, - 0.88f, 0.0f, 1, 0.03f, 0, 0 } }, + { "Funk Wah", "KEY", { O_PUL, O_SAW, 0, 40, 1, 1800, 0.55f, 75, 20, +0.004f, 0.70f, 0.50f, 0.20f, +0.004f, 0.20f, 0.20f, 0.15f, +7.0f, 2, 0.25, 0, +4, 0.30, 0.32, +1.00f, 0.0f, 1, 0.03f, 0, 0, +0, 0, 0, 0, 0, +4, 2, 0.30, 0.30, 0.18} }, // == BASS ============================================================== // 11 Analog Bass - { "Analog Bass", "BASS", { O_PUL, O_SIN, 0, 80, 1, 700, 0.35f, 35, 10, - 0.002f, 0.30f, 0.82f, 0.12f, - 0.002f, 0.10f, 0.15f, 0.10f, - 3.0f, 0, 0.05f, 0, - 0, 0.0f, 0.30f, - 0.94f, 0.0f, 1, 0.04f, 0, 0 } }, + { "Analog Bass", "BASS", { O_PUL, O_SIN, 0, 80, 1, 700, 0.35f, 35, 10, +0.002f, 0.30f, 0.82f, 0.12f, +0.002f, 0.10f, 0.15f, 0.10f, +3.0f, 0, 0.05f, 0, +2, 0.16, 0.19, +1.00f, 0.0f, 1, 0.04f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.39, 0.45, 0.35} }, // 12 Sub Rez Bass - { "Sub Rez Bass", "BASS", { O_SAW, O_PUL, -4, 45, 1, 520, 0.70f, 55, 15, - 0.004f, 0.40f, 0.70f, 0.10f, - 0.004f, 0.15f, 0.25f, 0.10f, - 2.4f, 3, 0.30f, 0, - 0, 0.0f, 0.30f, - 0.94f, 0.0f, 1, 0.03f, 0, 0 } }, + { "Sub Rez Bass", "BASS", { O_DSW, O_PUL, -4, 45, 1, 520, 0.70f, 55, 15, +0.004f, 0.40f, 0.70f, 0.10f, +0.004f, 0.15f, 0.25f, 0.10f, +3.0f, 2, 0.28, 0, +2, 0.16, 0.19, +0.75f, 0.0f, 1, 0.03f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.45, 0.60, 0.45} }, // 21 Acid Bass - { "Acid Bass", "BASS", { O_SAW, O_PUL, 0, 72, 1, 650, 0.60f, 70, 0, - 0.002f, 0.30f, 0.75f, 0.15f, - 0.002f, 0.10f, 0.12f, 0.05f, - 0.6f, 1, 0.30f, 0, - 0, 0.0f, 0.30f, - 0.90f, 0.0f, 1, 0.04f, 0, 0 } }, + { "Acid Bass", "BASS", { O_SAW, O_PUL, 0, 72, 1, 650, 0.60f, 70, 0, +0.002f, 0.30f, 0.75f, 0.15f, +0.002f, 0.10f, 0.12f, 0.05f, +0.6f, 1, 0.30f, 0, +2, 0.20, 0.24, +0.85f, 0.0f, 1, 0.04f, 0, 0, +0, 0, 0, 0, 0, +3, 2, 0.35, 0.50, 0.35} }, // 22 Analog Bass II - { "Analog Bass II", "BASS", { O_PUL, O_SIN, 0, 82, 1, 420, 0.40f, 45, 20, - 0.002f, 0.25f, 0.80f, 0.12f, - 0.002f, 0.12f, 0.20f, 0.08f, - 4.0f, 0, 0.08f, 1, - 1, 0.25f, 0.20f, - 0.88f, 0.0f, 1, 0.08f, 0, 0 } }, + { "Analog Bass II", "BASS", { O_HSY, O_SIN, 0, 82, 1, 420, 0.40f, 45, 20, +0.002f, 0.25f, 0.80f, 0.12f, +0.002f, 0.12f, 0.20f, 0.08f, +3.0f, 1, 0.4f, 0, +2, 0.16, 0.19, +0.87f, 0.0f, 1, 0.08f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.36, 0.45, 0.35} }, // 33 Sine Sub Bass - { "Sine Sub Bass","BASS", { O_SIN, O_SIN, 0, 100, 1, 380, 0.20f, 55, 10, - 0.003f, 0.35f, 0.85f, 0.10f, - 0.003f, 0.10f, 0.30f, 0.10f, - 3.5f, 0, 0.06f, 0, - 2, 0.25f, 0.20f, - 0.90f, 0.0f, 1, 0.05f, 0, 0 } }, + { "Sine Sub Bass","BASS", { O_SIN, O_SIN, 0, 100, 1, 380, 0.20f, 55, 10, +0.003f, 0.35f, 0.85f, 0.10f, +0.003f, 0.10f, 0.30f, 0.10f, +3.5f, 0, 0.06f, 0, +2, 0.16, 0.19, +0.92f, 0.0f, 1, 0.05f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.38, 0.45, 0.35} }, // == LEAD ============================================================== // 13 Saw Lead - { "Saw Lead", "LEAD", { O_SAW, O_SAW, 14, 50, 1, 3800, 0.25f, 30, 60, - 0.005f, 0.30f, 0.80f, 0.20f, - 0.005f, 0.15f, 0.30f, 0.15f, - 5.4f, 0, 0.14f, 1, - 0, 0.0f, 0.28f, - 0.86f, 0.0f, 1, 0.06f, 0, 0 } }, + { "Saw Lead", "LEAD", { O_SAW, O_SAW, 14, 50, 1, 3800, 0.25f, 30, 60, +0.005f, 0.30f, 0.80f, 0.20f, +0.005f, 0.15f, 0.30f, 0.15f, +5.4f, 0, 0.14f, 1, +3, 0.26, 0.22, +1.00f, 0.0f, 1, 0.06f, 0, 0, +0, 0, 0, 0, 0, +5, 0, 0.00, 0.35, 0.25} }, // 14 Mr. Square - { "Mr. Square", "LEAD", { O_PUL, O_PUL, 7, 60, 1, 2400, 0.22f, 20, 70, - 0.003f, 0.25f, 0.72f, 0.18f, - 0.003f, 0.12f, 0.25f, 0.12f, - 6.6f, 0, 0.10f, 1, - 0, 0.0f, 0.25f, - 0.84f, 0.0f, 1, 0.05f, 0, 0 } }, + { "Mr. Square", "LEAD", { O_SPL, O_SPL, 7, 60, 1, 2400, 0.22f, 20, 70, +0.003f, 0.25f, 0.72f, 0.18f, +0.003f, 0.12f, 0.25f, 0.12f, +3.5f, 2, 0.25, 0, +3, 0.26, 0.22, +1.00f, 0.0f, 1, 0.05f, 0, 0, +0, 0, 0, 0, 0, +5, 0, 0.00, 0.35, 0.25} }, // 16 8bit Chiptune - { "8bit Chiptune", "LEAD", { O_PUL, O_PUL, 0, 30, 1, 9000, 0.10f, 10, 70, - 0.003f, 0.12f, 0.90f, 0.12f, - 0.003f, 0.06f, 0.10f, 0.08f, - 9.0f, 0, 0.05f, 0, - 0, 0.0f, 0.20f, - 0.80f, 0.0f, 6, 0.0f, 0, 0 } }, + { "8bit Chiptune", "LEAD", { O_SPL, O_PUL, 0, 30, 1, 9000, 0.10f, 10, 70, +0.003f, 0.12f, 0.90f, 0.12f, +0.003f, 0.06f, 0.10f, 0.08f, +6.0f, 3, 0.3f, 0, +3, 0.26, 0.22, +0.97f, 0.0f, 6, 0.0f, 0, 0, +0, 0, 0, 0, 0, +5, 2, 0.31, 0.35, 0.25} }, // 23 Detuned Lead - { "Detuned Lead", "LEAD", { O_SAW, O_SAW, 18, 45, 1, 4100, 0.20f, 35, 60, - 0.004f, 0.22f, 0.85f, 0.16f, - 0.004f, 0.12f, 0.30f, 0.10f, - 6.8f, 0, 0.09f, 1, - 2, 0.25f, 0.45f, - 0.85f, 0.0f, 1, 0.05f, 0, 0 } }, + { "Detuned Lead", "LEAD", { O_SUP, O_SAW, 18, 45, 1, 4100, 0.20f, 35, 60, +0.004f, 0.22f, 0.85f, 0.16f, +0.004f, 0.12f, 0.30f, 0.10f, +2.8f, 2, 0.25, 0, +3, 0.26, 0.22, +0.95f, 0.0f, 1, 0.05f, 0, 0, +0, 0, 0, 0, 0, +5, 0, 0.00, 0.35, 0.25} }, // 24 Square Lead - { "Square Lead", "LEAD", { O_PUL, O_PUL, 10, 55, 1, 5200, 0.25f, 30, 65, - 0.004f, 0.35f, 0.72f, 0.20f, - 0.004f, 0.15f, 0.25f, 0.12f, - 7.2f, 0, 0.08f, 1, - 1, 0.30f, 0.25f, - 0.85f, 0.0f, 1, 0.06f, 0, 0 } }, + { "Square Lead", "LEAD", { O_PUL, O_PUL, 10, 55, 1, 5200, 0.25f, 30, 65, +0.004f, 0.35f, 0.72f, 0.20f, +0.004f, 0.15f, 0.25f, 0.12f, +7.2f, 0, 0.08f, 1, +3, 0.26, 0.22, +1.00f, 0.0f, 1, 0.06f, 0, 0, +0, 0, 0, 0, 0, +5, 0, 0.00, 0.35, 0.25} }, // 28 Octave Lead - { "Octave Lead", "LEAD", { O_PUL, O_SAW, 0, 45, 1, 4200, 0.20f, 25, 65, - 0.004f, 0.28f, 0.78f, 0.18f, - 0.004f, 0.14f, 0.28f, 0.12f, - 6.0f, 0, 0.12f, 1, - 2, 0.28f, 0.35f, - 0.86f, 0.0f, 1, 0.05f, 0, 0 } }, + { "Octave Lead", "LEAD", { O_DSW, O_PUL, 0, 45, 1, 4200, 0.20f, 25, 65, +0.004f, 0.28f, 0.78f, 0.18f, +0.004f, 0.14f, 0.28f, 0.12f, +3.2f, 2, 0.25, 0, +3, 0.26, 0.22, +1.00f, 0.0f, 1, 0.05f, 0, 0, +0, 0, 0, 0, 0, +5, 0, 0.00, 0.35, 0.25} }, // 32 Pulse Echo - { "Pulse Echo", "LEAD", { O_PUL, O_PUL, 0, 35, 1, 6000, 0.18f, 15, 60, - 0.005f, 0.32f, 0.70f, 0.20f, - 0.005f, 0.16f, 0.30f, 0.15f, - 8.0f, 0, 0.10f, 0, - 2, 0.45f, 0.38f, - 0.84f, 0.0f, 1, 0.04f, 0, 0 } }, + { "Pulse Echo", "LEAD", { O_PUL, O_PUL, 0, 35, 1, 6000, 0.18f, 15, 60, +0.005f, 0.32f, 0.70f, 0.20f, +0.005f, 0.16f, 0.30f, 0.15f, +8.0f, 0, 0.10f, 0, +3, 0.26, 0.22, +1.00f, 0.0f, 1, 0.04f, 0, 0, +0, 0, 0, 0, 0, +5, 0, 0.00, 0.35, 0.25} }, // 37 Echo Flute - { "Echo Flute", "LEAD", { O_TRI, O_SIN, 0, 85, 1, 3000, 0.15f, 20, 55, - 0.05f, 0.50f, 0.75f, 0.25f, - 0.04f, 0.30f, 0.40f, 0.20f, - 4.8f, 0, 0.10f, 1, - 2, 0.40f, 0.45f, - 0.86f, 0.0f, 1, 0.06f, 0, 0 } }, + { "Echo Flute", "LEAD", { O_TRI, O_SIN, 0, 85, 1, 3000, 0.15f, 20, 55, +0.05f, 0.50f, 0.75f, 0.25f, +0.04f, 0.30f, 0.40f, 0.20f, +4.8f, 0, 0.10f, 1, +3, 0.26, 0.22, +1.00f, 0.0f, 1, 0.06f, 0, 0, +0, 0, 0, 0, 0, +5, 0, 0.00, 0.35, 0.25} }, // 48 Delay Garden - { "Delay Garden", "LEAD", { O_SAW, O_SAW, 12, 50, 1, 3200, 0.20f, 55, 40, - 0.005f, 0.40f, 0.75f, 0.30f, - 0.15f, 0.80f, 0.35f, 0.60f, - 4.5f, 0, 0.15f, 0, - 2, 0.55f, 0.50f, - 0.85f, 0.0f, 1, 0.06f, 0, 0 } }, + { "Delay Garden", "LEAD", { O_SUP, O_PUL, 12, 50, 1, 3200, 0.20f, 55, 40, +0.005f, 0.40f, 0.75f, 0.30f, +0.15f, 0.80f, 0.35f, 0.60f, +1.8f, 1, 0.5f, 2, +3, 0.26, 0.22, +1.00f, 0.0f, 1, 0.06f, 0, 0, +0, 0, 0, 0, 0, +5, 0, 0.00, 0.35, 0.25} }, // 49 Cosmic Echo - { "Cosmic Echo", "LEAD", { O_TRI, O_SIN, 0, 70, 1, 2600, 0.30f, 50, 35, - 0.015f, 0.50f, 0.70f, 0.40f, - 0.10f, 1.0f, 0.40f, 0.80f, - 5.5f, 0, 0.12f, 1, - 2, 0.70f, 0.75f, - 0.84f, 0.0f, 1, 0.05f, 0, 0 } }, + { "Cosmic Echo", "LEAD", { O_TNE, O_TRI, 0, 70, 1, 2600, 0.30f, 50, 35, +0.015f, 0.50f, 0.70f, 0.40f, +0.10f, 1.0f, 0.40f, 0.80f, +2.0f, 3, 0.5f, 2, +3, 0.26, 0.22, +1.00f, 0.0f, 1, 0.05f, 0, 0, +0, 0, 0, 0, 0, +5, 0, 0.00, 0.35, 0.25} }, // 50 Stellar Delay - { "Stellar Delay", "LEAD", { O_SAW, O_PUL, 10, 45, 1, 2800, 0.35f, 50, 35, - 0.008f, 0.45f, 0.72f, 0.35f, - 0.12f, 0.90f, 0.38f, 0.70f, - 6.0f, 0, 0.10f, 0, - 2, 0.60f, 0.65f, - 0.85f, 0.0f, 1, 0.05f, 0, 0 } }, + { "Stellar Delay", "LEAD", { O_HSY, O_PUL, 10, 45, 1, 2800, 0.35f, 50, 35, +0.008f, 0.45f, 0.72f, 0.35f, +0.12f, 0.90f, 0.38f, 0.70f, +2.5f, 0, 0.5f, 2, +3, 0.26, 0.22, +1.00f, 0.0f, 1, 0.05f, 0, 0, +0, 0, 0, 0, 0, +5, 0, 0.00, 0.35, 0.25} }, // 51 Pulse Train - { "Pulse Train", "LEAD", { O_PUL, O_PUL, 0, 60, 1, 4000, 0.25f, 45, 55, - 0.005f, 0.35f, 0.80f, 0.25f, - 0.08f, 0.50f, 0.30f, 0.40f, - 8.0f, 0, 0.08f, 0, - 2, 0.65f, 0.45f, - 0.86f, 0.0f, 1, 0.04f, 0, 0 } }, + { "Pulse Train", "LEAD", { O_PWM, O_PWM, 0, 60, 1, 4000, 0.25f, 45, 55, +0.005f, 0.35f, 0.80f, 0.25f, +0.08f, 0.50f, 0.30f, 0.40f, +4.0f, 2, 0.25, 0, +3, 0.26, 0.22, +0.72f, 0.0f, 1, 0.04f, 0, 0, +0, 0, 0, 0, 0, +5, 0, 0.00, 0.35, 0.25} }, // == STRINGS =========================================================== // 4 Movie Strings - { "Movie Strings", "STRINGS", { O_SAW, O_SAW, 6, 45, 1, 2200, 0.15f, 65, 55, - 0.50f, 1.2f, 0.80f, 0.70f, - 0.40f, 0.8f, 0.35f, 0.5f, - 3.1f, 0, 0.10f, 0, - 3, 0.28f, 0.45f, - 0.82f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Movie Strings", "STRINGS", { O_SAW, O_SAW, 6, 45, 1, 2200, 0.15f, 65, 55, +0.50f, 1.2f, 0.80f, 0.70f, +0.40f, 0.8f, 0.35f, 0.5f, +3.1f, 0, 0.10f, 0, +5, 0.36, 0.30, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 0, 0.00, 0.55, 0.28} }, // 18 Strings Ensemble - { "Strings Ens.", "STRINGS", { O_SAW, O_PUL, 8, 58, 1, 3000, 0.10f, 65, 55, - 0.25f, 1.2f, 0.82f, 1.8f, - 0.20f, 0.7f, 0.40f, 0.6f, - 3.8f, 0, 0.10f, 0, - 1, 0.30f, 0.30f, - 0.80f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Strings Ens.", "STRINGS", { O_SUP, O_SUP, 8, 58, 1, 3000, 0.10f, 65, 55, +0.25f, 1.2f, 0.82f, 1.8f, +0.20f, 0.7f, 0.40f, 0.6f, +2.2f, 0, 0.5f, 0, +5, 0.36, 0.30, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 0, 0.00, 0.55, 0.28} }, // 31 Night Strings - { "Night Strings","STRINGS", { O_SAW, O_TRI, 10, 52, 0, 2600, 0.10f, 60, 50, - 1.10f, 2.6f, 0.85f, 2.0f, - 0.55f, 1.6f, 0.40f, 1.1f, - 3.2f, 0, 0.14f, 0, - 3, 0.40f, 0.55f, - 0.84f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Night Strings","STRINGS", { O_SAW, O_TRI, 10, 52, 0, 2600, 0.10f, 60, 50, +1.10f, 2.6f, 0.85f, 2.0f, +0.55f, 1.6f, 0.40f, 1.1f, +3.2f, 0, 0.14f, 0, +5, 0.36, 0.30, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 0, 0.00, 0.55, 0.28} }, // 36 High Strings - { "High Strings", "STRINGS", { O_SAW, O_PUL, 6, 60, 1, 3400, 0.10f, 55, 60, - 0.20f, 1.0f, 0.80f, 1.6f, - 0.15f, 0.60f, 0.40f, 0.7f, - 4.2f, 0, 0.10f, 0, - 1, 0.35f, 0.40f, - 0.82f, 0.0f, 16, 0.0f, 0, 0 } }, + { "High Strings", "STRINGS", { O_SUP, O_PUL, 6, 60, 1, 3400, 0.10f, 55, 60, +0.20f, 1.0f, 0.80f, 1.6f, +0.15f, 0.60f, 0.40f, 0.7f, +2.0f, 0, 0.5f, 2, +5, 0.36, 0.30, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 0, 0.00, 0.55, 0.28} }, // 44 Frozen Strings - { "Frozen Strings","STRINGS", { O_SAW, O_PUL, 10, 55, 1, 2400, 0.12f, 60, 55, - 0.20f, 1.0f, 0.80f, 1.6f, - 0.15f, 0.60f, 0.40f, 0.7f, - 4.2f, 0, 0.10f, 0, - 1, 0.35f, 0.40f, - 0.82f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Frozen Strings","STRINGS", { O_SUP, O_PWM, 10, 55, 1, 2400, 0.12f, 60, 55, +0.20f, 1.0f, 0.80f, 1.6f, +0.15f, 0.60f, 0.40f, 0.7f, +1.6f, 1, 0.5f, 0, +5, 0.36, 0.30, +0.70f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 1, 0.35, 0.55, 0.28} }, // 58 Deep Strings - { "Deep Strings", "STRINGS", { O_SAW, O_SAW, 12, 50, 1, 1800, 0.12f, 65, 50, - 0.40f, 1.4f, 0.82f, 1.5f, - 0.30f, 0.80f, 0.38f, 0.60f, - 3.5f, 0, 0.12f, 0, - 3, 0.38f, 0.50f, - 0.82f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Deep Strings", "STRINGS", { O_DSW, O_SAW, 12, 50, 1, 1800, 0.12f, 65, 50, +0.40f, 1.4f, 0.82f, 1.5f, +0.30f, 0.80f, 0.38f, 0.60f, +1.5f, 1, 0.5f, 0, +5, 0.36, 0.30, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 0, 0.00, 0.55, 0.28} }, // 59 Vinyl Strings - { "Vinyl Strings","STRINGS", { O_SAW, O_TRI, 8, 48, 1, 2000, 0.15f, 60, 45, - 0.35f, 1.2f, 0.78f, 1.4f, - 0.25f, 0.70f, 0.35f, 0.55f, - 3.2f, 0, 0.10f, 0, - 1, 0.32f, 0.42f, - 0.84f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Vinyl Strings","STRINGS", { O_SAW, O_TRI, 8, 48, 1, 2000, 0.15f, 60, 45, +0.35f, 1.2f, 0.78f, 1.4f, +0.25f, 0.70f, 0.35f, 0.55f, +2.0f, 1, 0.4f, 0, +5, 0.36, 0.30, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 0, 0.00, 0.55, 0.28} }, // 60 Brass Ensemble - { "Brass Ens.", "STRINGS", { O_SAW, O_PUL, 5, 55, 1, 2600, 0.20f, 50, 50, - 0.15f, 0.80f, 0.75f, 0.50f, - 0.10f, 0.50f, 0.30f, 0.40f, - 4.0f, 0, 0.08f, 0, - 1, 0.30f, 0.35f, - 0.82f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Brass Ens.", "STRINGS", { O_WRP, O_SAW, 5, 55, 1, 2600, 0.20f, 50, 50, +0.15f, 0.80f, 0.75f, 0.50f, +0.10f, 0.50f, 0.30f, 0.40f, +1.8f, 2, 0.25, 0, +5, 0.36, 0.30, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 0, 0.00, 0.55, 0.28} }, // == DUB =============================================================== // 27 Techno Bass - { "Techno Bass", "DUB", { O_SAW, O_PUL, 0, 88, 1, 480, 0.45f, 60, 10, - 0.003f, 0.40f, 0.75f, 0.10f, - 0.003f, 0.12f, 0.15f, 0.08f, - 2.0f, 2, 0.35f, 0, - 2, 0.32f, 0.28f, - 0.92f, 0.0f, 1, 0.03f, 0, 0 } }, + { "Techno Bass", "DUB", { O_DSW, O_PUL, 0, 88, 1, 480, 0.45f, 60, 10, +0.003f, 0.40f, 0.75f, 0.10f, +0.003f, 0.12f, 0.15f, 0.08f, +2.5f, 2, 0.28, 0, +6, 0.32, 0.30, +0.75f, 0.0f, 1, 0.03f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.42, 0.40, 0.25} }, // 38 Dub Rez Bass - { "Dub Rez Bass", "DUB", { O_SAW, O_PUL, -5, 60, 1, 500, 0.65f, 45, 5, - 0.004f, 0.35f, 0.80f, 0.12f, - 0.004f, 0.15f, 0.25f, 0.12f, - 0.8f, 3, 0.30f, 0, - 2, 0.40f, 0.36f, - 0.90f, 0.0f, 1, 0.05f, 0, 0 } }, + { "Dub Rez Bass", "DUB", { O_SAW, O_PUL, -5, 60, 1, 500, 0.65f, 45, 5, +0.004f, 0.35f, 0.80f, 0.12f, +0.004f, 0.15f, 0.25f, 0.12f, +0.8f, 3, 0.30f, 0, +6, 0.32, 0.30, +0.62f, 0.0f, 1, 0.05f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.40, 0.55, 0.40} }, // 61 Dub Sub - { "Dub Sub", "DUB", { O_SIN, O_SIN, 0, 100, 1, 350, 0.15f, 30, 15, - 0.003f, 0.40f, 0.85f, 0.15f, - 0.003f, 0.12f, 0.25f, 0.10f, - 3.0f, 0, 0.05f, 0, - 2, 0.45f, 0.35f, - 0.90f, 0.0f, 1, 0.04f, 0, 0 } }, + { "Dub Sub", "DUB", { O_SIN, O_SIN, 0, 100, 1, 350, 0.15f, 30, 15, +0.003f, 0.40f, 0.85f, 0.15f, +0.003f, 0.12f, 0.25f, 0.10f, +3.0f, 0, 0.05f, 0, +6, 0.32, 0.30, +1.00f, 0.0f, 1, 0.04f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.33, 0.40, 0.25} }, // 62 Dub Wobble - { "Dub Wobble", "DUB", { O_SAW, O_PUL, 0, 75, 1, 400, 0.55f, 65, 20, - 0.003f, 0.35f, 0.78f, 0.12f, - 0.003f, 0.15f, 0.20f, 0.10f, - 0.5f, 2, 0.40f, 0, - 2, 0.50f, 0.40f, - 0.90f, 0.0f, 1, 0.03f, 0, 0 } }, + { "Dub Wobble", "DUB", { O_SAW, O_PUL, 0, 75, 1, 400, 0.55f, 65, 20, +0.003f, 0.35f, 0.78f, 0.12f, +0.003f, 0.15f, 0.20f, 0.10f, +0.5f, 2, 0.28, 0, +6, 0.32, 0.30, +0.90f, 0.0f, 1, 0.03f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.50, 0.60, 0.45} }, // 63 Dub Rumble - { "Dub Rumble", "DUB", { O_SAW, O_SIN, -3, 65, 1, 380, 0.40f, 50, 10, - 0.004f, 0.30f, 0.82f, 0.10f, - 0.004f, 0.10f, 0.18f, 0.08f, - 1.2f, 3, 0.30f, 0, - 2, 0.55f, 0.45f, - 0.88f, 0.0f, 1, 0.04f, 0, 0 } }, + { "Dub Rumble", "DUB", { O_HSY, O_SIN, -3, 65, 1, 380, 0.40f, 50, 10, +0.004f, 0.30f, 0.82f, 0.10f, +0.004f, 0.10f, 0.18f, 0.08f, +2.5f, 0, 0.4f, 0, +6, 0.32, 0.30, +1.00f, 0.0f, 1, 0.04f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.30, 0.40, 0.25} }, // 64 Dub Delay Bass - { "Dub Delay Bs", "DUB", { O_PUL, O_SIN, 0, 78, 1, 420, 0.50f, 55, 15, - 0.003f, 0.30f, 0.80f, 0.10f, - 0.003f, 0.10f, 0.20f, 0.08f, - 1.5f, 2, 0.35f, 0, - 2, 0.60f, 0.50f, - 0.90f, 0.0f, 1, 0.03f, 0, 0 } }, + { "Dub Delay Bs", "DUB", { O_PWM, O_SIN, 0, 78, 1, 420, 0.50f, 55, 15, +0.003f, 0.30f, 0.80f, 0.10f, +0.003f, 0.10f, 0.20f, 0.08f, +1.8f, 0, 0.45f, 0, +6, 0.32, 0.30, +0.70f, 0.0f, 1, 0.03f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.30, 0.40, 0.25} }, // == CHORDS ============================================================ // 65 Chord Stab - { "Chord Stab", "CHORDS", { O_SAW, O_SAW, 6, 55, 1, 3200, 0.20f, 40, 30, - 0.003f, 0.20f, 0.0f, 0.10f, - 0.002f, 0.10f, 0.02f, 0.08f, - 6.0f, 0, 0.05f, 2, - 1, 0.35f, 0.25f, - 0.84f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Chord Stab", "CHORDS", { O_CHD, O_SAW, 6, 55, 1, 3200, 0.20f, 40, 30, +0.003f, 0.20f, 0.0f, 0.10f, +0.002f, 0.10f, 0.02f, 0.08f, +2.5f, 2, 0.25, 0, +5, 0.36, 0.30, +0.84f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 2, 0.33, 0.40, 0.20} }, // 66 Super Chord - { "Super Chord", "CHORDS", { O_SAW, O_PUL, 10, 50, 1, 2800, 0.18f, 45, 35, - 0.004f, 0.25f, 0.0f, 0.12f, - 0.003f, 0.12f, 0.03f, 0.10f, - 5.5f, 0, 0.06f, 2, - 1, 0.40f, 0.30f, - 0.84f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Super Chord", "CHORDS", { O_SUP, O_SUP, 10, 50, 1, 2800, 0.18f, 45, 35, +0.004f, 0.25f, 0.0f, 0.12f, +0.003f, 0.12f, 0.03f, 0.10f, +2.2f, 2, 0.5f, 2, +5, 0.36, 0.30, +0.84f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 2, 0.34, 0.40, 0.20} }, // 67 Poly Brass - { "Poly Brass", "CHORDS", { O_SAW, O_SAW, 8, 52, 1, 3000, 0.25f, 35, 40, - 0.005f, 0.30f, 0.0f, 0.15f, - 0.004f, 0.15f, 0.05f, 0.12f, - 5.0f, 0, 0.08f, 2, - 1, 0.35f, 0.28f, - 0.82f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Poly Brass", "CHORDS", { O_WRP, O_SAW, 8, 52, 1, 3000, 0.25f, 35, 40, +0.005f, 0.30f, 0.0f, 0.15f, +0.004f, 0.15f, 0.05f, 0.12f, +2.0f, 2, 0.25, 0, +5, 0.36, 0.30, +0.82f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 0, 0.00, 0.40, 0.20} }, // 68 Saw Stack - { "Saw Stack", "CHORDS", { O_SAW, O_SAW, 14, 55, 1, 2600, 0.15f, 50, 30, - 0.003f, 0.18f, 0.0f, 0.08f, - 0.002f, 0.08f, 0.02f, 0.06f, - 6.5f, 0, 0.04f, 2, - 1, 0.30f, 0.22f, - 0.82f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Saw Stack", "CHORDS", { O_SUP, O_SAW, 14, 55, 1, 2600, 0.15f, 50, 30, +0.003f, 0.18f, 0.0f, 0.08f, +0.002f, 0.08f, 0.02f, 0.06f, +2.8f, 2, 0.25, 0, +5, 0.36, 0.30, +0.82f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 0, 0.00, 0.40, 0.20} }, // 69 Deep Chord - { "Deep Chord", "CHORDS", { O_TRI, O_SAW, 4, 50, 1, 2200, 0.22f, 55, 35, - 0.004f, 0.22f, 0.0f, 0.12f, - 0.003f, 0.10f, 0.03f, 0.10f, - 5.0f, 0, 0.06f, 2, - 1, 0.38f, 0.28f, - 0.84f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Deep Chord", "CHORDS", { O_CHD, O_TRI, 4, 50, 1, 2200, 0.22f, 55, 35, +0.004f, 0.22f, 0.0f, 0.12f, +0.003f, 0.10f, 0.03f, 0.10f, +1.8f, 1, 0.5f, 2, +5, 0.36, 0.30, +0.84f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 2, 0.30, 0.40, 0.20} }, // 70 Synth Stab - { "Synth Stab", "CHORDS", { O_PUL, O_SAW, 5, 58, 1, 3500, 0.30f, 35, 25, - 0.003f, 0.15f, 0.0f, 0.08f, - 0.002f, 0.08f, 0.02f, 0.06f, - 7.0f, 0, 0.04f, 2, - 1, 0.32f, 0.20f, - 0.86f, 0.0f, 12, 0.0f, 0, 0 } }, + { "Synth Stab", "CHORDS", { O_PWM, O_SAW, 5, 58, 1, 3500, 0.30f, 35, 25, +0.003f, 0.15f, 0.0f, 0.08f, +0.002f, 0.08f, 0.02f, 0.06f, +3.0f, 2, 0.25, 0, +5, 0.36, 0.30, +0.86f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 0, 0.00, 0.40, 0.20} }, // == SYNTH ============================================================= // 71 Poly Sync - { "Poly Sync", "SYNTH", { O_SAW, O_PUL, 8, 55, 1, 3400, 0.25f, 40, 35, - 0.005f, 0.30f, 0.75f, 0.18f, - 0.004f, 0.15f, 0.25f, 0.12f, - 5.5f, 0, 0.12f, 0, - 1, 0.32f, 0.28f, - 0.84f, 0.0f, 10, 0.0f, 0, 0 } }, + { "Poly Sync", "SYNTH", { O_HSY, O_HSY, 8, 55, 1, 3400, 0.25f, 40, 35, +0.005f, 0.30f, 0.75f, 0.18f, +0.004f, 0.15f, 0.25f, 0.12f, +2.5f, 2, 0.25, 0, +3, 0.26, 0.22, +1.00f, 0.0f, 10, 0.0f, 0, 0, +0, 0, 0, 0, 0, +5, 2, 0.25, 0.45, 0.30} }, // 72 Dark Synth - { "Dark Synth", "SYNTH", { O_SAW, O_SAW, 12, 48, 1, 2000, 0.35f, 60, 25, - 0.008f, 0.35f, 0.70f, 0.20f, - 0.006f, 0.20f, 0.30f, 0.15f, - 4.0f, 0, 0.15f, 0, - 1, 0.35f, 0.32f, - 0.82f, 0.0f, 10, 0.0f, 0, 0 } }, + { "Dark Synth", "SYNTH", { O_DSW, O_SAW, 12, 48, 1, 2000, 0.35f, 60, 25, +0.008f, 0.35f, 0.70f, 0.20f, +0.006f, 0.20f, 0.30f, 0.15f, +1.5f, 2, 0.25, 0, +3, 0.26, 0.22, +1.00f, 0.0f, 10, 0.0f, 0, 0, +0, 0, 0, 0, 0, +5, 2, 0.25, 0.45, 0.30} }, // 73 Bright Synth - { "Bright Synth", "SYNTH", { O_SAW, O_TRI, 10, 50, 1, 4200, 0.15f, 30, 45, - 0.004f, 0.25f, 0.80f, 0.15f, - 0.003f, 0.12f, 0.28f, 0.10f, - 6.0f, 0, 0.10f, 1, - 1, 0.28f, 0.25f, - 0.85f, 0.0f, 10, 0.0f, 0, 0 } }, + { "Bright Synth", "SYNTH", { O_HSY, O_TRI, 10, 50, 1, 4200, 0.15f, 30, 45, +0.004f, 0.25f, 0.80f, 0.15f, +0.003f, 0.12f, 0.28f, 0.10f, +3.0f, 0, 0.5f, 2, +3, 0.26, 0.22, +1.00f, 0.0f, 10, 0.0f, 0, 0, +0, 0, 0, 0, 0, +5, 2, 0.25, 0.45, 0.30} }, // 74 Mono Synth - { "Mono Synth", "SYNTH", { O_PUL, O_SAW, 0, 60, 1, 3000, 0.30f, 45, 40, - 0.003f, 0.22f, 0.78f, 0.15f, - 0.003f, 0.10f, 0.25f, 0.10f, - 5.0f, 0, 0.12f, 1, - 0, 0.0f, 0.25f, - 0.85f, 0.0f, 1, 0.06f, 0, 0 } }, + { "Mono Synth", "SYNTH", { O_PWM, O_SAW, 0, 60, 1, 3000, 0.30f, 45, 40, +0.003f, 0.22f, 0.78f, 0.15f, +0.003f, 0.10f, 0.25f, 0.10f, +2.8f, 2, 0.25, 0, +3, 0.26, 0.22, +0.83f, 0.0f, 1, 0.06f, 0, 0, +0, 0, 0, 0, 0, +5, 2, 0.25, 0.45, 0.30} }, // 75 Retro Synth - { "Retro Synth", "SYNTH", { O_SAW, O_PUL, 6, 52, 1, 2800, 0.22f, 38, 50, - 0.005f, 0.28f, 0.72f, 0.18f, - 0.004f, 0.14f, 0.22f, 0.12f, - 5.5f, 0, 0.10f, 0, - 1, 0.30f, 0.30f, - 0.84f, 0.0f, 10, 0.0f, 0, 0 } }, + { "Retro Synth", "SYNTH", { O_SAW, O_PUL, 6, 52, 1, 2800, 0.22f, 38, 50, +0.005f, 0.28f, 0.72f, 0.18f, +0.004f, 0.14f, 0.22f, 0.12f, +5.5f, 0, 0.10f, 0, +3, 0.26, 0.22, +1.00f, 0.0f, 10, 0.0f, 0, 0, +0, 0, 0, 0, 0, +5, 2, 0.25, 0.45, 0.30} }, // 76 Sine Synth - { "Sine Synth", "SYNTH", { O_SIN, O_TRI, 4, 60, 1, 3600, 0.18f, 35, 30, - 0.006f, 0.30f, 0.78f, 0.20f, - 0.005f, 0.18f, 0.28f, 0.15f, - 4.5f, 0, 0.10f, 0, - 1, 0.32f, 0.28f, - 0.84f, 0.0f, 10, 0.0f, 0, 0 } }, + { "Sine Synth", "SYNTH", { O_FM, O_TRI, 4, 60, 1, 3600, 0.18f, 35, 30, +0.006f, 0.30f, 0.78f, 0.20f, +0.005f, 0.18f, 0.28f, 0.15f, +2.2f, 1, 0.45f, 2, +3, 0.26, 0.22, +1.00f, 0.0f, 10, 0.0f, 0, 0, +0, 0, 0, 0, 0, +5, 2, 0.25, 0.45, 0.30} }, // == ARP =============================================================== // 77 Arp Saw - { "Arp Saw", "ARP", { O_SAW, O_SAW, 6, 55, 1, 3800, 0.20f, 35, 45, - 0.005f, 0.15f, 0.70f, 0.08f, - 0.004f, 0.10f, 0.20f, 0.08f, - 6.0f, 0, 0.10f, 0, - 1, 0.28f, 0.20f, - 0.84f, 0.0f, 10, 0.0f, 0, 0, - 1, 2, 0, 2, 70 } }, + { "Arp Saw", "ARP", { O_SAW, O_SAW, 6, 55, 1, 3800, 0.20f, 35, 45, +0.005f, 0.15f, 0.70f, 0.08f, +0.004f, 0.10f, 0.20f, 0.08f, +6.0f, 0, 0.10f, 0, +3, 0.24, 0.27, +1.00f, 0.0f, 10, 0.0f, 0, 0, +1, 2, 0, 2, 70, +4, 0, 0.00, 0.35, 0.20} }, // 78 Arp Pulse - { "Arp Pulse", "ARP", { O_PUL, O_PUL, 4, 58, 1, 3200, 0.25f, 40, 50, - 0.004f, 0.12f, 0.65f, 0.06f, - 0.003f, 0.08f, 0.18f, 0.06f, - 7.0f, 0, 0.08f, 0, - 1, 0.30f, 0.18f, - 0.84f, 0.0f, 10, 0.0f, 0, 0, - 1, 2, 0, 2, 70 } }, + { "Arp Pulse", "ARP", { O_PWM, O_PWM, 4, 58, 1, 3200, 0.25f, 40, 50, +0.004f, 0.12f, 0.65f, 0.06f, +0.003f, 0.08f, 0.18f, 0.06f, +4.5f, 2, 0.25, 0, +3, 0.24, 0.27, +0.87f, 0.0f, 10, 0.0f, 0, 0, +1, 2, 0, 2, 70, +4, 0, 0.00, 0.35, 0.20} }, // 79 Arp Sine - { "Arp Sine", "ARP", { O_SIN, O_TRI, 0, 70, 1, 4000, 0.15f, 30, 35, - 0.003f, 0.10f, 0.60f, 0.05f, - 0.002f, 0.06f, 0.15f, 0.05f, - 5.5f, 0, 0.06f, 0, - 1, 0.25f, 0.15f, - 0.86f, 0.0f, 10, 0.0f, 0, 0, - 1, 1, 2, 2, 60 } }, + { "Arp Sine", "ARP", { O_SIN, O_TRI, 0, 70, 1, 4000, 0.15f, 30, 35, +0.003f, 0.10f, 0.60f, 0.05f, +0.002f, 0.06f, 0.15f, 0.05f, +5.5f, 0, 0.06f, 0, +3, 0.24, 0.27, +1.00f, 0.0f, 10, 0.0f, 0, 0, +1, 1, 2, 2, 60, +4, 0, 0.00, 0.35, 0.20} }, // 80 Arp Space - { "Arp Space", "ARP", { O_TRI, O_SAW, 8, 52, 1, 3000, 0.22f, 45, 40, - 0.005f, 0.18f, 0.70f, 0.10f, - 0.004f, 0.12f, 0.22f, 0.08f, - 5.0f, 0, 0.12f, 0, - 3, 0.45f, 0.40f, - 0.82f, 0.0f, 10, 0.0f, 0, 0, - 1, 4, 0, 2, 70 } }, + { "Arp Space", "ARP", { O_TRI, O_SAW, 8, 52, 1, 3000, 0.22f, 45, 40, +0.005f, 0.18f, 0.70f, 0.10f, +0.004f, 0.12f, 0.22f, 0.08f, +5.0f, 0, 0.12f, 0, +3, 0.24, 0.27, +1.00f, 0.0f, 10, 0.0f, 0, 0, +1, 4, 0, 2, 70, +4, 1, 0.51, 0.35, 0.20} }, // 81 Arp Trance - { "Arp Trance", "ARP", { O_SAW, O_SAW, 10, 50, 1, 3500, 0.18f, 40, 50, - 0.004f, 0.12f, 0.72f, 0.08f, - 0.003f, 0.08f, 0.20f, 0.06f, - 8.0f, 0, 0.10f, 0, - 2, 0.40f, 0.35f, - 0.84f, 0.0f, 10, 0.0f, 0, 0, - 1, 2, 0, 3, 60 } }, + { "Arp Trance", "ARP", { O_SUP, O_SAW, 10, 50, 1, 3500, 0.18f, 40, 50, +0.004f, 0.12f, 0.72f, 0.08f, +0.003f, 0.08f, 0.20f, 0.06f, +5.0f, 2, 0.25, 0, +3, 0.24, 0.27, +1.00f, 0.0f, 10, 0.0f, 0, 0, +1, 2, 0, 3, 60, +4, 1, 0.35, 0.45, 0.30} }, // 82 Arp Square - { "Arp Square", "ARP", { O_PUL, O_SAW, 0, 65, 1, 3000, 0.30f, 35, 45, - 0.003f, 0.10f, 0.65f, 0.05f, - 0.002f, 0.06f, 0.18f, 0.05f, - 7.5f, 0, 0.06f, 0, - 1, 0.30f, 0.18f, - 0.85f, 0.0f, 10, 0.0f, 0, 0, - 1, 2, 1, 2, 60 } }, + { "Arp Square", "ARP", { O_SPL, O_SAW, 0, 65, 1, 3000, 0.30f, 35, 45, +0.003f, 0.10f, 0.65f, 0.05f, +0.002f, 0.06f, 0.18f, 0.05f, +4.0f, 2, 0.25, 0, +3, 0.24, 0.27, +0.91f, 0.0f, 10, 0.0f, 0, 0, +1, 2, 1, 2, 60, +4, 0, 0.00, 0.35, 0.20} }, // 83 Arp Pluck - { "Arp Pluck", "ARP", { O_TRI, O_TRI, 3, 60, 1, 3200, 0.18f, 30, 40, - 0.002f, 0.08f, 0.55f, 0.04f, - 0.002f, 0.05f, 0.15f, 0.04f, - 6.5f, 0, 0.05f, 0, - 1, 0.28f, 0.15f, - 0.86f, 0.0f, 10, 0.0f, 0, 0, - 1, 1, 2, 2, 50 } }, + { "Arp Pluck", "ARP", { O_WRP, O_TRI, 3, 60, 1, 3200, 0.18f, 30, 40, +0.002f, 0.08f, 0.55f, 0.04f, +0.002f, 0.05f, 0.15f, 0.04f, +3.5f, 1, 0.4f, 0, +3, 0.24, 0.27, +1.00f, 0.0f, 10, 0.0f, 0, 0, +1, 1, 2, 2, 50, +4, 0, 0.00, 0.35, 0.20} }, // 84 Moon Pad - { "Moon Pad", "POLY PAD", { O_SIN, O_TRI, 14, 55, 1, 2200, 0.30f, 55, 25, - 1.5f, 2.8f, 0.88f, 3.2f, - 1.0f, 2.0f, 0.40f, 2.2f, - 0.4f, 1, 0.20f, 0, - 3, 0.50f, 0.55f, - 0.82f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Moon Pad", "POLY PAD", { O_SUP, O_TRI, 14, 55, 1, 2200, 0.30f, 55, 25, +1.5f, 2.8f, 0.88f, 3.2f, +1.0f, 2.0f, 0.40f, 2.2f, +0.65f, 0, 0.6f, 2, +5, 0.40, 0.30, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +10, 1, 0.36, 0.50, 0.30} }, // 85 Orchestral - { "Orchestral", "STRINGS", { O_SAW, O_PUL, 8, 55, 1, 2400, 0.12f, 60, 55, - 0.30f, 1.1f, 0.80f, 1.8f, - 0.20f, 0.70f, 0.38f, 0.60f, - 3.6f, 0, 0.10f, 0, - 3, 0.35f, 0.45f, - 0.82f, 0.0f, 16, 0.0f, 0, 0 } }, + { "Orchestral", "STRINGS", { O_SUP, O_SAW, 8, 55, 1, 2400, 0.12f, 60, 55, +0.30f, 1.1f, 0.80f, 1.8f, +0.20f, 0.70f, 0.38f, 0.60f, +1.2f, 0, 0.5f, 2, +5, 0.36, 0.30, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 0, 0.00, 0.55, 0.28} }, // 86 Arp Bubble - { "Arp Bubble", "ARP", { O_TRI, O_SIN, 0, 70, 1, 3800, 0.12f, 25, 30, - 0.002f, 0.08f, 0.55f, 0.04f, - 0.002f, 0.05f, 0.12f, 0.04f, - 7.5f, 0, 0.05f, 0, - 1, 0.25f, 0.12f, - 0.86f, 0.0f, 10, 0.0f, 0, 0, - 1, 1, 3, 2, 50 } }, + { "Arp Bubble", "ARP", { O_TRI, O_SIN, 0, 70, 1, 3800, 0.12f, 25, 30, +0.002f, 0.08f, 0.55f, 0.04f, +0.002f, 0.05f, 0.12f, 0.04f, +7.5f, 0, 0.05f, 0, +3, 0.24, 0.27, +1.00f, 0.0f, 10, 0.0f, 0, 0, +1, 1, 3, 2, 50, +4, 0, 0.00, 0.35, 0.20} }, // 87 Arp Pyramid - { "Arp Pyramid", "ARP", { O_PUL, O_SAW, 0, 62, 1, 3000, 0.25f, 30, 45, - 0.003f, 0.10f, 0.60f, 0.05f, - 0.002f, 0.06f, 0.15f, 0.05f, - 6.0f, 0, 0.06f, 0, - 1, 0.28f, 0.15f, - 0.85f, 0.0f, 10, 0.0f, 0, 0, - 1, 3, 2, 3, 60 } }, + { "Arp Pyramid", "ARP", { O_PUL, O_SAW, 0, 62, 1, 3000, 0.25f, 30, 45, +0.003f, 0.10f, 0.60f, 0.05f, +0.002f, 0.06f, 0.15f, 0.05f, +6.0f, 0, 0.06f, 0, +3, 0.24, 0.27, +1.00f, 0.0f, 10, 0.0f, 0, 0, +1, 3, 2, 3, 60, +4, 0, 0.00, 0.35, 0.20} }, // 88 Arp Sweep - { "Arp Sweep", "ARP", { O_SAW, O_SAW, 8, 55, 1, 3400, 0.20f, 45, 35, - 0.004f, 0.15f, 0.68f, 0.08f, - 0.003f, 0.10f, 0.20f, 0.06f, - 5.5f, 0, 0.10f, 0, - 3, 0.42f, 0.35f, - 0.83f, 0.0f, 10, 0.0f, 0, 0, - 1, 4, 0, 2, 65 } }, + { "Arp Sweep", "ARP", { O_SUP, O_SAW, 8, 55, 1, 3400, 0.20f, 45, 35, +0.004f, 0.15f, 0.68f, 0.08f, +0.003f, 0.10f, 0.20f, 0.06f, +4.0f, 0, 0.5f, 0, +3, 0.24, 0.27, +1.00f, 0.0f, 10, 0.0f, 0, 0, +1, 4, 0, 2, 65, +4, 0, 0.00, 0.35, 0.20} }, // 89 Arp Chimes - { "Arp Chimes", "ARP", { O_SIN, O_TRI, 12, 60, 1, 4200, 0.25f, 35, 30, - 0.002f, 0.06f, 0.50f, 0.03f, - 0.002f, 0.04f, 0.10f, 0.03f, - 6.0f, 0, 0.04f, 0, - 3, 0.38f, 0.40f, - 0.84f, 0.0f, 10, 0.0f, 0, 0, - 1, 2, 2, 2, 45 } }, + { "Arp Chimes", "ARP", { O_TNE, O_TNE, 12, 60, 1, 4200, 0.25f, 35, 30, +0.002f, 0.06f, 0.50f, 0.03f, +0.002f, 0.04f, 0.10f, 0.03f, +3.8f, 3, 0.5f, 2, +3, 0.24, 0.27, +1.00f, 0.0f, 10, 0.0f, 0, 0, +1, 2, 2, 2, 45, +4, 1, 0.39, 0.35, 0.20} }, // 90 Arp Midnight - { "Arp Midnight", "ARP", { O_PUL, O_PUL, 6, 55, 1, 2600, 0.30f, 40, 40, - 0.004f, 0.12f, 0.62f, 0.06f, - 0.003f, 0.08f, 0.18f, 0.05f, - 5.0f, 0, 0.08f, 0, - 2, 0.35f, 0.48f, - 0.85f, 0.0f, 10, 0.0f, 0, 0, - 1, 2, 1, 2, 55 } }, + { "Arp Midnight", "ARP", { O_PUL, O_PUL, 6, 55, 1, 2600, 0.30f, 40, 40, +0.004f, 0.12f, 0.62f, 0.06f, +0.003f, 0.08f, 0.18f, 0.05f, +5.0f, 0, 0.08f, 0, +3, 0.24, 0.27, +0.92f, 0.0f, 10, 0.0f, 0, 0, +1, 2, 1, 2, 55, +4, 2, 0.44, 0.35, 0.20} }, // 91 Arp Cascade - { "Arp Cascade", "ARP", { O_SAW, O_TRI, 10, 52, 1, 3200, 0.15f, 35, 45, - 0.003f, 0.10f, 0.65f, 0.06f, - 0.003f, 0.06f, 0.20f, 0.05f, - 7.0f, 0, 0.06f, 0, - 1, 0.30f, 0.28f, - 0.85f, 0.0f, 10, 0.0f, 0, 0, - 1, 2, 0, 3, 65 } }, + { "Arp Cascade", "ARP", { O_SAW, O_TRI, 10, 52, 1, 3200, 0.15f, 35, 45, +0.003f, 0.10f, 0.65f, 0.06f, +0.003f, 0.06f, 0.20f, 0.05f, +7.0f, 0, 0.06f, 0, +3, 0.24, 0.27, +1.00f, 0.0f, 10, 0.0f, 0, 0, +1, 2, 0, 3, 65, +4, 0, 0.00, 0.35, 0.20} }, + // == PSYCHEDELIC ======================================================= + // 92 Acid Trip + { "Acid Trip", "PSYCHEDELIC", { O_SAW, O_SAW, 4, 60, 1, 900, 0.65f, 80, 20, +0.003f, 0.20f, 0.60f, 0.10f, +0.10f, 0.40f, 0.10f, 0.08f, +5.0f, 2, 0.25, 0, +2, 0.20, 0.24, +1.00f, 0.0f, 1, 0.05f, 0, 0, +0, 0, 0, 0, 0, +3, 2, 0.39, 0.75, 0.50} }, + // 93 Purple Haze + { "Purple Haze", "PSYCHEDELIC", { O_SAW, O_SAW, 12, 55, 1, 2400, 0.22f, 55, 30, +0.02f, 0.40f, 0.85f, 0.50f, +0.50f, 0.80f, 0.30f, 0.40f, +1.5f, 1, 0.55f, 2, +6, 0.30, 0.26, +1.00f, 0.0f, 8, 0.0f, 0, 0, +0, 0, 0, 0, 0, +3, 0, 0.00, 0.75, 0.50} }, + // 94 Neon Spiral + { "Neon Spiral", "PSYCHEDELIC", { O_PWM, O_TRI, 6, 58, 2, 2500, 0.40f, 45, 40, +0.003f, 0.12f, 0.60f, 0.06f, +0.002f, 0.08f, 0.15f, 0.05f, +3.5f, 3, 0.45f, 2, +6, 0.30, 0.26, +1.00f, 0.0f, 8, 0.0f, 0, 0, +1, 1, 3, 3, 60, +3, 0, 0.00, 0.75, 0.50} }, + // 95 Magic Fungus + { "Magic Fungus", "PSYCHEDELIC", { O_FM, O_SAW, -9, 45, 1, 1800, 0.35f, 70, 25, +0.60f, 2.0f, 0.85f, 2.4f, +0.70f, 1.6f, 0.40f, 1.8f, +2.0f, 3, 0.6f, 2, +6, 0.30, 0.26, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +3, 0, 0.00, 0.75, 0.50} }, + // 96 Kaleidoscope + { "Kaleidoscope", "PSYCHEDELIC", { O_SUP, O_SAW, 8, 50, 1, 3200, 0.28f, 35, 40, +0.003f, 0.10f, 0.60f, 0.05f, +0.002f, 0.06f, 0.15f, 0.05f, +3.5f, 3, 0.5f, 0, +6, 0.30, 0.26, +1.00f, 0.0f, 8, 0.0f, 0, 0, +1, 2, 2, 3, 55, +3, 0, 0.00, 0.75, 0.50} }, + // 97 Mind Bender + { "Mind Bender", "PSYCHEDELIC", { O_FM, O_TRI, 14, 50, 1, 2800, 0.18f, 50, 30, +0.05f, 0.60f, 0.80f, 0.80f, +0.40f, 1.0f, 0.30f, 0.60f, +2.5f, 2, 0.55f, 2, +6, 0.30, 0.26, +1.00f, 0.0f, 6, 0.0f, 0, 0, +0, 0, 0, 0, 0, +3, 0, 0.00, 0.75, 0.50} }, + // 98 Astral Projection + { "Astral Projection", "PSYCHEDELIC", { O_TNE, O_TRI, 10, 60, 1, 2400, 0.25f, 50, 30, +0.40f, 1.2f, 0.80f, 2.0f, +0.60f, 1.4f, 0.40f, 1.6f, +0.9f, 0, 0.55f, 2, +6, 0.30, 0.26, +1.00f, 0.0f, 12, 0.0f, 0, 0, +1, 1, 2, 2, 80, +3, 1, 0.40, 0.90, 0.60} }, + // 99 Cosmic Dust + { "Cosmic Dust", "PSYCHEDELIC", { O_SUP, O_TRI, 16, 52, 3, 1200, 0.20f, 60, 20, +0.80f, 2.2f, 0.85f, 3.0f, +0.60f, 1.8f, 0.45f, 2.2f, +1.0f, 3, 0.6f, 2, +6, 0.30, 0.26, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +3, 1, 0.30, 0.90, 0.45} }, + // 100 Time Warp + { "Time Warp", "PSYCHEDELIC", { O_WRP, O_PUL, 8, 55, 1, 2000, 0.30f, 70, 35, +0.40f, 1.5f, 0.82f, 1.6f, +0.50f, 1.2f, 0.30f, 1.2f, +2.0f, 0, 0.5f, 2, +6, 0.30, 0.26, +1.00f, 0.0f, 8, 0.0f, 0, 0, +0, 0, 0, 0, 0, +3, 2, 0.40, 0.85, 0.55} }, + // 101 Galactic Disco + { "Galactic Disco", "PSYCHEDELIC", { O_HSY, O_SAW, 6, 58, 1, 3000, 0.35f, 40, 45, +0.05f, 0.30f, 0.75f, 0.30f, +0.20f, 0.50f, 0.20f, 0.20f, +4.5f, 2, 0.25, 0, +6, 0.30, 0.26, +1.00f, 0.0f, 4, 0.04f, 0, 0, +0, 0, 0, 0, 0, +3, 2, 0.36, 0.75, 0.50} }, + // 102 Prism Dreams + { "Prism Dreams", "PSYCHEDELIC", { O_SEQ, O_TRI, 12, 55, 2, 3200, 0.35f, 40, 30, +0.02f, 0.50f, 0.70f, 0.60f, +0.30f, 0.80f, 0.20f, 0.50f, +3.0f, 3, 0.5f, 0, +6, 0.30, 0.26, +1.00f, 0.0f, 8, 0.0f, 0, 0, +1, 1, 2, 2, 60, +3, 1, 0.35, 0.80, 0.50} }, + // 103 Wavy Gravy + { "Wavy Gravy", "PSYCHEDELIC", { O_PWM, O_TRI, 10, 50, 1, 1600, 0.28f, 65, 25, +0.80f, 2.5f, 0.85f, 3.0f, +0.60f, 2.0f, 0.40f, 2.4f, +1.6f, 0, 0.6f, 2, +6, 0.30, 0.26, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +3, 0, 0.00, 0.75, 0.50} }, + // 104 Color Wheel + { "Color Wheel", "PSYCHEDELIC", { O_SUP, O_PWM, 15, 50, 2, 2200, 0.45f, 60, 30, +0.20f, 1.0f, 0.80f, 1.2f, +0.30f, 0.90f, 0.30f, 1.0f, +3.2f, 3, 0.55f, 0, +6, 0.30, 0.26, +0.88f, 0.0f, 8, 0.0f, 0, 0, +0, 0, 0, 0, 0, +3, 0, 0.00, 0.75, 0.50} }, + // 105 Toadstool Waltz + { "Toadstool Waltz", "PSYCHEDELIC", { O_TRI, O_PUL, 5, 65, 1, 2600, 0.15f, 30, 40, +0.003f, 0.10f, 0.55f, 0.06f, +0.003f, 0.06f, 0.12f, 0.05f, +5.0f, 1, 0.08f, 0, +6, 0.30, 0.26, +0.94f, 0.0f, 8, 0.0f, 0, 0, +1, 1, 0, 2, 50, +3, 0, 0.00, 0.75, 0.50} }, + // 106 Rainbow Serpent + { "Rainbow Serpent", "PSYCHEDELIC", { O_SAW, O_SAW, 8, 55, 1, 1200, 0.55f, 75, 20, +0.03f, 0.25f, 0.65f, 0.20f, +0.15f, 0.50f, 0.12f, 0.15f, +5.0f, 3, 0.32f, 0, +6, 0.30, 0.26, +1.00f, 0.0f, 6, 0.04f, 0, 0, +0, 0, 0, 0, 0, +3, 2, 0.39, 0.75, 0.50} }, + // 107 Inner Vision + { "Inner Vision", "PSYCHEDELIC", { O_SIN, O_TRI, -14, 42, 1, 2000, 0.30f, 55, 20, +1.2f, 3.0f, 0.88f, 3.5f, +1.0f, 2.2f, 0.45f, 2.8f, +2.5f, 0, 0.25f, 2, +6, 0.30, 0.26, +0.97f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +3, 0, 0.00, 0.75, 0.50} }, + // 108 Psychedelic Saw + { "Psychedelic Saw", "PSYCHEDELIC", { O_SUP, O_SAW, 18, 48, 1, 3000, 0.20f, 45, 35, +0.03f, 0.40f, 0.80f, 0.40f, +0.30f, 0.70f, 0.25f, 0.40f, +4.0f, 2, 0.25, 0, +6, 0.30, 0.26, +1.00f, 0.0f, 10, 0.0f, 0, 0, +0, 0, 0, 0, 0, +3, 2, 0.30, 0.75, 0.45} }, + // 109 Neon Cavern + { "Neon Cavern", "PSYCHEDELIC", { O_SEQ, O_SAW, 10, 55, 3, 1600, 0.25f, 55, 25, +0.50f, 1.8f, 0.82f, 2.6f, +0.50f, 1.6f, 0.30f, 2.0f, +3.0f, 3, 0.5f, 0, +6, 0.30, 0.26, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +3, 0, 0.00, 0.75, 0.50} }, + // 110 Third Eye + { "Third Eye", "PSYCHEDELIC", { O_SPL, O_SPL, 7, 50, 1, 3800, 0.25f, 65, 40, +0.008f, 0.30f, 0.80f, 0.30f, +0.20f, 0.50f, 0.20f, 0.25f, +4.0f, 2, 0.25, 0, +6, 0.30, 0.26, +1.00f, 0.0f, 8, 0.0f, 0, 0, +0, 0, 0, 0, 0, +3, 0, 0.00, 0.75, 0.50} }, + // 111 Lizard Parade + { "Lizard Parade", "PSYCHEDELIC", { O_PUL, O_TRI, 4, 60, 1, 3100, 0.20f, 28, 40, +0.003f, 0.09f, 0.55f, 0.05f, +0.002f, 0.05f, 0.12f, 0.05f, +7.0f, 3, 0.06f, 0, +6, 0.30, 0.26, +1.00f, 0.0f, 8, 0.0f, 0, 0, +1, 2, 3, 2, 45, +3, 2, 0.44, 0.75, 0.50} }, + // 112 Hologram Field + { "Hologram Field", "PSYCHEDELIC", { O_FM, O_TRI, 20, 50, 1, 4000, 0.25f, 40, 20, +0.50f, 2.0f, 0.85f, 2.5f, +0.40f, 1.5f, 0.40f, 1.8f, +2.5f, 3, 0.5f, 2, +6, 0.30, 0.26, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +3, 2, 0.40, 0.90, 0.55} }, + // 113 Velvet Sludge + { "Velvet Sludge", "PSYCHEDELIC", { O_SAW, O_SAW, 6, 60, 1, 1500, 0.60f, 70, 25, +0.05f, 0.50f, 0.78f, 0.60f, +0.30f, 0.80f, 0.18f, 0.50f, +4.0f, 3, 0.25f, 0, +6, 0.30, 0.26, +0.95f, 0.0f, 4, 0.03f, 0, 0, +0, 0, 0, 0, 0, +3, 0, 0.00, 0.75, 0.50} }, + // 114 Neuron Fizz + { "Neuron Fizz", "PSYCHEDELIC", { O_SEQ, O_NOI, 0, 62, 1, 5000, 0.15f, 30, 0, +0.002f, 0.08f, 0.50f, 0.10f, +0.002f, 0.06f, 0.10f, 0.08f, +5.5f, 3, 0.5f, 0, +6, 0.30, 0.26, +1.00f, 0.0f, 8, 0.0f, 0, 0, +1, 1, 3, 2, 40, +3, 2, 0.45, 0.85, 0.40} }, + // 115 Laser Lotus + { "Laser Lotus", "PSYCHEDELIC", { O_HSY, O_SIN, 9, 72, 2, 4500, 0.30f, 55, 30, +0.004f, 0.20f, 0.70f, 0.12f, +0.003f, 0.10f, 0.20f, 0.10f, +4.5f, 0, 0.6f, 2, +6, 0.30, 0.26, +1.00f, 0.0f, 10, 0.0f, 0, 0, +1, 4, 0, 3, 70, +3, 2, 0.45, 0.85, 0.45} }, + // 116 Perception Shift + { "Perception Shift","PSYCHEDELIC",{ O_FM, O_TRI, -10, 50, 3, 1900, 0.38f, 60, 25, +0.40f, 1.8f, 0.85f, 2.2f, +0.40f, 1.4f, 0.35f, 1.6f, +2.2f, 3, 0.55f, 0, +6, 0.22, 0.30, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.35, 0.85, 0.50} }, + // 117 Stardust Mandala + { "Stardust Mandala","PSYCHEDELIC",{ O_TNE, O_TRI, 10, 58, 1, 3600, 0.20f, 45, 35, +0.40f, 1.0f, 0.80f, 1.8f, +0.40f, 1.2f, 0.35f, 1.4f, +2.0f, 1, 0.5f, 2, +6, 0.30, 0.26, +1.00f, 0.0f, 12, 0.0f, 0, 0, +1, 2, 2, 2, 75, +3, 1, 0.46, 0.75, 0.50} }, + // 118 Electric Kool-Aid + { "Electric Kool-Aid","PSYCHEDELIC",{ O_WRP, O_SAW, 14, 52, 1, 2000, 0.35f, 65, 30, +0.30f, 1.5f, 0.85f, 2.0f, +0.40f, 1.2f, 0.30f, 1.4f, +3.0f, 2, 0.5f, 2, +6, 0.30, 0.26, +1.00f, 0.0f, 8, 0.0f, 0, 0, +0, 0, 0, 0, 0, +3, 0, 0.00, 0.75, 0.50} }, + // == TECHNO ============================================================= + // 119 Berlin Spur + { "Berlin Spur", "TECHNO", { O_HSY, O_SAW, 0, 80, 1, 800, 0.30f, 45, 10, +0.001f, 0.20f, 0.85f, 0.08f, +0.10f, 0.15f, 0.20f, 0.06f, +3.0f, 0, 0.05f, 0, +2, 0.20, 0.24, +1.00f, 0.0f, 1, 0.02f, 0, 0, +0, 0, 0, 0, 0, +0, 0, 0.00, 0.30, 0.20} }, + // 120 Acid House + { "Acid House", "TECHNO", { O_SAW, O_PUL, 0, 62, 1, 650, 0.70f, 85, 5, +0.002f, 0.12f, 0.80f, 0.06f, +0.10f, 0.30f, 0.08f, 0.05f, +7.0f, 0, 0.35f, 0, +2, 0.20, 0.24, +0.72f, 0.0f, 1, 0.03f, 0, 0, +0, 0, 0, 0, 0, +3, 2, 0.34, 0.30, 0.20} }, + // 121 Detroit Dusk + { "Detroit Dusk", "TECHNO", { O_TNE, O_PUL, 5, 55, 1, 2000, 0.25f, 60, 40, +0.02f, 0.60f, 0.75f, 0.50f, +0.30f, 0.80f, 0.20f, 0.50f, +4.0f, 0, 0.12f, 0, +2, 0.20, 0.24, +1.00f, 0.0f, 8, 0.04f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.40, 0.30, 0.20} }, + // 122 Warehouse Stab + { "Warehouse Stab", "TECHNO", { O_PWM, O_PUL, 8, 50, 1, 3500, 0.30f, 70, 50, +0.004f, 0.10f, 0.70f, 0.08f, +0.003f, 0.08f, 0.18f, 0.06f, +6.0f, 0, 0.10f, 0, +2, 0.20, 0.24, +0.95f, 0.0f, 8, 0.0f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.41, 0.30, 0.20} }, + // 123 Raw Filter + { "Raw Filter", "TECHNO", { O_SAW, O_SAW, 4, 58, 1, 1300, 0.40f, 75, 30, +0.003f, 0.15f, 0.78f, 0.10f, +0.20f, 0.40f, 0.12f, 0.20f, +7.0f, 1, 0.18f, 0, +2, 0.20, 0.24, +1.00f, 0.0f, 4, 0.03f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.31, 0.30, 0.20} }, + // 124 Industrialist + { "Industrialist", "TECHNO", { O_NOI, O_WRP, 0, 55, 2, 3000, 0.35f, 40, 20, +0.003f, 0.08f, 0.60f, 0.08f, +0.003f, 0.05f, 0.15f, 0.05f, +15.0f, 3, 0.15f, 0, +2, 0.20, 0.24, +1.0f, 0.0f, 4, 0.0f, 0, 0, +1, 2, 3, 1, 40, +0, 2, 0.31, 0.30, 0.20} }, + // 125 Steel Frame + { "Steel Frame", "TECHNO", { O_FM, O_FM, 0, 70, 2, 4200, 0.45f, 25, 20, +0.002f, 0.10f, 0.55f, 0.06f, +0.003f, 0.08f, 0.10f, 0.05f, +8.0f, 0, 0.05f, 0, +4, 0.30, 0.30, +1.0f, 0.0f, 8, 0.0f, 0, 0, +1, 1, 0, 2, 40, +4, 2, 0.35, 0.30, 0.20} }, + // 126 Voltage Drop + { "Voltage Drop", "TECHNO", { O_SIN, O_DSW, 0, 68, 1, 500, 0.15f, 25, 5, +0.002f, 0.12f, 0.88f, 0.06f, +0.10f, 0.10f, 0.30f, 0.05f, +2.0f, 0, 0.08f, 0, +2, 0.20, 0.24, +0.89f, 0.0f, 1, 0.02f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.40, 0.30, 0.20} }, + // 127 Rave Ready + { "Rave Ready", "TECHNO", { O_SUP, O_SAW, 10, 50, 1, 3000, 0.20f, 55, 45, +0.008f, 0.30f, 0.75f, 0.30f, +0.20f, 0.40f, 0.20f, 0.30f, +6.0f, 0, 0.12f, 0, +2, 0.20, 0.24, +1.0f, 0.0f, 10, 0.0f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.33, 0.30, 0.20} }, + // 128 Unity Arp + { "Unity Arp", "TECHNO", { O_SPL, O_SAW, 0, 55, 1, 3200, 0.25f, 30, 45, +0.003f, 0.08f, 0.60f, 0.05f, +0.002f, 0.06f, 0.15f, 0.05f, +12.0f, 0, 0.08f, 0, +2, 0.20, 0.24, +1.00f, 0.0f, 10, 0.0f, 0, 0, +1, 4, 0, 3, 65, +0, 2, 0.30, 0.45, 0.30} }, + // 129 Cement Block + { "Cement Block", "TECHNO", { O_SAW, O_WRP, 3, 70, 1, 2100, 0.45f, 50, 20, +0.006f, 0.40f, 0.80f, 0.30f, +0.20f, 0.60f, 0.15f, 0.30f, +7.0f, 3, 0.14f, 0, +2, 0.20, 0.24, +1.00f, 0.0f, 1, 0.04f, 0, 0, +0, 0, 0, 0, 0, +0, 0, 0.00, 0.30, 0.20} }, + // 130 Modular Beast + { "Modular Beast", "TECHNO", { O_FM, O_PWM, 6, 65, 2, 1500, 0.35f, 40, 15, +0.004f, 0.15f, 0.65f, 0.10f, +0.05f, 0.20f, 0.10f, 0.08f, +13.0f, 3, 0.45f, 0, +2, 0.20, 0.24, +0.63f, 0.0f, 6, 0.0f, 0, 0, +1, 3, 3, 2, 50, +0, 2, 0.50, 0.50, 0.45} }, + // 131 Midnight Club + { "Midnight Club", "TECHNO", { O_DSW, O_TRI, 8, 55, 1, 900, 0.35f, 55, 30, +0.03f, 0.50f, 0.80f, 0.60f, +0.30f, 0.70f, 0.20f, 0.40f, +5.0f, 1, 0.15f, 0, +2, 0.20, 0.24, +1.00f, 0.0f, 8, 0.05f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.43, 0.30, 0.20} }, + // 132 Neon District + { "Neon District", "TECHNO", { O_FM, O_PUL, 9, 58, 1, 2600, 0.22f, 40, 40, +0.02f, 0.40f, 0.70f, 0.40f, +0.20f, 0.50f, 0.18f, 0.30f, +8.0f, 3, 0.10f, 1, +2, 0.20, 0.24, +1.00f, 0.0f, 8, 0.0f, 0, 0, +0, 0, 0, 0, 0, +0, 1, 0.35, 0.50, 0.35} }, + // 133 Machine Funk + { "Machine Funk", "TECHNO", { O_PUL, O_FM, 0, 72, 1, 1200, 0.40f, 55, 15, +0.01f, 0.25f, 0.75f, 0.15f, +0.15f, 0.40f, 0.12f, 0.15f, +1.0f, 0, 0.05f, 0, +2, 0.20, 0.24, +0.97f, 0.0f, 1, 0.04f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.40, 0.40, 0.30} }, + // 134 Circuit Cluster + { "Circuit Cluster", "TECHNO", { O_SEQ, O_PUL, 0, 62, 1, 2900, 0.20f, 25, 40, +0.002f, 0.08f, 0.55f, 0.04f, +0.002f, 0.05f, 0.12f, 0.04f, +11.0f, 3, 0.06f, 0, +2, 0.20, 0.24, +1.00f, 0.0f, 8, 0.0f, 0, 0, +1, 1, 3, 2, 50, +0, 2, 0.38, 0.30, 0.20} }, + // 135 Subterranean + { "Subterranean", "TECHNO", { O_SIN, O_DSW, 0, 58, 1, 400, 0.20f, 20, 5, +0.05f, 0.40f, 0.90f, 0.50f, +0.40f, 0.50f, 0.25f, 0.40f, +4.0f, 0, 0.20f, 0, +2, 0.20, 0.24, +0.78f, 0.0f, 1, 0.05f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.42, 0.30, 0.20} }, + // 136 Power Plant +{ "Power Plant", "TECHNO", { O_CHD, O_PUL, 5, 50, 1, 2400, 0.20f, 45, 40, +0.006f, 0.25f, 0.78f, 0.20f, +0.20f, 0.40f, 0.18f, 0.25f, +5.0f, 3, 0.12f, 0, +2, 0.20, 0.24, +1.00f, 0.0f, 6, 0.03f, 0, 0, +1, 2, 0, 2, 60, +0, 0, 0.00, 0.30, 0.20} }, + // 137 Hyperspace + { "Hyperspace", "TECHNO", { O_FM, O_SAW, 12, 55, 1, 3400, 0.25f, 50, 35, +0.003f, 0.12f, 0.68f, 0.08f, +0.003f, 0.08f, 0.20f, 0.06f, +15.0f, 3, 0.12f, 1, +2, 0.20, 0.24, +1.00f, 0.0f, 10, 0.0f, 0, 0, +1, 4, 3, 3, 70, +0, 2, 0.40, 0.55, 0.40} }, + // 138 Grid Runner + { "Grid Runner", "TECHNO", { O_PWM, O_SAW, 6, 58, 1, 4000, 0.18f, 35, 40, +0.02f, 0.35f, 0.72f, 0.30f, +0.15f, 0.40f, 0.15f, 0.25f, +10.0f, 0, 0.08f, 0, +2, 0.20, 0.24, +1.00f, 0.0f, 8, 0.0f, 0, 0, +1, 1, 0, 3, 60, +0, 2, 0.35, 0.30, 0.20} }, + // 139 Amplitude + { "Amplitude", "TECHNO", { O_SAW, O_PUL, 8, 52, 1, 2800, 0.25f, 50, 40, +0.008f, 0.25f, 0.75f, 0.20f, +0.15f, 0.40f, 0.20f, 0.20f, +8.0f, 2, 0.40f, 2, +2, 0.20, 0.24, +1.00f, 0.0f, 8, 0.0f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.34, 0.30, 0.20} }, + // 140 Ghastly + { "Ghastly", "TECHNO", { O_WRP, O_NOI, -8, 50, 3, 1800, 0.50f, 60, 20, +0.02f, 0.80f, 0.80f, 1.20f, +0.30f, 1.00f, 0.25f, 1.00f, +2.0f, 0, 0.30f, 0, +2, 0.20, 0.24, +1.00f, 0.0f, 6, 0.04f, 0, 0, +0, 0, 0, 0, 0, +0, 0, 0.00, 0.30, 0.20} }, + // 141 Velocity + { "Velocity", "TECHNO", { O_DSW, O_PUL, 0, 68, 1, 3500, 0.15f, 20, 30, +0.002f, 0.08f, 0.55f, 0.04f, +0.002f, 0.05f, 0.10f, 0.03f, +16.0f, 3, 0.04f, 0, +2, 0.20, 0.24, +1.00f, 0.0f, 8, 0.0f, 0, 0, +1, 2, 2, 2, 40, +0, 2, 0.35, 0.30, 0.20} }, + // 142 Bunker + { "Bunker", "TECHNO", { O_SAW, O_NOI, 0, 55, 1, 1100, 0.55f, 65, 15, +0.005f, 0.30f, 0.82f, 0.30f, +0.20f, 0.40f, 0.15f, 0.25f, +6.0f, 3, 0.20f, 0, +2, 0.20, 0.24, +1.00f, 0.0f, 4, 0.0f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.34, 0.30, 0.20} }, + // 143 Analog Night + { "Analog Night", "TECHNO", { O_WRP, O_TRI, 6, 55, 1, 1700, 0.30f, 55, 35, +0.04f, 0.60f, 0.78f, 0.50f, +0.20f, 0.70f, 0.20f, 0.50f, +4.0f, 1, 0.10f, 0, +2, 0.20, 0.24, +1.0f, 0.0f, 8, 0.04f, 0, 0, +0, 0, 0, 0, 0, +0, 0, 0.00, 0.30, 0.20} }, + // 144 Techno Swarm + { "Techno Swarm", "TECHNO", { O_SUP, O_SAW, 20, 48, 1, 3200, 0.22f, 60, 40, +0.003f, 0.15f, 0.70f, 0.10f, +0.30f, 0.50f, 0.15f, 0.30f, +14.0f, 3, 0.25f, 0, +2, 0.20, 0.24, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.30, 0.45, 0.30} }, + // 145 Funk Bot + { "Funk Bot", "TECHNO", { O_PWM, O_PWM, 4, 60, 1, 2200, 0.35f, 35, 35, +0.02f, 0.30f, 0.72f, 0.25f, +0.15f, 0.50f, 0.15f, 0.20f, +7.0f, 1, 0.12f, 0, +2, 0.20, 0.24, +0.74f, 0.0f, 4, 0.04f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.40, 0.40, 0.25} }, + // == AMBIENT ============================================================ + // 146 Aurora Borealis + { "Aurora Borealis", "AMBIENT", { O_SUP, O_TRI, 15, 50, 1, 2800, 0.20f, 65, 25, +1.2f, 2.8f, 0.88f, 4.0f, +0.90f, 2.2f, 0.45f, 3.0f, +0.8f, 0, 0.55f, 2, +7, 0.50, 0.38, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 1, 0.40, 0.95, 0.60} }, + // 147 Liquid Sky + { "Liquid Sky", "AMBIENT", { O_PWM, O_TRI, 10, 55, 1, 2200, 0.25f, 60, 20, +0.90f, 2.6f, 0.85f, 3.2f, +0.80f, 2.0f, 0.40f, 2.4f, +0.7f, 0, 0.5f, 0, +7, 0.50, 0.38, +0.73f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.70, 0.45} }, + // 148 Breathing Room + { "Breathing Room", "AMBIENT", { O_SAW, O_TRI, 8, 50, 1, 1500, 0.20f, 70, 20, +1.5f, 3.0f, 0.90f, 3.5f, +1.0f, 2.4f, 0.50f, 3.0f, +0.20f, 0, 0.40f, 2, +7, 0.50, 0.38, +0.66f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.70, 0.45} }, + // 149 Gentle Rain + { "Gentle Rain", "AMBIENT", { O_NOI, O_TRI, 0, 75, 1, 4500, 0.10f, 30, 0, +0.80f, 2.0f, 0.85f, 4.0f, +0.60f, 1.8f, 0.40f, 3.0f, +4.0f, 3, 0.10f, 0, +7, 0.50, 0.38, +0.83f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.70, 0.45} }, + // 150 Ocean Drift + { "Ocean Drift", "AMBIENT", { O_SAW, O_PWM, 18, 48, 1, 1800, 0.30f, 75, 20, +1.8f, 3.5f, 0.88f, 4.0f, +1.2f, 2.8f, 0.45f, 3.2f, +0.5f, 1, 0.55f, 2, +7, 0.50, 0.38, +0.82f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.70, 0.45} }, + // 151 Evening Mist + { "Evening Mist", "AMBIENT", { O_CHD, O_TRI, 12, 58, 1, 2000, 0.35f, 60, 20, +1.0f, 2.4f, 0.85f, 3.0f, +0.80f, 1.8f, 0.40f, 2.2f, +0.6f, 0, 0.5f, 0, +7, 0.50, 0.38, +0.99f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.70, 0.45} }, + // 152 Silent Witness + { "Silent Witness", "AMBIENT", { O_SIN, O_TRI, 10, 50, 1, 1400, 0.20f, 65, 15, +1.5f, 3.2f, 0.88f, 4.0f, +1.0f, 2.4f, 0.50f, 3.0f, +0.30f, 0, 0.30f, 0, +7, 0.50, 0.38, +0.78f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.90, 0.40} }, + // 153 Floating Leaves + { "Floating Leaves", "AMBIENT", { O_TRI, O_SAW, 8, 55, 1, 2600, 0.15f, 50, 25, +0.80f, 2.2f, 0.86f, 2.8f, +0.60f, 1.6f, 0.40f, 2.0f, +0.70f, 1, 0.20f, 0, +7, 0.50, 0.38, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.70, 0.45} }, + // 154 Through the Veil + { "Through the Veil","AMBIENT", { O_FM, O_TRI, 10, 52, 3, 1500, 0.35f, 70, 20, +1.2f, 2.8f, 0.88f, 3.5f, +0.90f, 2.4f, 0.45f, 2.8f, +1.0f, 2, 0.5f, 2, +7, 0.50, 0.38, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 1, 0.35, 0.90, 0.55} }, + // 155 Distant Echoes + { "Distant Echoes", "AMBIENT", { O_TNE, O_TRI, 14, 55, 1, 3200, 0.25f, 40, 20, +0.50f, 2.0f, 0.85f, 3.5f, +0.40f, 1.6f, 0.40f, 2.5f, +1.2f, 1, 0.5f, 2, +7, 0.50, 0.38, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.70, 0.45} }, + // 156 Silent Glacier + { "Silent Glacier", "AMBIENT", { O_TNE, O_TRI, 16, 55, 1, 3600, 0.30f, 45, 15, +1.0f, 2.6f, 0.88f, 3.5f, +0.80f, 2.0f, 0.45f, 2.5f, +0.8f, 0, 0.5f, 0, +7, 0.50, 0.38, +0.75f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 1, 0.50, 0.70, 0.45} }, + // 157 Whisper Choir + { "Whisper Choir", "AMBIENT", { O_SUP, O_TRI, 12, 52, 1, 2400, 0.18f, 60, 40, +0.80f, 2.4f, 0.85f, 3.0f, +0.60f, 1.8f, 0.40f, 2.2f, +1.4f, 0, 0.5f, 0, +7, 0.50, 0.28, +0.68f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 0, 0.00, 0.70, 0.45} }, + // 158 Inner Temple + { "Inner Temple", "AMBIENT", { O_SIN, O_SAW, 8, 55, 1, 1700, 0.22f, 55, 25, +1.0f, 3.0f, 0.88f, 3.8f, +0.80f, 2.2f, 0.50f, 2.8f, +0.50f, 1, 0.20f, 0, +7, 0.50, 0.38, +0.79f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.70, 0.45} }, + // 159 Cloud Nine + { "Cloud Nine", "AMBIENT", { O_SAW, O_TRI, 10, 50, 1, 1900, 0.25f, 65, 20, +1.3f, 3.0f, 0.90f, 3.5f, +1.0f, 2.4f, 0.45f, 2.8f, +0.30f, 0, 0.35f, 2, +7, 0.50, 0.38, +0.93f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.70, 0.45} }, + // 160 Polar Night + { "Polar Night", "AMBIENT", { O_TRI, O_SIN, 14, 45, 1, 1200, 0.30f, 70, 15, +1.5f, 3.5f, 0.90f, 4.5f, +1.2f, 2.6f, 0.55f, 3.5f, +0.20f, 0, 0.40f, 0, +7, 0.50, 0.38, +0.85f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.90, 0.45} }, + // 161 Sunbeam + { "Sunbeam", "AMBIENT", { O_HSY, O_TRI, 12, 55, 1, 4200, 0.20f, 40, 20, +0.60f, 2.2f, 0.85f, 2.8f, +0.50f, 1.8f, 0.40f, 2.0f, +1.8f, 0, 0.5f, 2, +7, 0.50, 0.38, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.70, 0.45} }, + // 162 Winter Sleep + { "Winter Sleep", "AMBIENT", { O_SAW, O_SAW, 8, 50, 1, 1500, 0.28f, 60, 20, +1.2f, 3.0f, 0.88f, 3.8f, +0.90f, 2.4f, 0.45f, 3.0f, +0.40f, 1, 0.30f, 2, +7, 0.50, 0.38, +0.86f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.70, 0.45} }, + // 163 Desert Glass + { "Desert Glass", "AMBIENT", { O_TNE, O_SIN, 0, 65, 1, 6000, 0.40f, 30, 10, +0.01f, 1.5f, 0.80f, 3.0f, +0.30f, 1.2f, 0.20f, 2.0f, +1.5f, 3, 0.45f, 2, +7, 0.50, 0.38, +0.96f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 1, 0.53, 0.70, 0.45} }, + // 164 Underwater Cathedral + { "Underwater Cathedral","AMBIENT", { O_CHD, O_SAW, 20, 50, 1, 2400, 0.35f, 65, 25, +1.0f, 2.5f, 0.88f, 3.5f, +0.80f, 2.0f, 0.45f, 2.6f, +0.7f, 1, 0.55f, 2, +7, 0.40, 0.40, +0.94f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +6, 1, 0.35, 0.95, 0.60} }, + // 165 Longest Journey + { "Longest Journey", "AMBIENT", { O_TRI, O_TRI, 10, 52, 1, 2000, 0.20f, 55, 20, +1.8f, 3.5f, 0.90f, 5.0f, +1.5f, 2.8f, 0.50f, 4.0f, +0.20f, 0, 0.35f, 2, +7, 0.50, 0.38, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.90, 0.45} }, + // 166 Fading Aurora + { "Fading Aurora", "AMBIENT", { O_PWM, O_TRI, 16, 48, 1, 3000, 0.18f, 55, 20, +1.0f, 2.8f, 0.88f, 4.0f, +0.80f, 2.2f, 0.45f, 3.0f, +0.6f, 0, 0.5f, 0, +7, 0.50, 0.38, +0.57f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 1, 0.40, 0.90, 0.60} }, + // 167 Still Lake + { "Still Lake", "AMBIENT", { O_SIN, O_TRI, 10, 55, 1, 1400, 0.15f, 50, 15, +0.80f, 2.8f, 0.88f, 3.5f, +0.60f, 2.0f, 0.45f, 2.5f, +0.30f, 1, 0.25f, 2, +7, 0.50, 0.38, +0.77f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.70, 0.45} }, + // 168 Golden Hour + { "Golden Hour", "AMBIENT", { O_SAW, O_PUL, 8, 55, 1, 2600, 0.22f, 55, 35, +0.50f, 2.0f, 0.85f, 2.5f, +0.40f, 1.6f, 0.40f, 1.8f, +0.50f, 0, 0.20f, 2, +7, 0.50, 0.38, +0.87f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.70, 0.45} }, + // 169 Oxygen + { "Oxygen", "AMBIENT", { O_SUP, O_TRI, 6, 55, 1, 2100, 0.20f, 60, 25, +1.0f, 2.6f, 0.88f, 3.2f, +0.80f, 2.0f, 0.40f, 2.6f, +1.0f, 0, 0.5f, 2, +7, 0.50, 0.38, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.70, 0.45} }, + // 170 Zero Gravity + { "Zero Gravity", "AMBIENT", { O_TRI, O_SAW, 20, 45, 1, 2800, 0.25f, 65, 15, +1.5f, 3.2f, 0.90f, 4.0f, +1.2f, 2.5f, 0.50f, 3.2f, +0.30f, 0, 0.40f, 2, +7, 0.50, 0.38, +0.98f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 1, 0.35, 0.90, 0.50} }, + // 171 Sacred Space + { "Sacred Space", "AMBIENT", { O_SAW, O_TRI, 10, 50, 1, 2200, 0.28f, 70, 30, +1.3f, 3.0f, 0.88f, 4.0f, +1.0f, 2.6f, 0.45f, 3.0f, +0.30f, 1, 0.30f, 0, +7, 0.50, 0.38, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 1, 0.30, 0.95, 0.55} }, + +// == CINEMATIC ========================================================== + // 172 Colossal Drone + { "Colossal Drone", "CINEMATIC", { O_DSW, O_SUP, 4, 55, 1, 900, 0.35f, 60, 25, +0.6f, 2.5f, 0.9f, 3.0f, +0.5f, 2.0f, 0.5f, 2.5f, +0.45f, 0, 0.55f, 0, +7, 0.50, 0.38, +0.54f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 2, 0.30, 0.90, 0.60} }, + // 173 Tension Builder + { "Tension Builder", "CINEMATIC", { O_SUP, O_SUP, 6, 50, 1, 1500, 0.25f, 70, 30, +0.8f, 2.8f, 0.92f, 3.5f, +0.4f, 1.8f, 0.6f, 2.5f, +0.8f, 2, 0.25, 0, +7, 0.50, 0.38, +0.87f, 0.0f, 10, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 2, 0.35, 0.90, 0.60} }, + // 174 Dark Undertone + { "Dark Undertone", "CINEMATIC", { O_DSW, O_SIN, 0, 88, 1, 500, 0.3f, 40, 15, +0.2f, 1.5f, 0.95f, 2.5f, +0.3f, 1.2f, 0.6f, 2.0f, +0.5f, 0, 0.4f, 2, +7, 0.50, 0.38, +0.75f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 2, 0.40, 0.90, 0.40} }, + // 175 Brass Swell + { "Brass Swell", "CINEMATIC", { O_WRP, O_SAW, 8, 48, 1, 2600, 0.3f, 75, 40, +0.4f, 2.2f, 0.85f, 2.8f, +0.5f, 2.0f, 0.4f, 1.8f, +0.35f, 0, 0.45f, 0, +7, 0.50, 0.38, +0.76f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 2, 0.30, 0.80, 0.55} }, + // 176 War Drums + { "War Drums", "CINEMATIC", { O_DSW, O_PUL, 0, 70, 1, 700, 0.6f, 55, 10, +0.01f, 0.5f, 0.8f, 0.4f, +0.01f, 0.4f, 0.5f, 0.3f, +3.0f, 2, 0.28, 0, +6, 0.22, 0.30, +0.85f, 0.0f, 8, 0.0f, 0, 0, +0, 0, 0, 0, 0, +0, 2, 0.35, 0.70, 0.50} }, + // 177 Cathedral Drones + { "Cathedral Drones", "CINEMATIC", { O_CHD, O_SUP, 10, 50, 1, 1400, 0.3f, 65, 30, +1.2f, 3.0f, 0.9f, 4.0f, +0.9f, 2.2f, 0.5f, 3.0f, +0.3f, 1, 0.6f, 2, +7, 0.40, 0.40, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +6, 1, 0.38, 1.00, 0.60} }, + +// == SOUNDSCAPE ========================================================= + // 178 Wind Chimes + { "Wind Chimes", "SOUNDSCAPE", { O_TNE, O_TNE, 12, 55, 1, 4500, 0.3f, 30, 20, +0.0f, 3.0f, 0.6f, 4.0f, +0.0f, 0.5f, 0.3f, 2.0f, +2.5f, 3, 0.35f, 2, +7, 0.50, 0.38, +0.85f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 1, 0.45, 0.85, 0.60} }, + // 179 Ocean Bed + { "Ocean Bed", "SOUNDSCAPE", { O_DSW, O_PWM, 5, 50, 1, 600, 0.35f, 72, 15, +1.0f, 3.0f, 0.9f, 3.5f, +0.6f, 2.0f, 0.5f, 2.5f, +0.25f, 0, 0.55f, 2, +7, 0.50, 0.38, +0.63f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.90, 0.50} }, + // 180 Cave Echo + { "Cave Echo", "SOUNDSCAPE", { O_SEQ, O_TRI, 0, 60, 1, 1100, 0.2f, 50, 15, +0.5f, 2.0f, 0.85f, 3.0f, +0.4f, 1.5f, 0.4f, 2.0f, +1.2f, 1, 0.5f, 0, +7, 0.50, 0.38, +0.71f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.90, 0.60} }, + // 181 Night Forest + { "Night Forest", "SOUNDSCAPE", { O_SUP, O_NOI, 4, 60, 1, 1800, 0.2f, 60, 0, +0.8f, 2.5f, 0.88f, 3.2f, +0.5f, 1.6f, 0.5f, 2.0f, +0.5f, 3, 0.6f, 0, +7, 0.50, 0.38, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 2, 0.30, 0.90, 0.50} }, + // 182 Digital Rain + { "Digital Rain", "SOUNDSCAPE", { O_SEQ, O_NOI, 0, 70, 1, 3200, 0.15f, 40, 0, +0.05f, 1.8f, 0.8f, 2.5f, +0.2f, 1.2f, 0.3f, 1.8f, +4.0f, 3, 0.45f, 0, +7, 0.50, 0.38, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 2, 0.40, 0.90, 0.45} }, + // 183 Ice Field + { "Ice Field", "SOUNDSCAPE", { O_TNE, O_SUP, 8, 55, 1, 3600, 0.2f, 50, 25, +0.3f, 2.0f, 0.85f, 3.5f, +0.3f, 1.8f, 0.4f, 2.2f, +0.4f, 0, 0.5f, 2, +7, 0.50, 0.38, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 1, 0.40, 0.90, 0.60} }, + +// == ATMOSPHERE ========================================================== + // 184 Morning Haze + { "Morning Haze", "ATMOSPHERE", { O_PWM, O_TRI, 6, 55, 1, 1500, 0.25f, 65, 20, +0.9f, 2.8f, 0.9f, 3.5f, +0.7f, 2.0f, 0.5f, 2.5f, +0.35f, 0, 0.55f, 0, +7, 0.50, 0.38, +0.81f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 0, 0.00, 0.85, 0.50} }, + // 185 Metal Sky + { "Metal Sky", "ATMOSPHERE", { O_HSY, O_TRI, 0, 70, 1, 3200, 0.3f, 60, 30, +0.4f, 2.0f, 0.85f, 3.0f, +0.3f, 1.5f, 0.4f, 1.8f, +1.5f, 0, 0.6f, 2, +7, 0.50, 0.38, +0.85f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 2, 0.35, 0.85, 0.55} }, + // 186 Submerged + { "Submerged", "ATMOSPHERE", { O_SIN, O_DSW, 0, 100, 1, 420, 0.25f, 50, 10, +0.8f, 3.0f, 0.92f, 4.0f, +0.6f, 2.0f, 0.5f, 3.0f, +0.2f, 0, 0.45f, 2, +7, 0.50, 0.38, +0.63f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 1, 0.30, 0.95, 0.55} }, + // 187 Electric Air + { "Electric Air", "ATMOSPHERE", { O_FM, O_TRI, 6, 55, 1, 2600, 0.25f, 55, 25, +0.6f, 2.4f, 0.9f, 3.2f, +0.5f, 2.0f, 0.5f, 2.5f, +0.5f, 2, 0.5f, 2, +7, 0.50, 0.38, +0.91f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 1, 0.30, 0.85, 0.50} }, + // 188 Static Bloom + { "Static Bloom", "ATMOSPHERE", { O_SUP, O_SEQ, 0, 60, 1, 2200, 0.2f, 60, 0, +0.7f, 2.5f, 0.85f, 3.0f, +0.4f, 1.6f, 0.4f, 2.0f, +2.0f, 3, 0.6f, 0, +7, 0.50, 0.38, +1.00f, 0.0f, 16, 0.0f, 0, 0, +0, 0, 0, 0, 0, +9, 2, 0.45, 0.90, 0.55} }, + +// == SYNTH FX ============================================================= + // 189 Rocket Launch + { "Rocket Launch", "SYNTH FX", { O_NOI, O_SAW, 0, 80, 1, 5000, 0.2f, 85, 20, +0.8f, 3.0f, 0.9f, 3.5f, +0.2f, 1.5f, 0.3f, 1.5f, +7.0f, 0, 0.8f, 0, +7, 0.30, 0.30, +0.84f, 0.0f, 8, 0.0f, 0, 0, +0, 0, 0, 0, 0, +4, 2, 0.45, 0.90, 0.60} }, + // 190 Laser Sweep + { "Laser Sweep", "SYNTH FX", { O_HSY, O_HSY, 0, 65, 1, 6000, 0.35f, 70, 30, +0.0f, 1.0f, 0.6f, 0.5f, +0.0f, 0.5f, 0.2f, 0.4f, +9.0f, 2, 0.25, 0, +7, 0.30, 0.30, +1.00f, 0.0f, 1, 0.0f, 0, 0, +0, 0, 0, 0, 0, +4, 2, 0.44, 0.90, 0.65} }, + // 191 Alien Voice + { "Alien Voice", "SYNTH FX", { O_FM, O_FM, 0, 55, 1, 3000, 0.3f, 55, 20, +0.1f, 1.8f, 0.7f, 2.0f, +0.05f, 0.8f, 0.3f, 1.0f, +3.5f, 1, 0.7f, 2, +7, 0.50, 0.28, +1.00f, 0.0f, 8, 0.0f, 0, 0, +0, 0, 0, 0, 0, +8, 2, 0.55, 1.00, 0.80} }, + // 192 Data Stream + { "Data Stream", "SYNTH FX", { O_SEQ, O_SEQ, 0, 60, 1, 4000, 0.2f, 30, 0, +0.0f, 0.5f, 0.5f, 0.3f, +0.0f, 0.3f, 0.1f, 0.2f, +6.0f, 3, 0.6f, 0, +7, 0.30, 0.30, +1.00f, 0.0f, 8, 0.0f, 0, 0, +1, 1, 3, 2, 50, +4, 2, 0.48, 0.90, 0.40} }, + // 193 Ghost Feedback + { "Ghost Feedback", "SYNTH FX", { O_WRP, O_WRP, 0, 55, 1, 2800, 0.5f, 70, 35, +0.3f, 2.0f, 0.8f, 3.0f, +0.3f, 1.6f, 0.4f, 2.0f, +4.0f, 2, 0.7f, 2, +7, 0.30, 0.30, +1.00f, 0.0f, 8, 0.0f, 0, 0, +0, 0, 0, 0, 0, +4, 3, 0.50, 0.95, 0.75} }, + // 194 Neon Sweep + { "Neon Sweep", "SYNTH FX", { O_PWM, O_HSY, 0, 65, 1, 5000, 0.25f, 60, 30, +0.0f, 0.8f, 0.55f, 0.4f, +0.0f, 0.4f, 0.2f, 0.3f, +5.0f, 0, 0.8f, 0, +7, 0.30, 0.30, +1.00f, 0.0f, 1, 0.0f, 0, 0, +0, 0, 0, 0, 0, +4, 1, 0.53, 0.90, 0.65} }, + // 195 Glass Shatter + { "Glass Shatter", "SYNTH FX", { O_TNE, O_NOI, 0, 70, 1, 6000, 0.3f, 30, 0, +0.0f, 2.2f, 0.3f, 3.0f, +0.0f, 0.4f, 0.1f, 0.5f, +8.0f, 3, 0.4f, 0, +7, 0.30, 0.30, +1.00f, 0.0f, 12, 0.0f, 0, 0, +0, 0, 0, 0, 0, +4, 1, 0.37, 0.90, 0.65} }, }; PresetBank::PresetBank() diff --git a/Source/SynthEngine.cpp b/Source/SynthEngine.cpp index d84c339..f808f6e 100644 --- a/Source/SynthEngine.cpp +++ b/Source/SynthEngine.cpp @@ -8,7 +8,7 @@ void SynthEngine::setSampleRate (double s) sr = s; } -float SynthEngine::osc (int wave, double ph) +float SynthEngine::osc (int wave, double ph, double phRaw) { switch (wave) { @@ -17,6 +17,90 @@ float SynthEngine::osc (int wave, double ph) case 2: return (float) (1.0 - 2.0 * ph); case 3: return (float) (ph < 0.5 ? -1.0 : 1.0); case 4: return rng.nextFloat() * 2.0f - 1.0f; + + // 5 FM: 2-op sine FM (1:2 ratio), index slowly evolves over the note + case 5: + { + const double idx = 2.2 + 1.6 * (0.5 + 0.5 * std::sin (phRaw * 0.03)); + return (float) std::sin (ph * 2.0 * juce::MathConstants::pi + + idx * std::sin (ph * 4.0 * juce::MathConstants::pi)); + } + // 6 PWM: pulse whose width animates with the running phase + case 6: + { + const double w = 0.05 + 0.60 * (0.5 + 0.5 * std::sin (phRaw * 0.05)); + return (float) (ph < w ? 1.0 : -1.0); + } + // 7 SUPRSW: 5 stacked saws with a slowly moving spread (detuned-stack feel) + case 7: + { + const double df = 0.006 * std::sin (phRaw * 0.02); + double s = 0.0; + for (int k = -2; k <= 2; ++k) + { + double sp = ph + df + k * 0.13; + sp -= std::floor (sp); + s += 1.0 - 2.0 * sp; + } + return (float) (s * 0.40); + } + // 8 DBLSAW: saw plus a sub-octave saw (big, weighted low end) + case 8: + { + double sub = ph * 0.5; + sub -= std::floor (sub); + return (float) (0.62 * (1.0 - 2.0 * ph) + 0.48 * (1.0 - 2.0 * sub)); + } + // 9 WARP: saw pushed twice through a wavefolder -> bright, buzzy, raw + case 9: + { + double x = 1.0 - 2.0 * ph; + x = 1.0 - 2.0 * std::fabs (1.0 - std::fabs (x)); + x = 1.0 - 2.0 * std::fabs (1.0 - std::fabs (x)); + return (float) x; + } + // 10 HSYNC: saw hard-synced to a 2.5x master -> bright, cutting lead + case 10: + { + double sp = ph * 2.5; + sp -= std::floor (sp); + return (float) (1.0 - 2.0 * sp); + } + // 11 TINE: electric-tine partial stack (1x,2x,4x,8x) -> bell/marimba/EP + case 11: + { + const double a = ph * 2.0 * juce::MathConstants::pi; + return (float) (0.85 * std::sin (a) + + 0.55 * std::sin (2.0 * a) + + 0.35 * std::sin (4.0 * a) + + 0.18 * std::sin (8.0 * a)); + } + // 12 SEQ: 8 pseudo-random levels per cycle -> digital, step-sequencer + case 12: + { + static const float L[8] = { 0.90f, -0.45f, 0.30f, -0.85f, + 0.55f, -0.20f, 0.75f, -0.60f }; + const int k = (int) std::floor (ph * 8.0); + return L[k & 7]; + } + // 13 CHORD: built-in minor triad (root, m3, 5th) -> one-osc chord + case 13: + { + const double a = ph * 2.0 * juce::MathConstants::pi; + return (float) (0.62 * std::sin (a) + + 0.42 * std::sin (a * (6.0 / 5.0)) + + 0.38 * std::sin (a * 1.5)); + } + // 14 SUPRPL: 3 stacked phase-offset pulse waves -> fat chorus-box square + case 14: + { + const double o1 = ph < 0.5 ? 1.0 : -1.0; + double p2 = ph + 0.10; p2 -= std::floor (p2); + const double o2 = p2 < 0.5 ? 1.0 : -1.0; + double p3 = ph + 0.25; p3 -= std::floor (p3); + const double o3 = p3 < 0.5 ? 1.0 : -1.0; + return (float) ((o1 + o2 + o3) * (1.0 / 3.0)); + } default: return 0.0f; } } @@ -80,12 +164,19 @@ void SynthEngine::noteOn (int midiNote, float velocity) v->targetFreq = noteFreq; v->ph1 = rng.nextDouble() * 0.5; v->ph2 = rng.nextDouble() * 0.5; + v->ph1r = rng.nextDouble() * 8.0; + v->ph2r = rng.nextDouble() * 8.0; v->lfoPh = rng.nextDouble(); v->lfoIdx = 0; v->lfoSH = rng.nextFloat() * 2.0f - 1.0f; v->lp = v->bp = 0.0f; v->fcSm = 0.0f; v->outSmooth = 0.0f; + v->drift = 0.0f; + v->driftT = rng.nextFloat() * 2.0f - 1.0f; + // Micro Q-style unison: every voice gets its own small detune offset, the + // spread widening with the DETUNE 1 setting, for fat stacks on chords + v->dtSp = (rng.nextFloat() * 2.0f - 1.0f) * (1.5f + 0.30f * std::abs (curDetune1)); const float p = juce::jlimit (-1.0f, 1.0f, lastPan + (rng.nextFloat() - 0.5f) * 0.1f); const float ang = (p + 1.0f) * juce::MathConstants::pi * 0.25f; @@ -114,6 +205,7 @@ void SynthEngine::noteOff (int midiNote) void SynthEngine::render (const VParams& p, float* left, float* right, int num) { + curDetune1 = p.detune1; for (auto& v : voices) { v.amp.setRates (p.ampA, p.ampD, p.ampS, p.ampR, sr); @@ -131,8 +223,33 @@ void SynthEngine::render (const VParams& p, float* left, float* right, int num) const float maxFc = 0.4f * (float) sr; const float minFc = 30.0f; + // Free-running slow-evolution clock: every ~8 s the running patch rolls a + // new wander target, and evoCur slews toward it, so harmonic character, + // tuning instability and cross-mod bloom all slowly drift and come back. + // Generative evolution clock. evoCur is a true brownian walk that roams the + // whole [-1,1] range without ever repeating, plus occasional "excursions" + // that push it to a freshly rolled extreme for 7-18 s. evoSlow is a second, + // much slower wander that drives the long-arc soundscape drift over 1-3 + // minutes. Together they make a held note slowly change character forever. for (int s = 0; s < num; ++s) { + if (--evoGoalT <= 0.0) + { + evoGoalT = sr * (7.0 + rng.nextDouble() * 11.0); + evoGoal = (rng.nextFloat() < 0.5f ? -1.0f : 1.0f) + * (0.65f + 0.35f * rng.nextFloat()); + for (auto& v : voices) + if (v.active) + v.driftT = rng.nextFloat() * 2.0f - 1.0f; + } + evoCur += (rng.nextFloat() - 0.5f) * 0.0022f + + (evoGoal - evoCur) * 0.00035f; + evoCur = std::max (-1.0f, std::min (1.0f, evoCur)); + + evoSlow += (rng.nextFloat() - 0.5f) * 0.0028f + + (0.0f - evoSlow) * 0.0000002f; + evoSlow = std::max (-1.0f, std::min (1.0f, evoSlow)); + float mixL = 0.0f, mixR = 0.0f; int activeCount = 0; for (auto& v : voices) @@ -172,29 +289,74 @@ void SynthEngine::render (const VParams& p, float* left, float* right, int num) float freq = v.curFreq * tuneRatio; if ((int) p.lfoTarget == 1) freq *= std::exp2f (lfo * p.lfoDepth * 1.6f / 12.0f); + if (p.evolve > 0.001f) + { + // slow random tuning instability, re-rolled with each excursion + v.drift += (v.driftT - v.drift) * 0.0020f; + freq *= std::exp2f (v.drift * p.evolve * 14.0f / 1200.0f); + } if (bendSmooth != bendCents) bendSmooth += (bendCents - bendSmooth) * 0.08f; freq *= std::exp2f (bendSmooth / 1200.0f); - const float d1 = (float) (freq / sr) * detuneRatio1; - const float d2 = (float) (freq / sr) * detuneRatio2; + const float d1 = (float) (freq / sr) * detuneRatio1 * std::exp2f (v.dtSp / 1200.0f); + // soundscape detune sway: osc2 slowly zooms its detune in/out + const float swayT = std::exp2f (evoSlow * p.evolve * 16.0f / 1200.0f); + const float d2 = (float) (freq / sr) * detuneRatio2 * swayT; v.ph1 += d1; if (v.ph1 >= 1.0) v.ph1 -= 1.0; - v.ph2 += d2; if (v.ph2 >= 1.0) v.ph2 -= 1.0; + v.ph1r += d1; - const float o1 = osc ((int) p.osc1w, v.ph1); - const float o2 = osc ((int) p.osc2w, v.ph2); - const float mixb = p.oscMix * 0.01f; + // cross-mod "bloom": the amount itself breathes with the evolution walk, + // sometimes vanishing almost entirely, sometimes saturating + float xmA = 0.0f; + if ((int) p.xmod > 0 && p.xmix > 0.001f) + xmA = p.xmix * (0.10f + 0.90f * (0.5f + 0.5f * evoCur)); + + // oscillators, with osc1 phase-modulating osc2 when in FM cross-mod + const float o1 = osc ((int) p.osc1w, v.ph1, v.ph1r); + float d2step = d2; + if ((int) p.xmod == 2 && xmA > 0.0f) + d2step = d2 * (1.0f + o1 * xmA); + v.ph2 += d2step; if (v.ph2 >= 1.0) v.ph2 -= 1.0; + v.ph2r += d2step; + const float o2 = osc ((int) p.osc2w, v.ph2, v.ph2r); + // osc-mix crossfade: the o1<->o2 balance slowly sways with the + // soundscape wander, visibly respraying the whole timbre over ~a minute + const float mixBase = p.oscMix * 0.01f; + float mixb = mixBase * (1.0f + evoSlow * p.evolve * 0.8f); + mixb = std::max (0.0f, std::min (0.98f, mixb)); float sig = o1 * (1.0f - mixb) + o2 * mixb; + // ring / AM cross-mod spiced into the mix + if (xmA > 0.0f) + { + const int xm = (int) p.xmod; + if (xm == 1) sig += o1 * o2 * 0.6f * xmA; + else if (xm == 3) sig += o1 * o2 * 0.9f * xmA; + } + + // spectral warp: drive + bias swing hard with the texture wander, + // folding harmonics way in and pulling back out over tens of seconds + if (p.warp > 0.001f) + { + const float drive = 1.0f + p.warp * (1.0f + 3.2f * std::max (0.0f, evoCur)); + sig = std::tanh (sig * drive + evoCur * 0.30f * p.warp); + } + const float fe = v.flt.next(); + // gentle analog drive ahead of the filter (resonance pushes harder) + sig = std::tanh (sig * (1.0f + p.fltRes * 0.15f)); + // cutoff with keytrack + filter envelope + LFO + mod wheel float fc = p.fltCut; fc *= std::exp2f (p.fltKey * 0.01f * std::log2f (freq / 261.6256f)); fc *= std::exp2f (p.fltEnv * 0.01f * fe * std::log2f (maxFc / fc)); if ((int) p.lfoTarget == 0) fc *= std::exp2f (lfo * p.lfoDepth * 10.0f / 12.0f); + if (p.evolve > 0.001f) + fc *= std::exp2f (evoCur * p.evolve * 4.0f / 12.0f); fc *= std::exp2f (mod); fc = std::min (maxFc, std::max (minFc, fc)); v.fcSm += (fc - v.fcSm) * 0.25f; @@ -203,18 +365,23 @@ void SynthEngine::render (const VParams& p, float* left, float* right, int num) // SVF (cap f1 to keep the Chamberlin structure stable; past ~1.5 the // resonance feedback can self-oscillate and sputter at maxed cutoff+res) const float f1 = std::min (1.50f, 2.0f * std::sin (juce::MathConstants::pi * fc / (float) sr)); - const float q1 = 1.0f / (1.0f + p.fltRes * 3.0f); + // resonance growl: filter tightens/loosens with the soundscape wander + const float q1 = 1.0f / (1.0f + p.fltRes * (3.0f + evoCur * p.evolve * 2.5f)); v.f1c = f1; const float hp = sig - v.lp - q1 * v.bp; v.bp += f1 * hp; v.lp += f1 * v.bp; + // The Chamberlin band-pass and high-pass taps carry much less energy + // than the low-pass tap for the harmonically rich osc waves (2-4x + // quieter in practice), so compensate to keep filter types at a + // comparable loudness level. float filtered = sig; switch ((int) p.fltType) { case 1: filtered = v.lp; break; - case 2: filtered = v.bp; break; - case 3: filtered = hp; break; + case 2: filtered = v.bp * 2.9f; break; + case 3: filtered = hp * 2.7f; break; default: break; } @@ -223,6 +390,7 @@ void SynthEngine::render (const VParams& p, float* left, float* right, int num) float ampMod = 1.0f; if ((int) p.lfoTarget == 2) ampMod = 1.0f - p.lfoDepth * 0.5f * (1.0f + lfo); + ampMod *= 1.0f + evoSlow * p.evolve * 0.10f; v.outSmooth += (filtered - v.outSmooth) * 0.12f; float o = v.outSmooth * (ae * ampMod) * v.vel * voiceGain; diff --git a/Source/SynthEngine.h b/Source/SynthEngine.h index 6e8d086..dbd5bf9 100644 --- a/Source/SynthEngine.h +++ b/Source/SynthEngine.h @@ -14,6 +14,7 @@ struct VParams float vol = 0.85f, pan = 0.0f, poly = 10.f, glide = 0.f, tune = 0.f; float hq = 0.0f; float arpOn = 0, arpRate = 2, arpPattern = 0, arpOct = 1, arpGate = 70; + float xmod = 0, xmix = 0, evolve = 0, warp = 0; void update (const juce::AudioProcessorValueTreeState& apvts) { @@ -38,6 +39,10 @@ struct VParams arpPattern = get ("arppattern"); arpOct = get ("arpoct"); arpGate = get ("arpgate"); + xmod = get ("xmod"); + xmix = get ("xmix"); + evolve = get ("evolve"); + warp = get ("warp"); } }; @@ -131,12 +136,15 @@ private: float panL = 0.71f, panR = 0.71f; float curFreq = 0.0f, targetFreq = 0.0f; double ph1 = 0.0, ph2 = 0.0, lfoPh = 0.0; + double ph1r = 0.0, ph2r = 0.0; // unwrapped phase for animated waves (FM/PWM/SUPRSW) float lfoSH = 0.0f; int lfoIdx = 0; Env amp, flt; float lp = 0.0f, bp = 0.0f, f1c = 0.0f; float fcSm = 0.0f; float outSmooth = 0.0f; + float drift = 0.0f, driftT = 0.0f; // slow random-unstable tuning wander + float dtSp = 0.0f; // unison detune spread (per voice, cents) }; static constexpr int maxVoice = 16; @@ -150,7 +158,12 @@ private: int stealIdx = 0; juce::Random rng; juce::Array sustainedNotes; + double evoGoalT = 0.0; // samples until the next evolution excursion + float evoCur = 0.0f; // brownian wander in [-1, 1] (texture-scale) + float evoGoal = 0.0f; // excursion target, re-picked every 7-18 s + float evoSlow = 0.0f; // much slower wander (soundscape-scale, 1-3 min) + float curDetune1 = 0.0f; // cached for noteOn (unison spread sizing) - float osc (int wave, double ph); + float osc (int wave, double ph, double phRaw); Voice* acquireVoice(); }; \ No newline at end of file