mirror of
https://codeberg.org/armin/sm-26.git
synced 2026-10-11 17:01:53 +02:00
Expand preset bank to 128 categorized presets, shorten sync delays, add menu UI polish and hold-to-repeat nav
This commit is contained in:
parent
1a36b5baf0
commit
78e8ee80ad
10 changed files with 761 additions and 413 deletions
|
|
@ -11,7 +11,7 @@ constexpr uint8_t kFont[95][8] =
|
||||||
{10,10,10,0,0,0,0,0}, // "
|
{10,10,10,0,0,0,0,0}, // "
|
||||||
{0,10,31,10,31,10,0,0}, // #
|
{0,10,31,10,31,10,0,0}, // #
|
||||||
{4,15,20,14,5,30,4,0}, // $
|
{4,15,20,14,5,30,4,0}, // $
|
||||||
{2,4,8,16,14,17,14,0}, // %
|
{3,3,8,4,2,1,24,24}, // %
|
||||||
{8,20,20,8,21,18,13,0}, // &
|
{8,20,20,8,21,18,13,0}, // &
|
||||||
{4,4,4,0,0,0,0,0}, // '
|
{4,4,4,0,0,0,0,0}, // '
|
||||||
{2,4,8,8,8,4,2,0}, // (
|
{2,4,8,8,8,4,2,0}, // (
|
||||||
|
|
@ -82,7 +82,7 @@ constexpr uint8_t kFont[95][8] =
|
||||||
{0,6,0,4,4,4,4,0}, // i
|
{0,6,0,4,4,4,4,0}, // i
|
||||||
{0,6,0,4,4,4,8,0}, // j
|
{0,6,0,4,4,4,8,0}, // j
|
||||||
{0,0,16,18,20,24,20,0}, // k
|
{0,0,16,18,20,24,20,0}, // k
|
||||||
{0,0,12,4,4,4,4,0}, // l
|
{0,4,4,4,4,4,4,14}, // l
|
||||||
{0,0,26,21,21,21,21,0}, // m
|
{0,0,26,21,21,21,21,0}, // m
|
||||||
{0,0,18,29,17,17,17,0}, // n
|
{0,0,18,29,17,17,17,0}, // n
|
||||||
{0,0,14,17,17,17,14,0}, // o
|
{0,0,14,17,17,17,14,0}, // o
|
||||||
|
|
@ -117,12 +117,21 @@ void LcdDisplay::setLine (int row, const juce::String& s)
|
||||||
lines[row] = s;
|
lines[row] = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LcdDisplay::setInverted (int row, bool inverted)
|
||||||
|
{
|
||||||
|
if (row >= 0 && row < kRows)
|
||||||
|
rowInverted[row] = inverted;
|
||||||
|
}
|
||||||
|
|
||||||
void LcdDisplay::showCursor (bool show) { cursorVisible = show; }
|
void LcdDisplay::showCursor (bool show) { cursorVisible = show; }
|
||||||
|
|
||||||
void LcdDisplay::clear()
|
void LcdDisplay::clear()
|
||||||
{
|
{
|
||||||
for (int r = 0; r < kRows; ++r)
|
for (int r = 0; r < kRows; ++r)
|
||||||
|
{
|
||||||
lines[r] = "";
|
lines[r] = "";
|
||||||
|
rowInverted[r] = false;
|
||||||
|
}
|
||||||
cursorCol = 0;
|
cursorCol = 0;
|
||||||
cursorRow = 0;
|
cursorRow = 0;
|
||||||
cursorVisible = false;
|
cursorVisible = false;
|
||||||
|
|
@ -140,10 +149,11 @@ void LcdDisplay::paint (juce::Graphics& g)
|
||||||
const float w = (float) getWidth();
|
const float w = (float) getWidth();
|
||||||
const float h = (float) getHeight();
|
const float h = (float) getHeight();
|
||||||
|
|
||||||
const juce::Colour bgCol (0xFF0D1A05);
|
const juce::Colour bgCol (0xFF000000);
|
||||||
const juce::Colour pixOn (0xFF4AE038);
|
const juce::Colour pixOn (0xFFE2E2E2);
|
||||||
const juce::Colour pixOnDim (0xFF1E3A12);
|
const juce::Colour pixOnDim (0xFF303030);
|
||||||
const juce::Colour pixOff (0xFF0F1C07);
|
const juce::Colour pixOff (0xFF0A0A0A);
|
||||||
|
const juce::Colour pixInvert (0xFF8A8A8A);
|
||||||
|
|
||||||
g.fillAll (bgCol);
|
g.fillAll (bgCol);
|
||||||
|
|
||||||
|
|
@ -173,6 +183,7 @@ void LcdDisplay::paint (juce::Graphics& g)
|
||||||
|
|
||||||
for (int row = 0; row < kRows; ++row)
|
for (int row = 0; row < kRows; ++row)
|
||||||
{
|
{
|
||||||
|
const bool inverted = rowInverted[row];
|
||||||
const juce::String& line = lines[row];
|
const juce::String& line = lines[row];
|
||||||
for (int col = 0; col < kCols; ++col)
|
for (int col = 0; col < kCols; ++col)
|
||||||
{
|
{
|
||||||
|
|
@ -182,7 +193,7 @@ void LcdDisplay::paint (juce::Graphics& g)
|
||||||
float cx = ox + (float) col * cw;
|
float cx = ox + (float) col * cw;
|
||||||
float cy = oy + (float) row * ch;
|
float cy = oy + (float) row * ch;
|
||||||
|
|
||||||
g.setColour (pixOff);
|
g.setColour (inverted ? pixInvert : pixOff);
|
||||||
g.fillRect (cx + 0.5f, cy + 0.5f, cw - 1.0f, ch - 1.0f);
|
g.fillRect (cx + 0.5f, cy + 0.5f, cw - 1.0f, ch - 1.0f);
|
||||||
|
|
||||||
float gridX = cx + padX + (gw - cellW * gridW) * 0.5f;
|
float gridX = cx + padX + (gw - cellW * gridW) * 0.5f;
|
||||||
|
|
@ -199,6 +210,13 @@ void LcdDisplay::paint (juce::Graphics& g)
|
||||||
float px = gridX + (float) gCol * stepX;
|
float px = gridX + (float) gCol * stepX;
|
||||||
float py = gridY + (float) gRow * stepY;
|
float py = gridY + (float) gRow * stepY;
|
||||||
|
|
||||||
|
if (inverted)
|
||||||
|
{
|
||||||
|
g.setColour (pixOff);
|
||||||
|
g.fillRect (px, py, cellW, cellH);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
g.setColour (pixOnDim);
|
g.setColour (pixOnDim);
|
||||||
g.fillRect (px - cellW * 0.10f, py - cellH * 0.05f,
|
g.fillRect (px - cellW * 0.10f, py - cellH * 0.05f,
|
||||||
cellW * 1.20f, cellH * 1.10f);
|
cellW * 1.20f, cellH * 1.10f);
|
||||||
|
|
@ -207,8 +225,9 @@ void LcdDisplay::paint (juce::Graphics& g)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (blinkOn && col == cursorCol && row == cursorRow)
|
if (blinkOn && ! inverted && col == cursorCol && row == cursorRow)
|
||||||
{
|
{
|
||||||
g.setColour (pixOn);
|
g.setColour (pixOn);
|
||||||
g.fillRect (cx + padX, cy + ch - padY - ch * 0.22f, cw - padX * 2.0f, ch * 0.18f);
|
g.fillRect (cx + padX, cy + ch - padY - ch * 0.22f, cw - padX * 2.0f, ch * 0.18f);
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,12 @@ class LcdDisplay : public juce::Component,
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static constexpr int kCols = 80;
|
static constexpr int kCols = 80;
|
||||||
static constexpr int kRows = 4;
|
static constexpr int kRows = 8;
|
||||||
|
|
||||||
LcdDisplay();
|
LcdDisplay();
|
||||||
|
|
||||||
void setLine (int row, const juce::String& s);
|
void setLine (int row, const juce::String& s);
|
||||||
|
void setInverted (int row, bool inverted);
|
||||||
void showCursor (bool show);
|
void showCursor (bool show);
|
||||||
void clear();
|
void clear();
|
||||||
void paint (juce::Graphics&) override;
|
void paint (juce::Graphics&) override;
|
||||||
|
|
@ -20,6 +21,7 @@ private:
|
||||||
void timerCallback() override;
|
void timerCallback() override;
|
||||||
|
|
||||||
juce::String lines[kRows];
|
juce::String lines[kRows];
|
||||||
|
bool rowInverted[kRows];
|
||||||
int cursorCol = 0;
|
int cursorCol = 0;
|
||||||
int cursorRow = 0;
|
int cursorRow = 0;
|
||||||
bool cursorVisible = false;
|
bool cursorVisible = false;
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,12 @@ void MenuSystem::up()
|
||||||
int newSel = s.selected - 1;
|
int newSel = s.selected - 1;
|
||||||
while (newSel >= 0 && s.items[(size_t) newSel].kind == MenuItem::Separator)
|
while (newSel >= 0 && s.items[(size_t) newSel].kind == MenuItem::Separator)
|
||||||
--newSel;
|
--newSel;
|
||||||
|
if (newSel < 0)
|
||||||
|
{
|
||||||
|
newSel = (int) s.items.size() - 1;
|
||||||
|
while (newSel >= 0 && s.items[(size_t) newSel].kind == MenuItem::Separator)
|
||||||
|
--newSel;
|
||||||
|
}
|
||||||
if (newSel >= 0)
|
if (newSel >= 0)
|
||||||
s.selected = newSel;
|
s.selected = newSel;
|
||||||
}
|
}
|
||||||
|
|
@ -81,6 +87,12 @@ void MenuSystem::down()
|
||||||
int newSel = s.selected + 1;
|
int newSel = s.selected + 1;
|
||||||
while (newSel < (int) s.items.size() && s.items[(size_t) newSel].kind == MenuItem::Separator)
|
while (newSel < (int) s.items.size() && s.items[(size_t) newSel].kind == MenuItem::Separator)
|
||||||
++newSel;
|
++newSel;
|
||||||
|
if (newSel >= (int) s.items.size())
|
||||||
|
{
|
||||||
|
newSel = 0;
|
||||||
|
while (newSel < (int) s.items.size() && s.items[(size_t) newSel].kind == MenuItem::Separator)
|
||||||
|
++newSel;
|
||||||
|
}
|
||||||
if (newSel < (int) s.items.size())
|
if (newSel < (int) s.items.size())
|
||||||
s.selected = newSel;
|
s.selected = newSel;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,9 @@ static juce::String padRight (const juce::String& s, int width)
|
||||||
SM26AudioProcessorEditor::SM26AudioProcessorEditor (SM26AudioProcessor& p)
|
SM26AudioProcessorEditor::SM26AudioProcessorEditor (SM26AudioProcessor& p)
|
||||||
: AudioProcessorEditor (p), proc (p)
|
: AudioProcessorEditor (p), proc (p)
|
||||||
{
|
{
|
||||||
setSize (920, 540);
|
setSize (920, 680);
|
||||||
setResizable (true, false);
|
setResizable (true, false);
|
||||||
setResizeLimits (720, 400, 1400, 900);
|
setResizeLimits (760, 620, 1500, 1300);
|
||||||
|
|
||||||
addAndMakeVisible (lcd);
|
addAndMakeVisible (lcd);
|
||||||
setupKnobs();
|
setupKnobs();
|
||||||
|
|
@ -20,7 +20,7 @@ SM26AudioProcessorEditor::SM26AudioProcessorEditor (SM26AudioProcessor& p)
|
||||||
|
|
||||||
footer.setText (buildGitFooter(), juce::dontSendNotification);
|
footer.setText (buildGitFooter(), juce::dontSendNotification);
|
||||||
footer.setJustificationType (juce::Justification::centredLeft);
|
footer.setJustificationType (juce::Justification::centredLeft);
|
||||||
footer.setColour (juce::Label::textColourId, juce::Colour (0xFF90B080));
|
footer.setColour (juce::Label::textColourId, juce::Colour (0xFFA0A0A0));
|
||||||
footer.setFont (juce::Font (juce::FontOptions { juce::Font::getDefaultMonospacedFontName(), 11.0f, juce::Font::plain }));
|
footer.setFont (juce::Font (juce::FontOptions { juce::Font::getDefaultMonospacedFontName(), 11.0f, juce::Font::plain }));
|
||||||
addAndMakeVisible (footer);
|
addAndMakeVisible (footer);
|
||||||
|
|
||||||
|
|
@ -48,20 +48,20 @@ void SM26AudioProcessorEditor::setupKnobs()
|
||||||
knobSliders[i].setSliderStyle (juce::Slider::RotaryVerticalDrag);
|
knobSliders[i].setSliderStyle (juce::Slider::RotaryVerticalDrag);
|
||||||
knobSliders[i].setTextBoxStyle (juce::Slider::NoTextBox, false, 0, 0);
|
knobSliders[i].setTextBoxStyle (juce::Slider::NoTextBox, false, 0, 0);
|
||||||
knobSliders[i].setRange (0.0, 1.0, 0.001);
|
knobSliders[i].setRange (0.0, 1.0, 0.001);
|
||||||
knobSliders[i].setColour (juce::Slider::rotarySliderFillColourId, juce::Colour (0xFF3A8A28));
|
knobSliders[i].setColour (juce::Slider::rotarySliderFillColourId, juce::Colour (0xFFC8C8C8));
|
||||||
knobSliders[i].setColour (juce::Slider::rotarySliderOutlineColourId, juce::Colour (0xFF1A2E0A));
|
knobSliders[i].setColour (juce::Slider::rotarySliderOutlineColourId, juce::Colour (0xFF2A2A2A));
|
||||||
knobSliders[i].setColour (juce::Slider::thumbColourId, juce::Colours::transparentBlack);
|
knobSliders[i].setColour (juce::Slider::thumbColourId, juce::Colours::transparentBlack);
|
||||||
knobSliders[i].addListener (this);
|
knobSliders[i].addListener (this);
|
||||||
addAndMakeVisible (knobSliders[i]);
|
addAndMakeVisible (knobSliders[i]);
|
||||||
|
|
||||||
knobLabels[i].setJustificationType (juce::Justification::centred);
|
knobLabels[i].setJustificationType (juce::Justification::centred);
|
||||||
knobLabels[i].setColour (juce::Label::textColourId, juce::Colour (0xFF90B080));
|
knobLabels[i].setColour (juce::Label::textColourId, juce::Colour (0xFFA0A0A0));
|
||||||
knobLabels[i].setFont (juce::Font (juce::FontOptions { juce::Font::getDefaultMonospacedFontName(), 11.0f, juce::Font::plain }));
|
knobLabels[i].setFont (juce::Font (juce::FontOptions { juce::Font::getDefaultMonospacedFontName(), 13.0f, juce::Font::plain }));
|
||||||
addAndMakeVisible (knobLabels[i]);
|
addAndMakeVisible (knobLabels[i]);
|
||||||
|
|
||||||
knobValueLabels[i].setJustificationType (juce::Justification::centred);
|
knobValueLabels[i].setJustificationType (juce::Justification::centred);
|
||||||
knobValueLabels[i].setColour (juce::Label::textColourId, juce::Colour (0xFFC0E0A0));
|
knobValueLabels[i].setColour (juce::Label::textColourId, juce::Colour (0xFFD0D0D0));
|
||||||
knobValueLabels[i].setFont (juce::Font (juce::FontOptions { juce::Font::getDefaultMonospacedFontName(), 12.0f, juce::Font::bold }));
|
knobValueLabels[i].setFont (juce::Font (juce::FontOptions { juce::Font::getDefaultMonospacedFontName(), 14.0f, juce::Font::bold }));
|
||||||
addAndMakeVisible (knobValueLabels[i]);
|
addAndMakeVisible (knobValueLabels[i]);
|
||||||
|
|
||||||
knobSliders[i].setValue (0.5, juce::dontSendNotification);
|
knobSliders[i].setValue (0.5, juce::dontSendNotification);
|
||||||
|
|
@ -80,23 +80,27 @@ void SM26AudioProcessorEditor::setupNavButtons()
|
||||||
{
|
{
|
||||||
btn.setLookAndFeel (&navLookAndFeel);
|
btn.setLookAndFeel (&navLookAndFeel);
|
||||||
btn.setColour (juce::TextButton::buttonColourId, bg);
|
btn.setColour (juce::TextButton::buttonColourId, bg);
|
||||||
btn.setColour (juce::TextButton::textColourOffId, juce::Colour (0xFFE0E0C0));
|
btn.setColour (juce::TextButton::textColourOffId, juce::Colour (0xFFE0E0E0));
|
||||||
btn.setColour (juce::ComboBox::outlineColourId, juce::Colour (0xFF2A4A18));
|
btn.setColour (juce::ComboBox::outlineColourId, juce::Colour (0xFF444444));
|
||||||
addAndMakeVisible (btn);
|
addAndMakeVisible (btn);
|
||||||
};
|
};
|
||||||
|
|
||||||
setup (navUp, juce::Colour (0xFF2A4A18));
|
setup (navUp, juce::Colour (0xFF2A2A2A));
|
||||||
setup (navDown, juce::Colour (0xFF2A4A18));
|
setup (navDown, juce::Colour (0xFF2A2A2A));
|
||||||
setup (navLeft, juce::Colour (0xFF2A4A18));
|
setup (navLeft, juce::Colour (0xFF2A2A2A));
|
||||||
setup (navRight, juce::Colour (0xFF2A4A18));
|
setup (navRight, juce::Colour (0xFF2A2A2A));
|
||||||
setup (navEnter, juce::Colour (0xFF3A6A28));
|
setup (navEnter, juce::Colour (0xFF3F3F3F));
|
||||||
setup (navEsc, juce::Colour (0xFF3A2A18));
|
setup (navEsc, juce::Colour (0xFF333333));
|
||||||
|
|
||||||
|
navUp.setTriggeredOnMouseDown (true);
|
||||||
|
navUp.setRepeatSpeed (250, 50);
|
||||||
|
navDown.setTriggeredOnMouseDown (true);
|
||||||
|
navDown.setRepeatSpeed (250, 50);
|
||||||
navUp.onClick = [this] { if (menu.isOpen()) menu.up(); else cyclePreset (-1); };
|
navUp.onClick = [this] { if (menu.isOpen()) menu.up(); else cyclePreset (-1); };
|
||||||
navDown.onClick = [this] { if (menu.isOpen()) menu.down(); else cyclePreset (+1); };
|
navDown.onClick = [this] { if (menu.isOpen()) menu.down(); else cyclePreset (+1); };
|
||||||
navLeft.onClick = [this] { menu.left(); };
|
navLeft.onClick = [this] { menu.left(); };
|
||||||
navRight.onClick = [this] { menu.right(); };
|
navRight.onClick = [this] { menu.right(); };
|
||||||
navEnter.onClick = [this] { menu.open(); };
|
navEnter.onClick = [this] { if (menu.isOpen()) menu.enter(); else menu.open(); };
|
||||||
navEsc.onClick = [this] { if (menu.isOpen()) menu.escape(); else menu.close(); };
|
navEsc.onClick = [this] { if (menu.isOpen()) menu.escape(); else menu.close(); };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -127,6 +131,38 @@ void SM26AudioProcessorEditor::buildRootMenu()
|
||||||
return item;
|
return item;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
auto addValue = [&](const char* n, int pid) -> MenuItem
|
||||||
|
{
|
||||||
|
MenuItem mi;
|
||||||
|
mi.label = n;
|
||||||
|
mi.kind = MenuItem::Value;
|
||||||
|
mi.paramId = pid;
|
||||||
|
mi.valueText = [this, pid]() {
|
||||||
|
if (pid == sm26::PDTIME && proc.engine.getParam (sm26::PDSYNC) > 0.5f)
|
||||||
|
return sm26::formatTimeMs ((float) proc.engine.delayTimeMs());
|
||||||
|
return sm26::formatParamReal (pid, proc.engine.getParam (pid));
|
||||||
|
};
|
||||||
|
mi.onAdjust = [this, pid](float d) {
|
||||||
|
float delta = (pid == sm26::PDSTEPS) ? d / 0.02f * (1.0f / 15.0f) : d;
|
||||||
|
float cur = proc.engine.getParam (pid);
|
||||||
|
proc.engine.setParam (pid, sm26::clamp01 (cur + delta));
|
||||||
|
for (int k = 0; k < 4; ++k)
|
||||||
|
{
|
||||||
|
auto kv = proc.engine.knobView (k);
|
||||||
|
if (kv.param == pid)
|
||||||
|
proc.setKnob (k, sm26::clamp01 ((proc.engine.getParam (pid) - kv.lo) / (kv.hi - kv.lo + 1e-9f)));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return mi;
|
||||||
|
};
|
||||||
|
|
||||||
|
auto addHeader = [&](const char* n) {
|
||||||
|
MenuItem h;
|
||||||
|
h.label = "-- " + juce::String (n) + " --";
|
||||||
|
h.kind = MenuItem::Separator;
|
||||||
|
s.items.push_back (h);
|
||||||
|
};
|
||||||
|
|
||||||
{
|
{
|
||||||
MenuItem m;
|
MenuItem m;
|
||||||
m.label = "PRESETS (" + juce::String (sm26::PresetStore::count()) + ")";
|
m.label = "PRESETS (" + juce::String (sm26::PresetStore::count()) + ")";
|
||||||
|
|
@ -135,206 +171,61 @@ void SM26AudioProcessorEditor::buildRootMenu()
|
||||||
MenuScreen ps;
|
MenuScreen ps;
|
||||||
ps.title = "SELECT PRESET";
|
ps.title = "SELECT PRESET";
|
||||||
ps.selected = proc.engine.presetIndex();
|
ps.selected = proc.engine.presetIndex();
|
||||||
for (int i = 0; i < sm26::PresetStore::count(); ++i)
|
juce::String lastCat;
|
||||||
ps.items.push_back (addPreset (
|
const int count = sm26::PresetStore::count();
|
||||||
sm26::PresetStore::get(i)->name, i));
|
for (int i = 0; i < count; ++i)
|
||||||
|
{
|
||||||
|
const auto* p = sm26::PresetStore::get (i);
|
||||||
|
if (lastCat != p->category)
|
||||||
|
{
|
||||||
|
MenuItem h;
|
||||||
|
h.label = "---- " + juce::String (p->category) + " ----";
|
||||||
|
h.kind = MenuItem::Separator;
|
||||||
|
ps.items.push_back (h);
|
||||||
|
lastCat = p->category;
|
||||||
|
}
|
||||||
|
ps.items.push_back (addPreset (p->name, i));
|
||||||
|
}
|
||||||
menu.pushScreen (ps);
|
menu.pushScreen (ps);
|
||||||
};
|
};
|
||||||
s.items.push_back (m);
|
s.items.push_back (m);
|
||||||
}
|
}
|
||||||
|
|
||||||
s.items.push_back (MenuItem().sep());
|
addHeader ("OSCILLATORS");
|
||||||
|
s.items.push_back (addValue ("OSC1 WAVE", sm26::PO1WAVE));
|
||||||
|
s.items.push_back (addValue ("OSC2 WAVE", sm26::PO2WAVE));
|
||||||
|
s.items.push_back (addValue ("O1 OCTAVE", sm26::PO1OCT));
|
||||||
|
s.items.push_back (addValue ("O1 DETUNE", sm26::PO1CT));
|
||||||
|
s.items.push_back (addValue ("O2 OCTAVE", sm26::PO2OCT));
|
||||||
|
s.items.push_back (addValue ("O2 DETUNE", sm26::PO2CT));
|
||||||
|
s.items.push_back (addValue ("MIX", sm26::PMIX));
|
||||||
|
s.items.push_back (addValue ("NOISE", sm26::PNOISE));
|
||||||
|
|
||||||
{
|
addHeader ("FILTER");
|
||||||
MenuItem m;
|
s.items.push_back (addValue ("CUTOFF", sm26::PCUTOFF));
|
||||||
m.label = "OSCILLATORS";
|
s.items.push_back (addValue ("RES", sm26::PRES));
|
||||||
m.kind = MenuItem::Submenu;
|
s.items.push_back (addValue ("F-ENV", sm26::PFENV));
|
||||||
m.onEnter = [this]() {
|
s.items.push_back (addValue ("F-TYPE", sm26::PFTYPE));
|
||||||
MenuScreen os;
|
|
||||||
os.title = "OSCILLATORS";
|
|
||||||
os.selected = 0;
|
|
||||||
|
|
||||||
auto addItem = [&](const char* n, int pid) {
|
addHeader ("ENVELOPE");
|
||||||
MenuItem mi;
|
s.items.push_back (addValue ("ATTACK", sm26::PATK));
|
||||||
mi.label = n;
|
s.items.push_back (addValue ("DECAY", sm26::PDEC));
|
||||||
mi.kind = MenuItem::Value;
|
s.items.push_back (addValue ("SUSTAIN", sm26::PSUS));
|
||||||
mi.paramId = pid;
|
s.items.push_back (addValue ("RELEASE", sm26::PREL));
|
||||||
mi.valueText = [this, pid]() { return sm26::formatParamReal (pid, proc.engine.getParam (pid)); };
|
|
||||||
mi.onAdjust = [this, pid](float d) {
|
|
||||||
float cur = proc.engine.getParam (pid);
|
|
||||||
proc.engine.setParam (pid, sm26::clamp01 (cur + d));
|
|
||||||
for (int k = 0; k < 4; ++k)
|
|
||||||
{
|
|
||||||
auto kv = proc.engine.knobView (k);
|
|
||||||
if (kv.param == pid)
|
|
||||||
proc.setKnob (k, sm26::clamp01 ((proc.engine.getParam (pid) - kv.lo) / (kv.hi - kv.lo + 1e-9f)));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
os.items.push_back (mi);
|
|
||||||
};
|
|
||||||
|
|
||||||
addItem ("OSC1 WAVE", sm26::PO1WAVE);
|
addHeader ("DELAY");
|
||||||
addItem ("OSC2 WAVE", sm26::PO2WAVE);
|
s.items.push_back (addValue ("TIME/STEPS", sm26::PDTIME));
|
||||||
addItem ("O1 OCTAVE", sm26::PO1OCT);
|
s.items.push_back (addValue ("STEPS", sm26::PDSTEPS));
|
||||||
addItem ("O1 DETUNE", sm26::PO1CT);
|
s.items.push_back (addValue ("SYNC", sm26::PDSYNC));
|
||||||
addItem ("O2 OCTAVE", sm26::PO2OCT);
|
s.items.push_back (addValue ("FEEDBACK", sm26::PDFB));
|
||||||
addItem ("O2 DETUNE", sm26::PO2CT);
|
s.items.push_back (addValue ("MIX", sm26::PDMIX));
|
||||||
addItem ("MIX", sm26::PMIX);
|
|
||||||
addItem ("NOISE", sm26::PNOISE);
|
|
||||||
menu.pushScreen (os);
|
|
||||||
};
|
|
||||||
s.items.push_back (m);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
addHeader ("SYSTEM");
|
||||||
MenuItem m;
|
s.items.push_back (addValue ("DRIVE", sm26::PDRIVE));
|
||||||
m.label = "FILTER";
|
s.items.push_back (addValue ("GLIDE", sm26::PGLIDE));
|
||||||
m.kind = MenuItem::Submenu;
|
s.items.push_back (addValue ("MASTER", sm26::PMASTER));
|
||||||
m.onEnter = [this]() {
|
|
||||||
MenuScreen fs;
|
|
||||||
fs.title = "FILTER";
|
|
||||||
fs.selected = 0;
|
|
||||||
|
|
||||||
auto addItem = [&](const char* n, int pid) {
|
|
||||||
MenuItem mi;
|
|
||||||
mi.label = n;
|
|
||||||
mi.kind = MenuItem::Value;
|
|
||||||
mi.paramId = pid;
|
|
||||||
mi.valueText = [this, pid]() { return sm26::formatParamReal (pid, proc.engine.getParam (pid)); };
|
|
||||||
mi.onAdjust = [this, pid](float d) {
|
|
||||||
float cur = proc.engine.getParam (pid);
|
|
||||||
proc.engine.setParam (pid, sm26::clamp01 (cur + d));
|
|
||||||
for (int k = 0; k < 4; ++k)
|
|
||||||
{
|
|
||||||
auto kv = proc.engine.knobView (k);
|
|
||||||
if (kv.param == pid)
|
|
||||||
proc.setKnob (k, sm26::clamp01 ((proc.engine.getParam (pid) - kv.lo) / (kv.hi - kv.lo + 1e-9f)));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
fs.items.push_back (mi);
|
|
||||||
};
|
|
||||||
|
|
||||||
addItem ("CUTOFF", sm26::PCUTOFF);
|
|
||||||
addItem ("RES", sm26::PRES);
|
|
||||||
addItem ("F-ENV", sm26::PFENV);
|
|
||||||
addItem ("F-TYPE", sm26::PFTYPE);
|
|
||||||
menu.pushScreen (fs);
|
|
||||||
};
|
|
||||||
s.items.push_back (m);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
MenuItem m;
|
|
||||||
m.label = "ENVELOPE";
|
|
||||||
m.kind = MenuItem::Submenu;
|
|
||||||
m.onEnter = [this]() {
|
|
||||||
MenuScreen es;
|
|
||||||
es.title = "ENVELOPE";
|
|
||||||
es.selected = 0;
|
|
||||||
|
|
||||||
auto addItem = [&](const char* n, int pid) {
|
|
||||||
MenuItem mi;
|
|
||||||
mi.label = n;
|
|
||||||
mi.kind = MenuItem::Value;
|
|
||||||
mi.paramId = pid;
|
|
||||||
mi.valueText = [this, pid]() { return sm26::formatParamReal (pid, proc.engine.getParam (pid)); };
|
|
||||||
mi.onAdjust = [this, pid](float d) {
|
|
||||||
float cur = proc.engine.getParam (pid);
|
|
||||||
proc.engine.setParam (pid, sm26::clamp01 (cur + d));
|
|
||||||
for (int k = 0; k < 4; ++k)
|
|
||||||
{
|
|
||||||
auto kv = proc.engine.knobView (k);
|
|
||||||
if (kv.param == pid)
|
|
||||||
proc.setKnob (k, sm26::clamp01 ((proc.engine.getParam (pid) - kv.lo) / (kv.hi - kv.lo + 1e-9f)));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
es.items.push_back (mi);
|
|
||||||
};
|
|
||||||
|
|
||||||
addItem ("ATTACK", sm26::PATK);
|
|
||||||
addItem ("DECAY", sm26::PDEC);
|
|
||||||
addItem ("SUSTAIN", sm26::PSUS);
|
|
||||||
addItem ("RELEASE", sm26::PREL);
|
|
||||||
menu.pushScreen (es);
|
|
||||||
};
|
|
||||||
s.items.push_back (m);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
MenuItem m;
|
|
||||||
m.label = "DELAY";
|
|
||||||
m.kind = MenuItem::Submenu;
|
|
||||||
m.onEnter = [this]() {
|
|
||||||
MenuScreen ds;
|
|
||||||
ds.title = "DELAY";
|
|
||||||
ds.selected = 0;
|
|
||||||
|
|
||||||
auto addItem = [&](const char* n, int pid) {
|
|
||||||
MenuItem mi;
|
|
||||||
mi.label = n;
|
|
||||||
mi.kind = MenuItem::Value;
|
|
||||||
mi.paramId = pid;
|
|
||||||
mi.valueText = [this, pid]() { return sm26::formatParamReal (pid, proc.engine.getParam (pid)); };
|
|
||||||
mi.onAdjust = [this, pid](float d) {
|
|
||||||
float cur = proc.engine.getParam (pid);
|
|
||||||
proc.engine.setParam (pid, sm26::clamp01 (cur + d));
|
|
||||||
for (int k = 0; k < 4; ++k)
|
|
||||||
{
|
|
||||||
auto kv = proc.engine.knobView (k);
|
|
||||||
if (kv.param == pid)
|
|
||||||
proc.setKnob (k, sm26::clamp01 ((proc.engine.getParam (pid) - kv.lo) / (kv.hi - kv.lo + 1e-9f)));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
ds.items.push_back (mi);
|
|
||||||
};
|
|
||||||
|
|
||||||
addItem ("TIME/STEPS", sm26::PDTIME);
|
|
||||||
addItem ("STEPS", sm26::PDSTEPS);
|
|
||||||
addItem ("SYNC", sm26::PDSYNC);
|
|
||||||
addItem ("FEEDBACK", sm26::PDFB);
|
|
||||||
addItem ("MIX", sm26::PDMIX);
|
|
||||||
menu.pushScreen (ds);
|
|
||||||
};
|
|
||||||
s.items.push_back (m);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
MenuItem m;
|
|
||||||
m.label = "SYSTEM";
|
|
||||||
m.kind = MenuItem::Submenu;
|
|
||||||
m.onEnter = [this]() {
|
|
||||||
MenuScreen ss;
|
|
||||||
ss.title = "SYSTEM";
|
|
||||||
ss.selected = 0;
|
|
||||||
|
|
||||||
auto addItem = [&](const char* n, int pid) {
|
|
||||||
MenuItem mi;
|
|
||||||
mi.label = n;
|
|
||||||
mi.kind = MenuItem::Value;
|
|
||||||
mi.paramId = pid;
|
|
||||||
mi.valueText = [this, pid]() { return sm26::formatParamReal (pid, proc.engine.getParam (pid)); };
|
|
||||||
mi.onAdjust = [this, pid](float d) {
|
|
||||||
float cur = proc.engine.getParam (pid);
|
|
||||||
proc.engine.setParam (pid, sm26::clamp01 (cur + d));
|
|
||||||
for (int k = 0; k < 4; ++k)
|
|
||||||
{
|
|
||||||
auto kv = proc.engine.knobView (k);
|
|
||||||
if (kv.param == pid)
|
|
||||||
proc.setKnob (k, sm26::clamp01 ((proc.engine.getParam (pid) - kv.lo) / (kv.hi - kv.lo + 1e-9f)));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
ss.items.push_back (mi);
|
|
||||||
};
|
|
||||||
|
|
||||||
addItem ("DRIVE", sm26::PDRIVE);
|
|
||||||
addItem ("GLIDE", sm26::PGLIDE);
|
|
||||||
addItem ("MASTER", sm26::PMASTER);
|
|
||||||
|
|
||||||
{
|
|
||||||
MenuItem mi; mi.label = "---"; mi.kind = MenuItem::Separator;
|
|
||||||
ss.items.push_back (mi);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
addHeader ("INFO");
|
||||||
{
|
{
|
||||||
MenuItem mi;
|
MenuItem mi;
|
||||||
mi.label = "ABOUT";
|
mi.label = "ABOUT";
|
||||||
|
|
@ -344,7 +235,7 @@ void SM26AudioProcessorEditor::buildRootMenu()
|
||||||
as.title = "ABOUT";
|
as.title = "ABOUT";
|
||||||
as.selected = 0;
|
as.selected = 0;
|
||||||
{
|
{
|
||||||
MenuItem m2; m2.label = "SM-26 Synthesizer"; m2.kind = MenuItem::Action;
|
MenuItem m2; m2.label = "SM-26 Sound Module by A. Jenewein"; m2.kind = MenuItem::Action;
|
||||||
as.items.push_back (m2);
|
as.items.push_back (m2);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
|
@ -366,23 +257,18 @@ void SM26AudioProcessorEditor::buildRootMenu()
|
||||||
as.items.push_back (m2);
|
as.items.push_back (m2);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
MenuItem m2; m2.label = ""; m2.kind = MenuItem::Separator;
|
MenuItem m2; m2.label = "---"; m2.kind = MenuItem::Separator;
|
||||||
as.items.push_back (m2);
|
as.items.push_back (m2);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
MenuItem m2;
|
MenuItem m2;
|
||||||
m2.label = "52 presets | VST3 + AU";
|
m2.label = juce::String (sm26::PresetStore::count()) + " presets | VST3 + AU";
|
||||||
m2.kind = MenuItem::Action;
|
m2.kind = MenuItem::Action;
|
||||||
as.items.push_back (m2);
|
as.items.push_back (m2);
|
||||||
}
|
}
|
||||||
menu.pushScreen (as);
|
menu.pushScreen (as);
|
||||||
};
|
};
|
||||||
ss.items.push_back (mi);
|
s.items.push_back (mi);
|
||||||
}
|
|
||||||
|
|
||||||
menu.pushScreen (ss);
|
|
||||||
};
|
|
||||||
s.items.push_back (m);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
|
|
@ -393,105 +279,47 @@ void SM26AudioProcessorEditor::buildRootMenu()
|
||||||
|
|
||||||
void SM26AudioProcessorEditor::paint (juce::Graphics& g)
|
void SM26AudioProcessorEditor::paint (juce::Graphics& g)
|
||||||
{
|
{
|
||||||
g.fillAll (juce::Colour (0xFF0A0F06));
|
g.fillAll (juce::Colour (0xFF000000));
|
||||||
|
|
||||||
const float totalW = (float) getWidth();
|
const float totalW = (float) getWidth();
|
||||||
const float totalH = (float) getHeight();
|
const float totalH = (float) getHeight();
|
||||||
|
|
||||||
g.setColour (juce::Colour (0xFF1A2E0A));
|
g.setColour (juce::Colour (0xFF1A1A1A));
|
||||||
g.fillRoundedRectangle (8.0f, 8.0f, totalW - 16.0f, totalH - 16.0f, 6.0f);
|
g.fillRoundedRectangle (8.0f, 8.0f, totalW - 16.0f, totalH - 16.0f, 6.0f);
|
||||||
|
|
||||||
g.setColour (juce::Colour (0xFF2A4A18));
|
g.setColour (juce::Colour (0xFF333333));
|
||||||
g.drawRoundedRectangle (8.0f, 8.0f, totalW - 16.0f, totalH - 16.0f, 6.0f, 1.5f);
|
g.drawRoundedRectangle (8.0f, 8.0f, totalW - 16.0f, totalH - 16.0f, 6.0f, 1.5f);
|
||||||
|
|
||||||
if (! menu.isOpen())
|
g.setColour (juce::Colour (0xFFC8C8C8));
|
||||||
{
|
|
||||||
g.setColour (juce::Colour (0xFF6AE050));
|
|
||||||
g.setFont (juce::Font (juce::FontOptions { juce::Font::getDefaultMonospacedFontName(), 14.0f, juce::Font::bold }));
|
g.setFont (juce::Font (juce::FontOptions { juce::Font::getDefaultMonospacedFontName(), 14.0f, juce::Font::bold }));
|
||||||
g.drawText ("SM-26", 20.0f, 16.0f, 100.0f, 22.0f, juce::Justification::centredLeft);
|
g.drawText ("SM-26", 20.0f, 16.0f, 100.0f, 22.0f, juce::Justification::centredLeft);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
g.setColour (juce::Colour (0xFFE0E0C0));
|
|
||||||
g.setFont (juce::Font (juce::FontOptions { juce::Font::getDefaultMonospacedFontName(), 14.0f, juce::Font::bold }));
|
|
||||||
g.drawText (menu.current().title, 20.0f, 16.0f, getWidth() - 40.0f, 22.0f,
|
|
||||||
juce::Justification::centred);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (menu.isOpen())
|
|
||||||
{
|
|
||||||
const auto& ms = menu.current();
|
|
||||||
float y = 44.0f;
|
|
||||||
float itemH = 18.0f;
|
|
||||||
float menuLeft = 20.0f;
|
|
||||||
float menuW = getWidth() - 40.0f;
|
|
||||||
|
|
||||||
for (int i = 0; i < (int) ms.items.size() && y < (float) getHeight() - 60.0f; ++i)
|
|
||||||
{
|
|
||||||
const auto& item = ms.items[i];
|
|
||||||
|
|
||||||
if (item.kind == MenuItem::Separator)
|
|
||||||
{
|
|
||||||
g.setColour (juce::Colour (0xFF2A4A18));
|
|
||||||
g.drawHorizontalLine ((int) y, menuLeft, menuLeft + menuW);
|
|
||||||
y += 4.0f;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool selected = (i == ms.selected);
|
|
||||||
|
|
||||||
if (selected)
|
|
||||||
{
|
|
||||||
g.setColour (juce::Colour (0xFF3A6A28));
|
|
||||||
g.fillRoundedRectangle (menuLeft, y, menuW, itemH, 3.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
g.setColour (selected ? juce::Colour (0xFFE0E0C0) : juce::Colour (0xFF709060));
|
|
||||||
g.setFont (juce::Font (juce::FontOptions { juce::Font::getDefaultMonospacedFontName(), 12.0f, juce::Font::plain }));
|
|
||||||
g.drawText (item.label, menuLeft + 8.0f, y, menuW * 0.6f, itemH,
|
|
||||||
juce::Justification::centredLeft);
|
|
||||||
|
|
||||||
if (item.kind == MenuItem::Value && item.valueText)
|
|
||||||
{
|
|
||||||
g.setColour (juce::Colour (0xFFA0E080));
|
|
||||||
g.drawText (item.valueText(), menuLeft + menuW * 0.55f, y,
|
|
||||||
menuW * 0.4f, itemH, juce::Justification::centredRight);
|
|
||||||
}
|
|
||||||
else if (item.kind == MenuItem::Submenu)
|
|
||||||
{
|
|
||||||
g.setColour (juce::Colour (0xFF90B080));
|
|
||||||
g.drawText (">", menuLeft + menuW - 16.0f, y, 16.0f, itemH,
|
|
||||||
juce::Justification::centredRight);
|
|
||||||
}
|
|
||||||
|
|
||||||
y += itemH + 1.0f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SM26AudioProcessorEditor::resized()
|
void SM26AudioProcessorEditor::resized()
|
||||||
{
|
{
|
||||||
const float totalW = (float) getWidth();
|
const float totalW = (float) getWidth();
|
||||||
const float totalH = (float) getHeight();
|
const float totalH = (float) getHeight();
|
||||||
|
|
||||||
float knobSize = 62.0f;
|
float knobSize = 78.0f;
|
||||||
float knobGap = 18.0f;
|
float knobGap = 20.0f;
|
||||||
float knobsW = 4.0f * knobSize + 3.0f * knobGap;
|
float knobsW = 4.0f * knobSize + 3.0f * knobGap;
|
||||||
float knobsX = (totalW - knobsW) / 2.0f;
|
float knobsX = (totalW - knobsW) / 2.0f;
|
||||||
float knobsY = juce::jmax (190.0f, totalH - 265.0f);
|
float knobsY = juce::jmax (360.0f, totalH - 300.0f);
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i)
|
for (int i = 0; i < 4; ++i)
|
||||||
{
|
{
|
||||||
float x = knobsX + (float) i * (knobSize + knobGap);
|
float x = knobsX + (float) i * (knobSize + knobGap);
|
||||||
knobSliders[i].setBounds ((int) x, (int) knobsY, (int) knobSize, (int) knobSize);
|
knobSliders[i].setBounds ((int) x, (int) knobsY, (int) knobSize, (int) knobSize);
|
||||||
knobLabels[i].setBounds ((int) x, (int) (knobsY + knobSize + 2), (int) knobSize, 16);
|
knobLabels[i].setBounds ((int) x, (int) (knobsY + knobSize + 2), (int) knobSize, 18);
|
||||||
knobValueLabels[i].setBounds ((int) x, (int) (knobsY + knobSize + 18), (int) knobSize, 14);
|
knobValueLabels[i].setBounds ((int) x, (int) (knobsY + knobSize + 20), (int) knobSize, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
float navSize = 30.0f;
|
float navSize = 30.0f;
|
||||||
float navGap = 3.0f;
|
float navGap = 3.0f;
|
||||||
float navCenterX = totalW / 2.0f;
|
float navCenterX = totalW / 2.0f;
|
||||||
float navCenterY = totalH - 90.0f;
|
float legendBottom = knobsY + knobSize + 20.0f + 16.0f;
|
||||||
|
float footerTop = totalH - 22.0f;
|
||||||
|
float navCenterY = (legendBottom + footerTop) * 0.5f;
|
||||||
|
|
||||||
navUp.setBounds ((int) (navCenterX - navSize / 2), (int) (navCenterY - navSize - navGap),
|
navUp.setBounds ((int) (navCenterX - navSize / 2), (int) (navCenterY - navSize - navGap),
|
||||||
(int) navSize, (int) navSize);
|
(int) navSize, (int) navSize);
|
||||||
|
|
@ -507,7 +335,7 @@ void SM26AudioProcessorEditor::resized()
|
||||||
navEsc.setBounds ((int) (navCenterX + navGap), (int) (navCenterY + navSize + navGap),
|
navEsc.setBounds ((int) (navCenterX + navGap), (int) (navCenterY + navSize + navGap),
|
||||||
(int) navSize, (int) navSize);
|
(int) navSize, (int) navSize);
|
||||||
|
|
||||||
lcd.setBounds (14, 42, (int) totalW - 28, 150);
|
lcd.setBounds (14, 16, (int) totalW - 28, 302);
|
||||||
|
|
||||||
footer.setBounds (8, (int) totalH - 22, (int) totalW - 16, 16);
|
footer.setBounds (8, (int) totalH - 22, (int) totalW - 16, 16);
|
||||||
}
|
}
|
||||||
|
|
@ -576,30 +404,22 @@ void SM26AudioProcessorEditor::updateLCD()
|
||||||
lcd.setLine (0, juce::String (presetIdx + 1) + "/" + juce::String (sm26::PresetStore::count())
|
lcd.setLine (0, juce::String (presetIdx + 1) + "/" + juce::String (sm26::PresetStore::count())
|
||||||
+ " " + sm26::PresetStore::fullLabel (*p));
|
+ " " + sm26::PresetStore::fullLabel (*p));
|
||||||
|
|
||||||
lcd.setLine (1, padRight (proc.engine.knobView (0).name, 12)
|
for (int k = 0; k < 4; ++k)
|
||||||
+ padRight (sm26::formatParamReal (proc.engine.knobView(0).param,
|
{
|
||||||
proc.engine.getParam(proc.engine.knobView(0).param)), 12)
|
auto kv = proc.engine.knobView (k);
|
||||||
+ " "
|
lcd.setLine (1 + k, padRight (kv.name, 20)
|
||||||
+ padRight (proc.engine.knobView (2).name, 12)
|
+ sm26::formatParamReal (kv.param, proc.engine.getParam (kv.param)));
|
||||||
+ sm26::formatParamReal (proc.engine.knobView(2).param,
|
}
|
||||||
proc.engine.getParam(proc.engine.knobView(2).param)));
|
|
||||||
|
|
||||||
lcd.setLine (2, padRight (proc.engine.knobView (1).name, 12)
|
|
||||||
+ padRight (sm26::formatParamReal (proc.engine.knobView(1).param,
|
|
||||||
proc.engine.getParam(proc.engine.knobView(1).param)), 12)
|
|
||||||
+ " "
|
|
||||||
+ padRight (proc.engine.knobView (3).name, 12)
|
|
||||||
+ sm26::formatParamReal (proc.engine.knobView(3).param,
|
|
||||||
proc.engine.getParam(proc.engine.knobView(3).param)));
|
|
||||||
|
|
||||||
double bpm = proc.engine.lastBpm();
|
double bpm = proc.engine.lastBpm();
|
||||||
bool playing = proc.engine.transport();
|
juce::String bpmStr = juce::String (bpm, 1) + " BPM";
|
||||||
juce::String bpmStr = playing ? juce::String (bpm, 1) + " BPM" : "--- BPM";
|
|
||||||
int notes = proc.engine.notesPlaying();
|
int notes = proc.engine.notesPlaying();
|
||||||
juce::String notesStr = notes > 0 ? "NOTES:" + juce::String (notes) : "";
|
juce::String notesStr = notes > 0 ? "NOTES:" + juce::String (notes) : "";
|
||||||
|
|
||||||
lcd.setLine (3, juce::String ("SM-26") + " " + bpmStr + " " + notesStr
|
lcd.setLine (6, bpmStr + (notesStr.isNotEmpty() ? " " + notesStr : ""));
|
||||||
+ " UP/DN=PATCH OK=MENU");
|
lcd.setLine (7, juce::String ("SM-26") + " UP/DN=PATCH OK=MENU");
|
||||||
|
for (int r = 0; r < LcdDisplay::kRows; ++r)
|
||||||
|
lcd.setInverted (r, false);
|
||||||
lcd.showCursor (false);
|
lcd.showCursor (false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -607,18 +427,39 @@ void SM26AudioProcessorEditor::updateLCD()
|
||||||
const auto& cs = menu.current();
|
const auto& cs = menu.current();
|
||||||
|
|
||||||
lcd.setLine (0, "== " + cs.title + " ==");
|
lcd.setLine (0, "== " + cs.title + " ==");
|
||||||
for (int row = 0; row < 3 && row < (int) cs.items.size(); ++row)
|
|
||||||
|
for (int r = 0; r < LcdDisplay::kRows; ++r)
|
||||||
|
lcd.setInverted (r, false);
|
||||||
|
|
||||||
|
std::vector<int> shown;
|
||||||
|
for (int i = 0; i < (int) cs.items.size(); ++i)
|
||||||
{
|
{
|
||||||
int idx = juce::jlimit (0, (int) cs.items.size() - 1, cs.selected + row);
|
const auto& it = cs.items[i];
|
||||||
|
if (it.kind == MenuItem::Separator && it.label.isEmpty())
|
||||||
|
continue;
|
||||||
|
shown.push_back (i);
|
||||||
|
}
|
||||||
|
|
||||||
|
int pos = 0;
|
||||||
|
for (int i = 0; i < (int) shown.size(); ++i)
|
||||||
|
if (shown[i] == cs.selected) { pos = i; break; }
|
||||||
|
|
||||||
|
int top = juce::jlimit (0, juce::jmax (0, (int) shown.size() - 6), pos - 2);
|
||||||
|
for (int row = 0; row < 6 && top + row < (int) shown.size(); ++row)
|
||||||
|
{
|
||||||
|
int idx = shown[top + row];
|
||||||
const auto& item = cs.items[idx];
|
const auto& item = cs.items[idx];
|
||||||
juce::String line = (idx == cs.selected ? "> " : " ") + item.label;
|
juce::String line = " " + item.label;
|
||||||
if (item.kind == MenuItem::Value && item.valueText)
|
if (item.kind == MenuItem::Value && item.valueText)
|
||||||
line = padRight (line, 50) + item.valueText();
|
line = padRight (line, 50) + item.valueText();
|
||||||
else if (item.kind == MenuItem::Submenu)
|
else if (item.kind == MenuItem::Submenu)
|
||||||
line = line + " [ENTER]";
|
line = line + " [ENTER]";
|
||||||
|
else if (item.kind == MenuItem::Separator)
|
||||||
|
line = " " + item.label;
|
||||||
lcd.setLine (1 + row, line);
|
lcd.setLine (1 + row, line);
|
||||||
|
lcd.setInverted (1 + row, idx == cs.selected);
|
||||||
}
|
}
|
||||||
lcd.setLine (3, "UP/DN=SEL L/R=VAL OK=OK ESC=BACK");
|
lcd.setLine (7, "UP/DN=SEL L/R=VAL OK=OK ESC=BACK");
|
||||||
lcd.showCursor (false);
|
lcd.showCursor (false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -5,7 +5,7 @@ namespace sm26 {
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
struct Catalog {
|
struct Catalog {
|
||||||
Preset data[52];
|
Preset data[256];
|
||||||
int n = 0;
|
int n = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -46,18 +46,22 @@ Catalog& catalog()
|
||||||
const C cShp[4] = { K("CUTOFF",PCUTOFF,0.05f,1.0f), K("RES",PRES,0.0f,1.0f), K("F-TYPE",PFTYPE,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) };
|
const C cShp[4] = { K("CUTOFF",PCUTOFF,0.05f,1.0f), K("RES",PRES,0.0f,1.0f), K("F-TYPE",PFTYPE,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) };
|
||||||
const C cKeys[4] = { K("CUTOFF",PCUTOFF,0.05f,0.95f), K("DECAY",PDEC,0.1f,0.9f), K("DRIVE",PDRIVE,0.0f,1.0f),K("D-MIX",PDMIX,0.0f,1.0f) };
|
const C cKeys[4] = { K("CUTOFF",PCUTOFF,0.05f,0.95f), K("DECAY",PDEC,0.1f,0.9f), K("DRIVE",PDRIVE,0.0f,1.0f),K("D-MIX",PDMIX,0.0f,1.0f) };
|
||||||
const C cStab[4] = { K("CUTOFF",PCUTOFF,0.05f,0.95f), K("RES",PRES,0.0f,1.0f), K("F-ENV",PFENV,0.0f,1.0f), K("DRIVE",PDRIVE,0.0f,1.0f) };
|
const C cStab[4] = { K("CUTOFF",PCUTOFF,0.05f,0.95f), K("RES",PRES,0.0f,1.0f), K("F-ENV",PFENV,0.0f,1.0f), K("DRIVE",PDRIVE,0.0f,1.0f) };
|
||||||
|
const C cBell[4] = { K("RATIO",PO2OCT,0.0f,1.0f), K("DECAY",PDEC,0.1f,0.95f), K("RES",PRES,0.0f,1.0f), K("DELAY",PDMIX,0.0f,1.0f) };
|
||||||
|
const C cOrgan[4] = { K("CUTOFF",PCUTOFF,0.05f,1.0f),K("DRIVE",PDRIVE,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.9f), K("D-MIX",PDMIX,0.0f,0.6f) };
|
||||||
|
const C cStr[4] = { K("CUTOFF",PCUTOFF,0.05f,0.95f),K("F-ENV",PFENV,0.0f,1.0f), K("DECAY",PDEC,0.2f,0.95f), K("D-MIX",PDMIX,0.0f,1.0f) };
|
||||||
|
const C cTone[4] = { K("CUTOFF",PCUTOFF,0.05f,1.0f),K("DRIVE",PDRIVE,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.9f), K("DELAY",PDMIX,0.0f,1.0f) };
|
||||||
|
|
||||||
// BASS ------------------------------------------------------------
|
// BASS ------------------------------------------------------------
|
||||||
add("Sub Square", "BASS",
|
add("Sub Square", "BASS",
|
||||||
{ {PO1WAVE,0.75f},{PO2WAVE,0.0f},{PO1OCT,0.25f},{PO2OCT,0.28f},{PMIX,0.9f},
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.0f},{PO1OCT,0.25f},{PO2OCT,0.28f},{PMIX,0.9f},
|
||||||
{PCUTOFF,0.4f},{PRES,0.35f},{PATK,0.015f},{PDEC,0.4f},{PSUS,0.7f},{PREL,0.25f},
|
{PCUTOFF,0.4f},{PRES,0.35f},{PATK,0.015f},{PDEC,0.4f},{PSUS,0.7f},{PREL,0.25f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,6.0f},{PDFB,0.5f},{PDMIX,0.4f},{PMASTER,0.8f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.5f},{PDMIX,0.4f},{PMASTER,0.8f} },
|
||||||
{ K("CUTOFF",PCUTOFF,0.15f,0.8f),K("RES",PRES,0.0f,1.0f),K("DECAY",PDEC,0.15f,0.95f),K("D-MIX",PDMIX,0.0f,1.0f) });
|
{ K("CUTOFF",PCUTOFF,0.15f,0.8f),K("RES",PRES,0.0f,1.0f),K("DECAY",PDEC,0.15f,0.95f),K("D-MIX",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
add("Deep Saw", "BASS",
|
add("Deep Saw", "BASS",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.75f},{PO1OCT,0.317f},{PO2OCT,0.36f},{PMIX,0.5f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.75f},{PO1OCT,0.317f},{PO2OCT,0.36f},{PMIX,0.5f},
|
||||||
{PCUTOFF,0.42f},{PRES,0.25f},{PFENV,0.3f},{PATK,0.03f},{PDEC,0.45f},{PSUS,0.65f},{PREL,0.2f},
|
{PCUTOFF,0.42f},{PRES,0.25f},{PFENV,0.3f},{PATK,0.03f},{PDEC,0.45f},{PSUS,0.65f},{PREL,0.2f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDFB,0.45f},{PDMIX,0.35f},{PMASTER,0.75f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.45f},{PDMIX,0.35f},{PMASTER,0.75f} },
|
||||||
{ K("CUTOFF",PCUTOFF,0.1f,0.7f),K("RES",PRES,0.0f,1.0f),K("F-ENV",PFENV,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) });
|
{ K("CUTOFF",PCUTOFF,0.1f,0.7f),K("RES",PRES,0.0f,1.0f),K("F-ENV",PFENV,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
add("Acid Bass", "BASS",
|
add("Acid Bass", "BASS",
|
||||||
|
|
@ -75,7 +79,7 @@ Catalog& catalog()
|
||||||
add("DnB Reeses", "BASS",
|
add("DnB Reeses", "BASS",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.525f},{PO2CT,0.475f},{PMIX,0.5f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.525f},{PO2CT,0.475f},{PMIX,0.5f},
|
||||||
{PCUTOFF,0.28f},{PRES,0.5f},{PFENV,0.6f},{PATK,0.01f},{PDEC,0.5f},{PSUS,0.6f},{PREL,0.15f},
|
{PCUTOFF,0.28f},{PRES,0.5f},{PFENV,0.6f},{PATK,0.01f},{PDEC,0.5f},{PSUS,0.6f},{PREL,0.15f},
|
||||||
{PDRIVE,0.5f},{PDSYNC,1.0f},{PDSTEPS,10.0f},{PDFB,0.4f},{PDMIX,0.25f},{PMASTER,0.75f} },
|
{PDRIVE,0.5f},{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.4f},{PDMIX,0.25f},{PMASTER,0.75f} },
|
||||||
{ K("CUTOFF",PCUTOFF,0.05f,0.7f),K("RES",PRES,0.0f,1.0f),K("DETUNE",PO1CT,0.0f,1.0f),K("DRIVE",PDRIVE,0.0f,1.0f) });
|
{ K("CUTOFF",PCUTOFF,0.05f,0.7f),K("RES",PRES,0.0f,1.0f),K("DETUNE",PO1CT,0.0f,1.0f),K("DRIVE",PDRIVE,0.0f,1.0f) });
|
||||||
|
|
||||||
add("Round Sub", "BASS",
|
add("Round Sub", "BASS",
|
||||||
|
|
@ -87,87 +91,183 @@ Catalog& catalog()
|
||||||
add("Filter Zam", "BASS",
|
add("Filter Zam", "BASS",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.75f},{PO1OCT,0.28f},{PO2OCT,0.35f},{PMIX,0.6f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.75f},{PO1OCT,0.28f},{PO2OCT,0.35f},{PMIX,0.6f},
|
||||||
{PCUTOFF,0.18f},{PRES,0.7f},{PFENV,0.8f},{PATK,0.01f},{PDEC,0.35f},{PSUS,0.4f},{PREL,0.3f},
|
{PCUTOFF,0.18f},{PRES,0.7f},{PFENV,0.8f},{PATK,0.01f},{PDEC,0.35f},{PSUS,0.4f},{PREL,0.3f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDFB,0.55f},{PDMIX,0.3f},{PMASTER,0.8f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.55f},{PDMIX,0.3f},{PMASTER,0.8f} },
|
||||||
{ K("CUTOFF",PCUTOFF,0.04f,0.5f),K("RES",PRES,0.0f,1.0f),K("F-ENV",PFENV,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.9f) });
|
{ K("CUTOFF",PCUTOFF,0.04f,0.5f),K("RES",PRES,0.0f,1.0f),K("F-ENV",PFENV,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.9f) });
|
||||||
|
|
||||||
add("Dirty Tron", "BASS",
|
add("Dirty Tron", "BASS",
|
||||||
{ {PO1WAVE,0.75f},{PO2WAVE,0.5f},{PO1OCT,0.25f},{PO2OCT,0.28f},{PMIX,0.5f},
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.5f},{PO1OCT,0.25f},{PO2OCT,0.28f},{PMIX,0.5f},
|
||||||
{PCUTOFF,0.35f},{PRES,0.4f},{PFENV,0.4f},{PATK,0.02f},{PDEC,0.5f},{PSUS,0.6f},{PREL,0.15f},
|
{PCUTOFF,0.35f},{PRES,0.4f},{PFENV,0.4f},{PATK,0.02f},{PDEC,0.5f},{PSUS,0.6f},{PREL,0.15f},
|
||||||
{PDRIVE,0.6f},{PDSYNC,1.0f},{PDSTEPS,6.0f},{PDFB,0.5f},{PDMIX,0.35f},{PMASTER,0.8f} },
|
{PDRIVE,0.6f},{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.5f},{PDMIX,0.35f},{PMASTER,0.8f} },
|
||||||
{ K("CUTOFF",PCUTOFF,0.05f,0.85f),K("RES",PRES,0.0f,1.0f),K("DRIVE",PDRIVE,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) });
|
{ K("CUTOFF",PCUTOFF,0.05f,0.85f),K("RES",PRES,0.0f,1.0f),K("DRIVE",PDRIVE,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
|
add("Tech Bass", "BASS",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.0f},{PO1OCT,0.25f},{PO2OCT,0.24f},{PMIX,0.85f},
|
||||||
|
{PCUTOFF,0.25f},{PRES,0.55f},{PFENV,0.6f},{PATK,0.004f},{PDEC,0.55f},{PSUS,0.2f},{PREL,0.12f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.85f} },
|
||||||
|
{ K("CUTOFF",PCUTOFF,0.04f,0.6f),K("RES",PRES,0.0f,1.0f),K("F-ENV",PFENV,0.0f,1.0f),K("DRIVE",PDRIVE,0.0f,1.0f) });
|
||||||
|
|
||||||
|
add("Anime Bass", "BASS",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.25f},{PO1OCT,0.28f},{PO2OCT,0.3f},{PMIX,0.6f},
|
||||||
|
{PCUTOFF,0.16f},{PRES,0.65f},{PFENV,0.35f},{PATK,0.02f},{PDEC,0.4f},{PSUS,0.6f},{PREL,0.2f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.5f},{PDMIX,0.35f},{PMASTER,0.8f} },
|
||||||
|
{ K("CUTOFF",PCUTOFF,0.04f,0.5f),K("RES",PRES,0.0f,1.0f),K("F-ENV",PFENV,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
|
add("Clipped Bass", "BASS",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.25f},{PO1OCT,0.25f},{PO2OCT,0.3f},{PMIX,0.8f},
|
||||||
|
{PCUTOFF,0.55f},{PRES,0.25f},{PFENV,0.2f},{PATK,0.005f},{PDEC,0.35f},{PSUS,0.6f},{PREL,0.15f},
|
||||||
|
{PDRIVE,0.9f},{PDSYNC,0.0f},{PMASTER,0.8f} },
|
||||||
|
{ K("CUTOFF",PCUTOFF,0.05f,0.85f),K("DRIVE",PDRIVE,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.9f),K("D-MIX",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
|
add("House Bass", "BASS",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.0f},{PO1OCT,0.25f},{PO2OCT,0.28f},{PMIX,1.0f},
|
||||||
|
{PCUTOFF,0.45f},{PRES,0.3f},{PFENV,0.3f},{PATK,0.004f},{PDEC,0.3f},{PSUS,0.5f},{PREL,0.12f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.8f} },
|
||||||
|
{ K("CUTOFF",PCUTOFF,0.05f,0.8f),K("RES",PRES,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.95f),K("D-MIX",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
|
add("Purple Bass", "BASS",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.45f},{PO2CT,0.55f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.3f},{PRES,0.45f},{PFENV,0.6f},{PATK,0.008f},{PDEC,0.45f},{PSUS,0.5f},{PREL,0.18f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,4.0f/15.0f},{PDFB,0.6f},{PDMIX,0.4f},{PMASTER,0.8f} },
|
||||||
|
{ K("CUTOFF",PCUTOFF,0.05f,0.8f),K("RES",PRES,0.0f,1.0f),K("F-ENV",PFENV,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
|
add("Goa Bass", "BASS",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1OCT,0.25f},{PO2OCT,0.5f},{PMIX,0.5f},{PNOISE,0.08f},
|
||||||
|
{PCUTOFF,0.4f},{PRES,0.35f},{PFENV,0.3f},{PATK,0.03f},{PDEC,0.4f},{PSUS,0.8f},{PREL,0.2f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.5f},{PDMIX,0.35f},{PMASTER,0.75f} },
|
||||||
|
{ K("CUTOFF",PCUTOFF,0.05f,0.8f),K("RES",PRES,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.95f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
|
add("Jungle Bass", "BASS",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.40f},{PO2CT,0.60f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.3f},{PRES,0.5f},{PFENV,0.55f},{PATK,0.008f},{PDEC,0.45f},{PSUS,0.55f},{PREL,0.12f},
|
||||||
|
{PDRIVE,0.55f},{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.8f} },
|
||||||
|
{ K("CUTOFF",PCUTOFF,0.05f,0.7f),K("RES",PRES,0.0f,1.0f),K("DETUNE",PO1CT,0.0f,1.0f),K("DRIVE",PDRIVE,0.0f,1.0f) });
|
||||||
|
|
||||||
|
add("Future Bass", "BASS",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.5f},{PO1CT,0.45f},{PO2CT,0.55f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.28f},{PRES,0.4f},{PFENV,0.7f},{PATK,0.01f},{PDEC,0.5f},{PSUS,0.4f},{PREL,0.2f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.5f},{PDMIX,0.4f},{PMASTER,0.8f} },
|
||||||
|
{ K("CUTOFF",PCUTOFF,0.04f,0.7f),K("RES",PRES,0.0f,1.0f),K("F-ENV",PFENV,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
// LEAD ------------------------------------------------------------
|
// LEAD ------------------------------------------------------------
|
||||||
add("Plain Sine", "LEAD",
|
add("Plain Sine", "LEAD",
|
||||||
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PMIX,1.0f},{PCUTOFF,0.7f},{PRES,0.15f},{PFENV,0.3f},
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PMIX,1.0f},{PCUTOFF,0.7f},{PRES,0.15f},{PFENV,0.3f},
|
||||||
{PATK,0.02f},{PDEC,0.3f},{PSUS,0.65f},{PREL,0.2f},{PGLIDE,0.2f},
|
{PATK,0.02f},{PDEC,0.3f},{PSUS,0.65f},{PREL,0.2f},{PGLIDE,0.2f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDMIX,0.3f},{PMASTER,0.75f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.75f} },
|
||||||
cCff);
|
cCff);
|
||||||
|
|
||||||
add("Square Lead", "LEAD",
|
add("Square Lead", "LEAD",
|
||||||
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1CT,0.505f},{PMIX,0.5f},{PCUTOFF,0.55f},{PRES,0.3f},
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1CT,0.505f},{PMIX,0.5f},{PCUTOFF,0.55f},{PRES,0.3f},
|
||||||
{PFENV,0.35f},{PATK,0.01f},{PDEC,0.3f},{PSUS,0.7f},{PREL,0.15f},{PGLIDE,0.25f},
|
{PFENV,0.35f},{PATK,0.01f},{PDEC,0.3f},{PSUS,0.7f},{PREL,0.15f},{PGLIDE,0.25f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,6.0f},{PDFB,0.5f},{PDMIX,0.3f},{PMASTER,0.75f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.5f},{PDMIX,0.3f},{PMASTER,0.75f} },
|
||||||
cStab);
|
cStab);
|
||||||
|
|
||||||
add("Saw Lead", "LEAD",
|
add("Saw Lead", "LEAD",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.51f},{PO2CT,0.49f},{PMIX,0.5f},{PCUTOFF,0.5f},{PRES,0.25f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.51f},{PO2CT,0.49f},{PMIX,0.5f},{PCUTOFF,0.5f},{PRES,0.25f},
|
||||||
{PFENV,0.4f},{PATK,0.01f},{PDEC,0.35f},{PSUS,0.7f},{PREL,0.12f},{PGLIDE,0.3f},
|
{PFENV,0.4f},{PATK,0.01f},{PDEC,0.35f},{PSUS,0.7f},{PREL,0.12f},{PGLIDE,0.3f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDMIX,0.35f},{PMASTER,0.75f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.35f},{PMASTER,0.75f} },
|
||||||
cCff);
|
cCff);
|
||||||
|
|
||||||
add("Distant Lead", "LEAD",
|
add("Distant Lead", "LEAD",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.25f},{PO1CT,0.53f},{PO2CT,0.5f},{PMIX,0.5f},{PCUTOFF,0.3f},{PRES,0.4f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.25f},{PO1CT,0.53f},{PO2CT,0.5f},{PMIX,0.5f},{PCUTOFF,0.3f},{PRES,0.4f},
|
||||||
{PFENV,0.55f},{PATK,0.005f},{PDEC,0.5f},{PSUS,0.5f},{PREL,0.35f},
|
{PFENV,0.55f},{PATK,0.005f},{PDEC,0.5f},{PSUS,0.5f},{PREL,0.35f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,6.0f},{PDFB,0.6f},{PDMIX,0.55f},{PMASTER,0.8f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.6f},{PDMIX,0.55f},{PMASTER,0.8f} },
|
||||||
{ K("CUTOFF",PCUTOFF,0.05f,0.8f),K("RES",PRES,0.0f,1.0f),K("F-ENV",PFENV,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) });
|
{ K("CUTOFF",PCUTOFF,0.05f,0.8f),K("RES",PRES,0.0f,1.0f),K("F-ENV",PFENV,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
add("Glass Lead", "LEAD",
|
add("Glass Lead", "LEAD",
|
||||||
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1OCT,0.62f},{PO2OCT,0.56f},{PO1CT,0.51f},{PO2CT,0.49f},
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1OCT,0.62f},{PO2OCT,0.56f},{PO1CT,0.51f},{PO2CT,0.49f},
|
||||||
{PMIX,0.5f},{PCUTOFF,0.45f},{PRES,0.45f},{PFENV,0.5f},{PATK,0.01f},{PDEC,0.4f},{PSUS,0.6f},{PREL,0.25f},
|
{PMIX,0.5f},{PCUTOFF,0.45f},{PRES,0.45f},{PFENV,0.5f},{PATK,0.01f},{PDEC,0.4f},{PSUS,0.6f},{PREL,0.25f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDMIX,0.3f},{PMASTER,0.72f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.72f} },
|
||||||
cCff);
|
cCff);
|
||||||
|
|
||||||
add("Supersaw Growl", "LEAD",
|
add("Supersaw Growl", "LEAD",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.45f},{PO2CT,0.55f},{PMIX,0.5f},{PCUTOFF,0.4f},{PRES,0.3f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.45f},{PO2CT,0.55f},{PMIX,0.5f},{PCUTOFF,0.4f},{PRES,0.3f},
|
||||||
{PFENV,0.45f},{PATK,0.02f},{PDEC,0.35f},{PSUS,0.7f},{PREL,0.15f},{PDRIVE,0.35f},
|
{PFENV,0.45f},{PATK,0.02f},{PDEC,0.35f},{PSUS,0.7f},{PREL,0.15f},{PDRIVE,0.35f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDMIX,0.25f},{PMASTER,0.75f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.25f},{PMASTER,0.75f} },
|
||||||
cDrift);
|
cDrift);
|
||||||
|
|
||||||
add("Night Rider", "LEAD",
|
add("Night Rider", "LEAD",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.0f},{PO1OCT,0.4f},{PO2OCT,0.5f},{PMIX,0.6f},{PCUTOFF,0.32f},{PRES,0.5f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.0f},{PO1OCT,0.4f},{PO2OCT,0.5f},{PMIX,0.6f},{PCUTOFF,0.32f},{PRES,0.5f},
|
||||||
{PFENV,0.6f},{PATK,0.015f},{PDEC,0.3f},{PSUS,0.7f},{PREL,0.2f},{PDRIVE,0.4f},
|
{PFENV,0.6f},{PATK,0.015f},{PDEC,0.3f},{PSUS,0.7f},{PREL,0.2f},{PDRIVE,0.4f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,6.0f},{PDMIX,0.4f},{PMASTER,0.78f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.4f},{PMASTER,0.78f} },
|
||||||
cShp);
|
cShp);
|
||||||
|
|
||||||
add("Sine FM Bell", "LEAD",
|
add("Sine FM Bell", "LEAD",
|
||||||
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO2OCT,0.83f},{PMIX,0.45f},{PCUTOFF,0.3f},{PRES,0.35f},{PFENV,0.7f},
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO2OCT,0.83f},{PMIX,0.45f},{PCUTOFF,0.3f},{PRES,0.35f},{PFENV,0.7f},
|
||||||
{PATK,0.002f},{PDEC,0.4f},{PSUS,0.1f},{PREL,0.4f},
|
{PATK,0.002f},{PDEC,0.4f},{PSUS,0.1f},{PREL,0.4f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDFB,0.6f},{PDMIX,0.5f},{PMASTER,0.75f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.6f},{PDMIX,0.5f},{PMASTER,0.75f} },
|
||||||
{ K("RATIO",PO2OCT,0.0f,1.0f),K("LEVEL",PMIX,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.95f),K("DELAY",PDMIX,0.0f,1.0f) });
|
{ K("RATIO",PO2OCT,0.0f,1.0f),K("LEVEL",PMIX,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.95f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
|
add("Screamy Lead", "LEAD",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.52f},{PO2CT,0.48f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.6f},{PRES,0.55f},{PFENV,0.55f},{PATK,0.008f},{PDEC,0.35f},{PSUS,0.6f},{PREL,0.15f},
|
||||||
|
{PDRIVE,0.5f},{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.35f},{PMASTER,0.78f} },
|
||||||
|
cStab);
|
||||||
|
|
||||||
|
add("Watery Lead", "LEAD",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.5f},{PO1OCT,0.5f},{PO2OCT,0.55f},{PO1CT,0.55f},{PO2CT,0.45f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.5f},{PRES,0.3f},{PFENV,0.4f},{PATK,0.01f},{PDEC,0.3f},{PSUS,0.6f},{PREL,0.2f},{PGLIDE,0.3f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.4f},{PMASTER,0.72f} },
|
||||||
|
cCff);
|
||||||
|
|
||||||
|
add("FM Sync Lead", "LEAD",
|
||||||
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO2OCT,0.83f},{PMIX,0.4f},{PCUTOFF,0.45f},{PRES,0.3f},{PFENV,0.5f},
|
||||||
|
{PATK,0.002f},{PDEC,0.4f},{PSUS,0.3f},{PREL,0.5f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.6f},{PDMIX,0.5f},{PMASTER,0.75f} },
|
||||||
|
cCff);
|
||||||
|
|
||||||
|
add("Calliope Lead", "LEAD",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.5f},{PO1OCT,0.62f},{PO2OCT,0.5f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.4f},{PRES,0.35f},{PFENV,0.4f},{PATK,0.004f},{PDEC,0.3f},{PSUS,0.5f},{PREL,0.12f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.72f} },
|
||||||
|
cCff);
|
||||||
|
|
||||||
|
add("Ethereal Lead", "LEAD",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.25f},{PO1OCT,0.55f},{PO2OCT,0.5f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.4f},{PRES,0.25f},{PFENV,0.5f},{PATK,0.01f},{PDEC,0.5f},{PSUS,0.6f},{PREL,0.7f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.65f},{PDMIX,0.65f},{PMASTER,0.72f} },
|
||||||
|
cCff);
|
||||||
|
|
||||||
|
add("Hard Lead", "LEAD",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1CT,0.48f},{PO2CT,0.52f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.5f},{PRES,0.5f},{PFENV,0.6f},{PATK,0.002f},{PDEC,0.3f},{PSUS,0.6f},{PREL,0.12f},
|
||||||
|
{PDRIVE,0.6f},{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.25f},{PMASTER,0.78f} },
|
||||||
|
cStab);
|
||||||
|
|
||||||
|
add("Anime Lead", "LEAD",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.5f},{PO2CT,0.53f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.45f},{PRES,0.35f},{PFENV,0.5f},{PATK,0.006f},{PDEC,0.45f},{PSUS,0.5f},{PREL,0.5f},{PGLIDE,0.2f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.55f},{PMASTER,0.75f} },
|
||||||
|
cCff);
|
||||||
|
|
||||||
|
add("Reso Lead", "LEAD",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.5f},{PO2CT,0.5f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.35f},{PRES,0.75f},{PFENV,0.65f},{PATK,0.004f},{PDEC,0.4f},{PSUS,0.4f},{PREL,0.3f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,4.0f/15.0f},{PDFB,0.4f},{PDMIX,0.3f},{PMASTER,0.78f} },
|
||||||
|
cShp);
|
||||||
|
|
||||||
// PAD -------------------------------------------------------------
|
// PAD -------------------------------------------------------------
|
||||||
add("Analog Pad", "PAD",
|
add("Analog Pad", "PAD",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.49f},{PO2CT,0.51f},{PMIX,0.45f},{PCUTOFF,0.35f},{PRES,0.3f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.49f},{PO2CT,0.51f},{PMIX,0.45f},{PCUTOFF,0.35f},{PRES,0.3f},
|
||||||
{PFENV,0.45f},{PATK,0.45f},{PDEC,0.5f},{PSUS,0.7f},{PREL,0.6f},
|
{PFENV,0.45f},{PATK,0.45f},{PDEC,0.5f},{PSUS,0.7f},{PREL,0.6f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,10.0f},{PDFB,0.45f},{PDMIX,0.4f},{PMASTER,0.7f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.45f},{PDMIX,0.4f},{PMASTER,0.7f} },
|
||||||
cPads);
|
cPads);
|
||||||
|
|
||||||
add("Dream Pad", "PAD",
|
add("Dream Pad", "PAD",
|
||||||
{ {PO1WAVE,0.25f},{PO2WAVE,0.25f},{PO1OCT,0.5f},{PO2OCT,0.5f},{PO1CT,0.52f},{PO2CT,0.48f},
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.25f},{PO1OCT,0.5f},{PO2OCT,0.5f},{PO1CT,0.52f},{PO2CT,0.48f},
|
||||||
{PMIX,0.5f},{PCUTOFF,0.38f},{PRES,0.42f},{PFENV,0.5f},{PATK,0.5f},{PDEC,0.45f},{PSUS,0.7f},{PREL,0.7f},
|
{PMIX,0.5f},{PCUTOFF,0.38f},{PRES,0.42f},{PFENV,0.5f},{PATK,0.5f},{PDEC,0.45f},{PSUS,0.7f},{PREL,0.7f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,12.0f},{PDFB,0.55f},{PDMIX,0.5f},{PMASTER,0.7f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.55f},{PDMIX,0.5f},{PMASTER,0.7f} },
|
||||||
cPads);
|
cPads);
|
||||||
|
|
||||||
add("Dark Pad", "PAD",
|
add("Dark Pad", "PAD",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.75f},{PO1OCT,0.28f},{PO2OCT,0.35f},{PMIX,0.5f},{PCUTOFF,0.22f},{PRES,0.5f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.75f},{PO1OCT,0.28f},{PO2OCT,0.35f},{PMIX,0.5f},{PCUTOFF,0.22f},{PRES,0.5f},
|
||||||
{PFENV,0.35f},{PATK,0.6f},{PDEC,0.45f},{PSUS,0.75f},{PREL,0.8f},
|
{PFENV,0.35f},{PATK,0.6f},{PDEC,0.45f},{PSUS,0.75f},{PREL,0.8f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,12.0f},{PDFB,0.5f},{PDMIX,0.45f},{PMASTER,0.72f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.5f},{PDMIX,0.45f},{PMASTER,0.72f} },
|
||||||
cPads);
|
cPads);
|
||||||
|
|
||||||
add("Brass Pad", "PAD",
|
add("Brass Pad", "PAD",
|
||||||
{ {PO1WAVE,0.75f},{PO2WAVE,0.5f},{PO1OCT,0.4f},{PO2OCT,0.5f},{PMIX,0.5f},{PCUTOFF,0.45f},{PRES,0.4f},
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.5f},{PO1OCT,0.4f},{PO2OCT,0.5f},{PMIX,0.5f},{PCUTOFF,0.45f},{PRES,0.4f},
|
||||||
{PFENV,0.6f},{PATK,0.15f},{PDEC,0.4f},{PSUS,0.7f},{PREL,0.5f},
|
{PFENV,0.6f},{PATK,0.15f},{PDEC,0.4f},{PSUS,0.7f},{PREL,0.5f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDMIX,0.2f},{PMASTER,0.75f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.2f},{PMASTER,0.75f} },
|
||||||
{ K("CUTOFF",PCUTOFF,0.05f,1.0f),K("F-ENV",PFENV,0.0f,1.0f),K("RES",PRES,0.0f,1.0f),K("D-MIX",PDMIX,0.0f,1.0f) });
|
{ K("CUTOFF",PCUTOFF,0.05f,1.0f),K("F-ENV",PFENV,0.0f,1.0f),K("RES",PRES,0.0f,1.0f),K("D-MIX",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
add("String Swell", "PAD",
|
add("String Swell", "PAD",
|
||||||
|
|
@ -179,26 +279,74 @@ Catalog& catalog()
|
||||||
add("Shimmer Pad", "PAD",
|
add("Shimmer Pad", "PAD",
|
||||||
{ {PO1WAVE,0.25f},{PO2WAVE,0.5f},{PO1OCT,0.62f},{PO2OCT,0.5f},{PO1CT,0.53f},{PO2CT,0.47f},
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.5f},{PO1OCT,0.62f},{PO2OCT,0.5f},{PO1CT,0.53f},{PO2CT,0.47f},
|
||||||
{PMIX,0.45f},{PCUTOFF,0.35f},{PRES,0.4f},{PFENV,0.5f},{PATK,0.4f},{PDEC,0.5f},{PSUS,0.6f},{PREL,0.8f},
|
{PMIX,0.45f},{PCUTOFF,0.35f},{PRES,0.4f},{PFENV,0.5f},{PATK,0.4f},{PDEC,0.5f},{PSUS,0.6f},{PREL,0.8f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,12.0f},{PDFB,0.65f},{PDMIX,0.6f},{PMASTER,0.7f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.65f},{PDMIX,0.6f},{PMASTER,0.7f} },
|
||||||
cPads);
|
cPads);
|
||||||
|
|
||||||
add("Airy Pad", "PAD",
|
add("Airy Pad", "PAD",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.47f},{PO2CT,0.52f},{PMIX,0.5f},{PNOISE,0.1f},{PCUTOFF,0.4f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.47f},{PO2CT,0.52f},{PMIX,0.5f},{PNOISE,0.1f},{PCUTOFF,0.4f},
|
||||||
{PRES,0.25f},{PFENV,0.4f},{PATK,0.35f},{PDEC,0.5f},{PSUS,0.6f},{PREL,0.6f},
|
{PRES,0.25f},{PFENV,0.4f},{PATK,0.35f},{PDEC,0.5f},{PSUS,0.6f},{PREL,0.6f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,10.0f},{PDMIX,0.4f},{PMASTER,0.68f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.4f},{PMASTER,0.68f} },
|
||||||
{ K("CUTOFF",PCUTOFF,0.05f,0.9f),K("NOISE",PNOISE,0.0f,1.0f),K("DECAY",PDEC,0.2f,0.95f),K("DELAY",PDMIX,0.0f,1.0f) });
|
{ K("CUTOFF",PCUTOFF,0.05f,0.9f),K("NOISE",PNOISE,0.0f,1.0f),K("DECAY",PDEC,0.2f,0.95f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
add("Vapor Pad", "PAD",
|
add("Vapor Pad", "PAD",
|
||||||
{ {PO1WAVE,0.75f},{PO2WAVE,0.25f},{PO1CT,0.55f},{PO2CT,0.48f},{PMIX,0.5f},{PCUTOFF,0.28f},{PRES,0.55f},
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.25f},{PO1CT,0.55f},{PO2CT,0.48f},{PMIX,0.5f},{PCUTOFF,0.28f},{PRES,0.55f},
|
||||||
{PFENV,0.6f},{PATK,0.5f},{PDEC,0.5f},{PSUS,0.55f},{PREL,0.85f},
|
{PFENV,0.6f},{PATK,0.5f},{PDEC,0.5f},{PSUS,0.55f},{PREL,0.85f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,12.0f},{PDFB,0.6f},{PDMIX,0.55f},{PMASTER,0.7f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.6f},{PDMIX,0.55f},{PMASTER,0.7f} },
|
||||||
|
cPads);
|
||||||
|
|
||||||
|
add("Glass Choir", "PAD",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.0f},{PO1OCT,0.62f},{PO2OCT,0.5f},{PMIX,0.6f},
|
||||||
|
{PCUTOFF,0.5f},{PRES,0.25f},{PFENV,0.6f},{PATK,0.4f},{PDEC,0.4f},{PSUS,0.7f},{PREL,0.6f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.4f},{PMASTER,0.7f} },
|
||||||
|
cPads);
|
||||||
|
|
||||||
|
add("Silky Pad", "PAD",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.25f},{PO1CT,0.48f},{PO2CT,0.52f},{PMIX,0.45f},
|
||||||
|
{PCUTOFF,0.3f},{PRES,0.35f},{PFENV,0.4f},{PATK,0.6f},{PDEC,0.4f},{PSUS,0.7f},{PREL,0.8f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.55f},{PDMIX,0.6f},{PMASTER,0.68f} },
|
||||||
|
cPads);
|
||||||
|
|
||||||
|
add("Warm Strings", "PAD",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.5f},{PO1CT,0.52f},{PO2CT,0.5f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.35f},{PRES,0.3f},{PFENV,0.5f},{PATK,0.5f},{PDEC,0.45f},{PSUS,0.7f},{PREL,0.7f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.45f},{PMASTER,0.7f} },
|
||||||
|
cPads);
|
||||||
|
|
||||||
|
add("Orbiter", "PAD",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.5f},{PO2CT,0.55f},{PMIX,0.5f},{PNOISE,0.1f},
|
||||||
|
{PCUTOFF,0.55f},{PRES,0.7f},{PFTYPE,0.5f},{PFENV,0.5f},{PATK,0.35f},{PDEC,0.5f},{PSUS,0.6f},{PREL,0.6f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.7f},{PDMIX,0.6f},{PMASTER,0.68f} },
|
||||||
|
{ K("CUTOFF",PCUTOFF,0.05f,0.9f),K("RES",PRES,0.0f,1.0f),K("F-ENV",PFENV,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
|
add("Midnight Pad", "PAD",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1OCT,0.28f},{PO2OCT,0.5f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.2f},{PRES,0.5f},{PFENV,0.4f},{PATK,0.7f},{PDEC,0.4f},{PSUS,0.8f},{PREL,0.8f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.6f},{PDMIX,0.55f},{PMASTER,0.72f} },
|
||||||
|
cPads);
|
||||||
|
|
||||||
|
add("Cinematic Pad", "PAD",
|
||||||
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.5f},{PO1OCT,0.25f},{PO2OCT,0.3f},{PO1CT,0.5f},{PO2CT,0.53f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.3f},{PRES,0.4f},{PFENV,0.5f},{PATK,0.8f},{PDEC,0.4f},{PSUS,0.8f},{PREL,0.9f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.7f} },
|
||||||
|
cPads);
|
||||||
|
|
||||||
|
add("Neon Pad", "PAD",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.4f},{PO2CT,0.6f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.4f},{PRES,0.4f},{PFENV,0.5f},{PATK,0.3f},{PDEC,0.5f},{PSUS,0.7f},{PREL,0.6f},
|
||||||
|
{PDRIVE,0.3f},{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.45f},{PMASTER,0.7f} },
|
||||||
|
{ K("CUTOFF",PCUTOFF,0.05f,0.9f),K("RES",PRES,0.0f,1.0f),K("DECAY",PDEC,0.2f,0.95f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
|
add("Pad Drift", "PAD",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.25f},{PO1CT,0.45f},{PO2CT,0.55f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.33f},{PRES,0.3f},{PFENV,0.35f},{PATK,0.9f},{PDEC,0.3f},{PSUS,0.8f},{PREL,0.7f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.5f},{PDMIX,0.5f},{PMASTER,0.7f} },
|
||||||
cPads);
|
cPads);
|
||||||
|
|
||||||
// KEYS ------------------------------------------------------------
|
// KEYS ------------------------------------------------------------
|
||||||
add("DX Bell", "KEYS",
|
add("DX Bell", "KEYS",
|
||||||
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO2OCT,0.83f},{PMIX,0.4f},{PCUTOFF,0.5f},{PRES,0.3f},{PFENV,0.3f},
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO2OCT,0.83f},{PMIX,0.4f},{PCUTOFF,0.5f},{PRES,0.3f},{PFENV,0.3f},
|
||||||
{PATK,0.002f},{PDEC,0.35f},{PSUS,0.1f},{PREL,0.5f},
|
{PATK,0.002f},{PDEC,0.35f},{PSUS,0.1f},{PREL,0.5f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDMIX,0.3f},{PMASTER,0.75f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.75f} },
|
||||||
cKeys);
|
cKeys);
|
||||||
|
|
||||||
add("Wurly", "KEYS",
|
add("Wurly", "KEYS",
|
||||||
|
|
@ -210,13 +358,13 @@ Catalog& catalog()
|
||||||
add("Rhodes EP", "KEYS",
|
add("Rhodes EP", "KEYS",
|
||||||
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO2OCT,0.5f},{PO1CT,0.51f},{PO2CT,0.49f},{PMIX,0.45f},
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO2OCT,0.5f},{PO1CT,0.51f},{PO2CT,0.49f},{PMIX,0.45f},
|
||||||
{PCUTOFF,0.42f},{PRES,0.35f},{PFENV,0.35f},{PATK,0.003f},{PDEC,0.45f},{PSUS,0.15f},{PREL,0.35f},
|
{PCUTOFF,0.42f},{PRES,0.35f},{PFENV,0.35f},{PATK,0.003f},{PDEC,0.45f},{PSUS,0.15f},{PREL,0.35f},
|
||||||
{PDRIVE,0.3f},{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDMIX,0.3f},{PMASTER,0.75f} },
|
{PDRIVE,0.3f},{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.75f} },
|
||||||
{ K("CUTOFF",PCUTOFF,0.05f,0.85f),K("DRIVE",PDRIVE,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.9f),K("D-MIX",PDMIX,0.0f,0.8f) });
|
{ K("CUTOFF",PCUTOFF,0.05f,0.85f),K("DRIVE",PDRIVE,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.9f),K("D-MIX",PDMIX,0.0f,0.8f) });
|
||||||
|
|
||||||
add("Clay EP", "KEYS",
|
add("Clay EP", "KEYS",
|
||||||
{ {PO1WAVE,0.25f},{PO2WAVE,0.0f},{PO1OCT,0.5f},{PO2OCT,0.62f},{PMIX,0.6f},{PCUTOFF,0.38f},{PRES,0.4f},
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.0f},{PO1OCT,0.5f},{PO2OCT,0.62f},{PMIX,0.6f},{PCUTOFF,0.38f},{PRES,0.4f},
|
||||||
{PFENV,0.45f},{PATK,0.006f},{PDEC,0.4f},{PSUS,0.15f},{PREL,0.3f},{PDRIVE,0.35f},
|
{PFENV,0.45f},{PATK,0.006f},{PDEC,0.4f},{PSUS,0.15f},{PREL,0.3f},{PDRIVE,0.35f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,6.0f},{PDMIX,0.25f},{PMASTER,0.72f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.25f},{PMASTER,0.72f} },
|
||||||
cKeys);
|
cKeys);
|
||||||
|
|
||||||
add("Harpsi", "KEYS",
|
add("Harpsi", "KEYS",
|
||||||
|
|
@ -228,26 +376,62 @@ Catalog& catalog()
|
||||||
add("Toy Piano", "KEYS",
|
add("Toy Piano", "KEYS",
|
||||||
{ {PO1WAVE,0.75f},{PO2WAVE,0.0f},{PO1OCT,0.5f},{PO2OCT,0.75f},{PMIX,0.5f},{PCUTOFF,0.3f},{PRES,0.5f},
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.0f},{PO1OCT,0.5f},{PO2OCT,0.75f},{PMIX,0.5f},{PCUTOFF,0.3f},{PRES,0.5f},
|
||||||
{PFENV,0.5f},{PATK,0.001f},{PDEC,0.4f},{PSUS,0.2f},{PREL,0.15f},
|
{PFENV,0.5f},{PATK,0.001f},{PDEC,0.4f},{PSUS,0.2f},{PREL,0.15f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,6.0f},{PDMIX,0.25f},{PMASTER,0.72f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.25f},{PMASTER,0.72f} },
|
||||||
cKeys);
|
cKeys);
|
||||||
|
|
||||||
add("Warm EP", "KEYS",
|
add("Warm EP", "KEYS",
|
||||||
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO1CT,0.52f},{PO2CT,0.48f},{PMIX,0.5f},{PCUTOFF,0.45f},{PRES,0.3f},
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO1CT,0.52f},{PO2CT,0.48f},{PMIX,0.5f},{PCUTOFF,0.45f},{PRES,0.3f},
|
||||||
{PFENV,0.4f},{PATK,0.004f},{PDEC,0.45f},{PSUS,0.3f},{PREL,0.3f},{PDRIVE,0.2f},
|
{PFENV,0.4f},{PATK,0.004f},{PDEC,0.45f},{PSUS,0.3f},{PREL,0.3f},{PDRIVE,0.2f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,10.0f},{PDMIX,0.35f},{PMASTER,0.75f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.35f},{PMASTER,0.75f} },
|
||||||
{ K("CUTOFF",PCUTOFF,0.05f,0.9f),K("DRIVE",PDRIVE,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.9f),K("DELAY",PDMIX,0.0f,1.0f) });
|
{ K("CUTOFF",PCUTOFF,0.05f,0.9f),K("DRIVE",PDRIVE,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.9f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
|
add("Sunset EP", "KEYS",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.0f},{PO1OCT,0.5f},{PO2OCT,0.5f},{PO1CT,0.5f},{PO2CT,0.52f},{PMIX,0.6f},
|
||||||
|
{PCUTOFF,0.36f},{PRES,0.4f},{PFENV,0.45f},{PATK,0.005f},{PDEC,0.5f},{PSUS,0.2f},{PREL,0.35f},{PDRIVE,0.3f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.35f},{PMASTER,0.75f} },
|
||||||
|
cKeys);
|
||||||
|
|
||||||
|
add("Tine Piano", "KEYS",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1OCT,0.5f},{PO2OCT,0.62f},{PO1CT,0.51f},{PO2CT,0.5f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.36f},{PRES,0.45f},{PFENV,0.6f},{PATK,0.002f},{PDEC,0.45f},{PSUS,0.1f},{PREL,0.3f},{PDRIVE,0.4f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.78f} },
|
||||||
|
cKeys);
|
||||||
|
|
||||||
|
add("E-Piano 2", "KEYS",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.0f},{PO1OCT,0.5f},{PO2OCT,0.75f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.4f},{PRES,0.4f},{PFENV,0.5f},{PATK,0.002f},{PDEC,0.5f},{PSUS,0.15f},{PREL,0.35f},{PDRIVE,0.35f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.25f},{PMASTER,0.75f} },
|
||||||
|
cKeys);
|
||||||
|
|
||||||
|
add("Mono Keys", "KEYS",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.25f},{PO1CT,0.51f},{PO2CT,0.49f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.42f},{PRES,0.35f},{PFENV,0.4f},{PATK,0.006f},{PDEC,0.45f},{PSUS,0.3f},{PREL,0.25f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.75f} },
|
||||||
|
{ K("CUTOFF",PCUTOFF,0.05f,0.85f),K("DRIVE",PDRIVE,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.9f),K("D-MIX",PDMIX,0.0f,0.8f) });
|
||||||
|
|
||||||
|
add("Tron Keys", "KEYS",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.25f},{PO1OCT,0.5f},{PO2OCT,0.62f},{PMIX,0.6f},
|
||||||
|
{PCUTOFF,0.35f},{PRES,0.4f},{PFENV,0.6f},{PATK,0.01f},{PDEC,0.4f},{PSUS,0.6f},{PREL,0.5f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.72f} },
|
||||||
|
cKeys);
|
||||||
|
|
||||||
|
add("Glassy Keys", "KEYS",
|
||||||
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO1OCT,0.62f},{PO2OCT,0.83f},{PMIX,0.4f},
|
||||||
|
{PCUTOFF,0.5f},{PRES,0.3f},{PFENV,0.4f},{PATK,0.002f},{PDEC,0.5f},{PSUS,0.15f},{PREL,0.5f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.35f},{PMASTER,0.72f} },
|
||||||
|
cKeys);
|
||||||
|
|
||||||
// PLUCK -----------------------------------------------------------
|
// PLUCK -----------------------------------------------------------
|
||||||
add("Wood Pluck", "PLUCK",
|
add("Wood Pluck", "PLUCK",
|
||||||
{ {PO1WAVE,0.25f},{PO2WAVE,0.0f},{PO1OCT,0.5f},{PO2OCT,0.8f},{PMIX,0.6f},{PCUTOFF,0.32f},{PRES,0.55f},
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.0f},{PO1OCT,0.5f},{PO2OCT,0.8f},{PMIX,0.6f},{PCUTOFF,0.32f},{PRES,0.55f},
|
||||||
{PFENV,0.7f},{PATK,0.001f},{PDEC,0.25f},{PSUS,0.0f},{PREL,0.2f},
|
{PFENV,0.7f},{PATK,0.001f},{PDEC,0.25f},{PSUS,0.0f},{PREL,0.2f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDMIX,0.25f},{PMASTER,0.75f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.25f},{PMASTER,0.75f} },
|
||||||
cPluck);
|
cPluck);
|
||||||
|
|
||||||
add("Perc Pluck", "PLUCK",
|
add("Perc Pluck", "PLUCK",
|
||||||
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1OCT,0.5f},{PO2OCT,0.5f},{PO1CT,0.5f},{PO2CT,0.58f},{PMIX,0.5f},
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1OCT,0.5f},{PO2OCT,0.5f},{PO1CT,0.5f},{PO2CT,0.58f},{PMIX,0.5f},
|
||||||
{PCUTOFF,0.25f},{PRES,0.6f},{PFENV,0.6f},{PATK,0.001f},{PDEC,0.2f},{PSUS,0.0f},{PREL,0.2f},
|
{PCUTOFF,0.25f},{PRES,0.6f},{PFENV,0.6f},{PATK,0.001f},{PDEC,0.2f},{PSUS,0.0f},{PREL,0.2f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDMIX,0.3f},{PMASTER,0.78f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.78f} },
|
||||||
cPluck);
|
cPluck);
|
||||||
|
|
||||||
add("Guitar Pluck", "PLUCK",
|
add("Guitar Pluck", "PLUCK",
|
||||||
|
|
@ -259,26 +443,62 @@ Catalog& catalog()
|
||||||
add("Bubble", "PLUCK",
|
add("Bubble", "PLUCK",
|
||||||
{ {PO1WAVE,0.0f},{PO2WAVE,0.25f},{PO2OCT,0.83f},{PMIX,0.4f},{PCUTOFF,0.3f},{PRES,0.6f},{PFENV,0.7f},
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.25f},{PO2OCT,0.83f},{PMIX,0.4f},{PCUTOFF,0.3f},{PRES,0.6f},{PFENV,0.7f},
|
||||||
{PATK,0.003f},{PDEC,0.45f},{PSUS,0.0f},{PREL,0.4f},
|
{PATK,0.003f},{PDEC,0.45f},{PSUS,0.0f},{PREL,0.4f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDFB,0.5f},{PDMIX,0.4f},{PMASTER,0.75f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.5f},{PDMIX,0.4f},{PMASTER,0.75f} },
|
||||||
{ K("CUTOFF",PCUTOFF,0.05f,0.9f),K("DECAY",PDEC,0.1f,0.95f),K("RES",PRES,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) });
|
{ K("CUTOFF",PCUTOFF,0.05f,0.9f),K("DECAY",PDEC,0.1f,0.95f),K("RES",PRES,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
add("Kalimba", "PLUCK",
|
add("Kalimba", "PLUCK",
|
||||||
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO2OCT,0.83f},{PMIX,0.35f},{PCUTOFF,0.5f},{PRES,0.35f},{PFENV,0.4f},
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO2OCT,0.83f},{PMIX,0.35f},{PCUTOFF,0.5f},{PRES,0.35f},{PFENV,0.4f},
|
||||||
{PATK,0.001f},{PDEC,0.4f},{PSUS,0.0f},{PREL,0.35f},
|
{PATK,0.001f},{PDEC,0.4f},{PSUS,0.0f},{PREL,0.35f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDMIX,0.3f},{PMASTER,0.75f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.75f} },
|
||||||
{ K("RATIO",PO2OCT,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.95f),K("RES",PRES,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) });
|
{ K("RATIO",PO2OCT,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.95f),K("RES",PRES,0.0f,1.0f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
add("Karpling", "PLUCK",
|
add("Karpling", "PLUCK",
|
||||||
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1OCT,0.5f},{PO2OCT,0.5f},{PO1CT,0.49f},{PO2CT,0.51f},{PMIX,0.5f},
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1OCT,0.5f},{PO2OCT,0.5f},{PO1CT,0.49f},{PO2CT,0.51f},{PMIX,0.5f},
|
||||||
{PCUTOFF,0.35f},{PRES,0.5f},{PFENV,0.5f},{PATK,0.001f},{PDEC,0.3f},{PSUS,0.0f},{PREL,0.2f},
|
{PCUTOFF,0.35f},{PRES,0.5f},{PFENV,0.5f},{PATK,0.001f},{PDEC,0.3f},{PSUS,0.0f},{PREL,0.2f},
|
||||||
{PDRIVE,0.2f},{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDMIX,0.25f},{PMASTER,0.75f} },
|
{PDRIVE,0.2f},{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.25f},{PMASTER,0.75f} },
|
||||||
|
cPluck);
|
||||||
|
|
||||||
|
add("Banjo Pluck", "PLUCK",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.5f},{PO1OCT,0.5f},{PO2OCT,0.62f},{PO1CT,0.49f},{PO2CT,0.51f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.4f},{PRES,0.4f},{PFENV,0.6f},{PATK,0.001f},{PDEC,0.35f},{PSUS,0.0f},{PREL,0.15f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.75f} },
|
||||||
|
cPluck);
|
||||||
|
|
||||||
|
add("Electric Pluck", "PLUCK",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.0f},{PO1OCT,0.5f},{PO2OCT,0.62f},{PMIX,0.6f},
|
||||||
|
{PCUTOFF,0.28f},{PRES,0.6f},{PFENV,0.7f},{PATK,0.001f},{PDEC,0.25f},{PSUS,0.0f},{PREL,0.2f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.5f},{PDMIX,0.35f},{PMASTER,0.78f} },
|
||||||
|
cPluck);
|
||||||
|
|
||||||
|
add("Zither", "PLUCK",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.0f},{PO1OCT,0.5f},{PO2OCT,0.5f},{PMIX,0.6f},
|
||||||
|
{PCUTOFF,0.45f},{PRES,0.35f},{PFENV,0.45f},{PATK,0.002f},{PDEC,0.4f},{PSUS,0.0f},{PREL,0.25f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.75f} },
|
||||||
|
cPluck);
|
||||||
|
|
||||||
|
add("Tweedy Pluck", "PLUCK",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.75f},{PO1OCT,0.5f},{PO2OCT,0.5f},{PO1CT,0.53f},{PO2CT,0.47f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.45f},{PRES,0.5f},{PFENV,0.55f},{PATK,0.003f},{PDEC,0.4f},{PSUS,0.05f},{PREL,0.2f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.75f} },
|
||||||
|
cPluck);
|
||||||
|
|
||||||
|
add("Mono Strum", "PLUCK",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.25f},{PO2OCT,0.83f},{PO1CT,0.5f},{PO2CT,0.54f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.3f},{PRES,0.55f},{PFENV,0.7f},{PATK,0.002f},{PDEC,0.55f},{PSUS,0.0f},{PREL,0.4f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,4.0f/15.0f},{PDFB,0.45f},{PDMIX,0.4f},{PMASTER,0.78f} },
|
||||||
|
cPluck);
|
||||||
|
|
||||||
|
add("Sitarish", "PLUCK",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.6f},{PO2CT,0.4f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.38f},{PRES,0.65f},{PFENV,0.6f},{PATK,0.002f},{PDEC,0.45f},{PSUS,0.0f},{PREL,0.35f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.75f} },
|
||||||
cPluck);
|
cPluck);
|
||||||
|
|
||||||
// FX --------------------------------------------------------------
|
// FX --------------------------------------------------------------
|
||||||
add("Wobble FX", "FX",
|
add("Wobble FX", "FX",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.0f},{PO1CT,0.58f},{PMIX,0.5f},{PCUTOFF,0.12f},{PRES,0.7f},{PFENV,0.9f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.0f},{PO1CT,0.58f},{PMIX,0.5f},{PCUTOFF,0.12f},{PRES,0.7f},{PFENV,0.9f},
|
||||||
{PATK,0.01f},{PDEC,0.5f},{PSUS,0.3f},{PREL,0.4f},
|
{PATK,0.01f},{PDEC,0.5f},{PSUS,0.3f},{PREL,0.4f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,6.0f},{PDFB,0.7f},{PDMIX,0.5f},{PMASTER,0.8f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.7f},{PDMIX,0.5f},{PMASTER,0.8f} },
|
||||||
cShp);
|
cShp);
|
||||||
|
|
||||||
add("Riser", "FX",
|
add("Riser", "FX",
|
||||||
|
|
@ -290,19 +510,19 @@ Catalog& catalog()
|
||||||
add("Laser", "FX",
|
add("Laser", "FX",
|
||||||
{ {PO1WAVE,0.75f},{PO2WAVE,0.0f},{PMIX,1.0f},{PCUTOFF,0.08f},{PRES,0.8f},{PFENV,0.8f},
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.0f},{PMIX,1.0f},{PCUTOFF,0.08f},{PRES,0.8f},{PFENV,0.8f},
|
||||||
{PATK,0.002f},{PDEC,0.4f},{PSUS,0.0f},{PREL,0.3f},
|
{PATK,0.002f},{PDEC,0.4f},{PSUS,0.0f},{PREL,0.3f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,4.0f},{PDFB,0.4f},{PDMIX,0.4f},{PMASTER,0.8f} },
|
{PDSYNC,1.0f},{PDSTEPS,4.0f/15.0f},{PDFB,0.4f},{PDMIX,0.4f},{PMASTER,0.8f} },
|
||||||
cShp);
|
cShp);
|
||||||
|
|
||||||
add("Sweep", "FX",
|
add("Sweep", "FX",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1OCT,0.5f},{PO2OCT,0.75f},{PMIX,0.5f},{PNOISE,0.2f},{PCUTOFF,0.35f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1OCT,0.5f},{PO2OCT,0.75f},{PMIX,0.5f},{PNOISE,0.2f},{PCUTOFF,0.35f},
|
||||||
{PRES,0.45f},{PFENV,0.6f},{PATK,0.2f},{PDEC,0.5f},{PSUS,0.5f},{PREL,0.6f},
|
{PRES,0.45f},{PFENV,0.6f},{PATK,0.2f},{PDEC,0.5f},{PSUS,0.5f},{PREL,0.6f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,12.0f},{PDFB,0.6f},{PDMIX,0.5f},{PMASTER,0.72f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.6f},{PDMIX,0.5f},{PMASTER,0.72f} },
|
||||||
{ K("CUTOFF",PCUTOFF,0.05f,1.0f),K("F-ENV",PFENV,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.95f),K("DELAY",PDMIX,0.0f,1.0f) });
|
{ K("CUTOFF",PCUTOFF,0.05f,1.0f),K("F-ENV",PFENV,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.95f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
add("Drone FX", "FX",
|
add("Drone FX", "FX",
|
||||||
{ {PO1WAVE,0.75f},{PO2WAVE,0.5f},{PO1OCT,0.25f},{PO2OCT,0.28f},{PO1CT,0.54f},{PO2CT,0.55f},{PMIX,0.5f},
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.5f},{PO1OCT,0.25f},{PO2OCT,0.28f},{PO1CT,0.54f},{PO2CT,0.55f},{PMIX,0.5f},
|
||||||
{PNOISE,0.12f},{PCUTOFF,0.25f},{PRES,0.6f},{PFENV,0.2f},{PATK,0.8f},{PDEC,0.3f},{PSUS,0.8f},{PREL,0.8f},
|
{PNOISE,0.12f},{PCUTOFF,0.25f},{PRES,0.6f},{PFENV,0.2f},{PATK,0.8f},{PDEC,0.3f},{PSUS,0.8f},{PREL,0.8f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,16.0f},{PDFB,0.7f},{PDMIX,0.6f},{PMASTER,0.72f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.7f},{PDMIX,0.6f},{PMASTER,0.72f} },
|
||||||
cNoise);
|
cNoise);
|
||||||
|
|
||||||
add("Tuned Noise", "FX",
|
add("Tuned Noise", "FX",
|
||||||
|
|
@ -311,6 +531,42 @@ Catalog& catalog()
|
||||||
{PDSYNC,0.0f},{PMASTER,0.68f} },
|
{PDSYNC,0.0f},{PMASTER,0.68f} },
|
||||||
cNoise);
|
cNoise);
|
||||||
|
|
||||||
|
add("Ping Sweep", "FX",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.0f},{PO1CT,0.45f},{PMIX,0.6f},{PCUTOFF,0.25f},{PRES,0.8f},{PFENV,0.9f},
|
||||||
|
{PATK,0.02f},{PDEC,0.5f},{PSUS,0.1f},{PREL,0.4f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.7f},{PDMIX,0.55f},{PMASTER,0.8f} },
|
||||||
|
cShp);
|
||||||
|
|
||||||
|
add("Alien Siren", "FX",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1CT,0.6f},{PO2CT,0.4f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.3f},{PRES,0.7f},{PFENV,0.8f},{PATK,0.5f},{PDEC,0.6f},{PSUS,0.6f},{PREL,0.7f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.8f},{PDMIX,0.6f},{PMASTER,0.72f} },
|
||||||
|
{ K("CUTOFF",PCUTOFF,0.05f,1.0f),K("RES",PRES,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.95f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
|
add("Riser Hiss", "FX",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1OCT,0.5f},{PO2OCT,0.75f},{PMIX,0.5f},{PNOISE,0.8f},{PCUTOFF,0.15f},
|
||||||
|
{PRES,0.4f},{PFENV,0.75f},{PATK,0.9f},{PDEC,0.1f},{PSUS,0.8f},{PREL,0.15f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.7f} },
|
||||||
|
{ K("RISE",PATK,0.2f,1.0f),K("CUTOFF",PCUTOFF,0.05f,1.0f),K("NOISE",PNOISE,0.0f,1.0f),K("D-MIX",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
|
add("Droplet", "FX",
|
||||||
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO2OCT,0.83f},{PMIX,0.4f},{PCUTOFF,0.3f},{PRES,0.55f},{PFENV,0.7f},
|
||||||
|
{PATK,0.001f},{PDEC,0.5f},{PSUS,0.0f},{PREL,0.45f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.6f},{PDMIX,0.5f},{PMASTER,0.75f} },
|
||||||
|
cBell);
|
||||||
|
|
||||||
|
add("Glitch Noise", "FX",
|
||||||
|
{ {PO1WAVE,0.8f},{PO2WAVE,0.8f},{PMIX,0.5f},{PNOISE,0.9f},{PCUTOFF,0.2f},{PRES,0.7f},{PFENV,0.6f},
|
||||||
|
{PATK,0.002f},{PDEC,0.4f},{PSUS,0.0f},{PREL,0.3f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,4.0f/15.0f},{PDFB,0.7f},{PDMIX,0.6f},{PMASTER,0.8f} },
|
||||||
|
cNoise);
|
||||||
|
|
||||||
|
add("Sub Drop", "FX",
|
||||||
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO1OCT,0.25f},{PO2OCT,0.28f},{PMIX,0.9f},{PNOISE,0.05f},
|
||||||
|
{PCUTOFF,0.2f},{PRES,0.4f},{PFENV,0.9f},{PATK,0.01f},{PDEC,0.6f},{PSUS,0.0f},{PREL,0.5f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.8f} },
|
||||||
|
cTone);
|
||||||
|
|
||||||
// STAB / ARP ------------------------------------------------------
|
// STAB / ARP ------------------------------------------------------
|
||||||
add("Detroit Stab", "STAB",
|
add("Detroit Stab", "STAB",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1OCT,0.5f},{PO2OCT,0.5f},{PO1CT,0.52f},{PO2CT,0.48f},{PMIX,0.5f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1OCT,0.5f},{PO2OCT,0.5f},{PO1CT,0.52f},{PO2CT,0.48f},{PMIX,0.5f},
|
||||||
|
|
@ -321,7 +577,7 @@ Catalog& catalog()
|
||||||
add("Juno Stab", "STAB",
|
add("Juno Stab", "STAB",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.5f},{PO2CT,0.5f},{PMIX,0.5f},{PCUTOFF,0.48f},{PRES,0.35f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.5f},{PO2CT,0.5f},{PMIX,0.5f},{PCUTOFF,0.48f},{PRES,0.35f},
|
||||||
{PFENV,0.5f},{PATK,0.003f},{PDEC,0.4f},{PSUS,0.2f},{PREL,0.2f},
|
{PFENV,0.5f},{PATK,0.003f},{PDEC,0.4f},{PSUS,0.2f},{PREL,0.2f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDMIX,0.3f},{PMASTER,0.78f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.78f} },
|
||||||
cStab);
|
cStab);
|
||||||
|
|
||||||
add("Chord Stab", "STAB",
|
add("Chord Stab", "STAB",
|
||||||
|
|
@ -333,38 +589,245 @@ Catalog& catalog()
|
||||||
add("House Stab", "STAB",
|
add("House Stab", "STAB",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.48f},{PO2CT,0.52f},{PMIX,0.5f},{PCUTOFF,0.45f},{PRES,0.3f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.48f},{PO2CT,0.52f},{PMIX,0.5f},{PCUTOFF,0.45f},{PRES,0.3f},
|
||||||
{PFENV,0.5f},{PATK,0.003f},{PDEC,0.3f},{PSUS,0.3f},{PREL,0.18f},
|
{PFENV,0.5f},{PATK,0.003f},{PDEC,0.3f},{PSUS,0.3f},{PREL,0.18f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,8.0f},{PDMIX,0.25f},{PMASTER,0.8f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.25f},{PMASTER,0.8f} },
|
||||||
|
cStab);
|
||||||
|
|
||||||
|
add("Gospel Stab", "STAB",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1OCT,0.5f},{PO2OCT,0.62f},{PO1CT,0.52f},{PO2CT,0.48f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.5f},{PRES,0.35f},{PFENV,0.6f},{PATK,0.003f},{PDEC,0.4f},{PSUS,0.2f},{PREL,0.2f},{PDRIVE,0.3f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.78f} },
|
||||||
|
cStab);
|
||||||
|
|
||||||
|
add("Disco Stab", "STAB",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1CT,0.5f},{PO2CT,0.5f},{PMIX,0.5f},{PCUTOFF,0.5f},{PRES,0.3f},
|
||||||
|
{PFENV,0.5f},{PATK,0.002f},{PDEC,0.3f},{PSUS,0.2f},{PREL,0.12f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.8f} },
|
||||||
|
cStab);
|
||||||
|
|
||||||
|
add("Orb Stab", "STAB",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.55f},{PO2CT,0.45f},{PMIX,0.5f},{PCUTOFF,0.3f},{PRES,0.6f},
|
||||||
|
{PFENV,0.7f},{PATK,0.02f},{PDEC,0.4f},{PSUS,0.4f},{PREL,0.4f},{PDRIVE,0.2f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.35f},{PMASTER,0.75f} },
|
||||||
|
cShp);
|
||||||
|
|
||||||
|
add("Offbeat Stab", "STAB",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.47f},{PO2CT,0.53f},{PMIX,0.5f},{PCUTOFF,0.42f},{PRES,0.4f},
|
||||||
|
{PFENV,0.55f},{PATK,0.005f},{PDEC,0.35f},{PSUS,0.2f},{PREL,0.15f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.8f} },
|
||||||
cStab);
|
cStab);
|
||||||
|
|
||||||
add("Arp Energy", "ARP",
|
add("Arp Energy", "ARP",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.52f},{PO2CT,0.5f},{PMIX,0.5f},{PCUTOFF,0.45f},{PRES,0.4f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.52f},{PO2CT,0.5f},{PMIX,0.5f},{PCUTOFF,0.45f},{PRES,0.4f},
|
||||||
{PFENV,0.5f},{PATK,0.008f},{PDEC,0.3f},{PSUS,0.5f},{PREL,0.15f},
|
{PFENV,0.5f},{PATK,0.008f},{PDEC,0.3f},{PSUS,0.5f},{PREL,0.15f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,4.0f},{PDFB,0.5f},{PDMIX,0.45f},{PMASTER,0.78f} },
|
{PDSYNC,1.0f},{PDSTEPS,4.0f/15.0f},{PDFB,0.5f},{PDMIX,0.45f},{PMASTER,0.78f} },
|
||||||
cCff);
|
cCff);
|
||||||
|
|
||||||
add("Trance Gate", "ARP",
|
add("Trance Gate", "ARP",
|
||||||
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1CT,0.51f},{PO2CT,0.49f},{PMIX,0.5f},{PCUTOFF,0.4f},{PRES,0.3f},
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1CT,0.51f},{PO2CT,0.49f},{PMIX,0.5f},{PCUTOFF,0.4f},{PRES,0.3f},
|
||||||
{PFENV,0.55f},{PATK,0.01f},{PDEC,0.5f},{PSUS,0.4f},{PREL,0.12f},{PDRIVE,0.25f},
|
{PFENV,0.55f},{PATK,0.01f},{PDEC,0.5f},{PSUS,0.4f},{PREL,0.12f},{PDRIVE,0.25f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,6.0f},{PDFB,0.6f},{PDMIX,0.5f},{PMASTER,0.78f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.6f},{PDMIX,0.5f},{PMASTER,0.78f} },
|
||||||
{ K("CUTOFF",PCUTOFF,0.05f,1.0f),K("RES",PRES,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.9f),K("DELAY",PDMIX,0.0f,1.0f) });
|
{ K("CUTOFF",PCUTOFF,0.05f,1.0f),K("RES",PRES,0.0f,1.0f),K("DECAY",PDEC,0.1f,0.9f),K("DELAY",PDMIX,0.0f,1.0f) });
|
||||||
|
|
||||||
add("Neon Arp", "ARP",
|
add("Neon Arp", "ARP",
|
||||||
{ {PO1WAVE,0.5f},{PO2WAVE,0.25f},{PO1OCT,0.62f},{PO2OCT,0.5f},{PO1CT,0.55f},{PO2CT,0.5f},{PMIX,0.5f},
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.25f},{PO1OCT,0.62f},{PO2OCT,0.5f},{PO1CT,0.55f},{PO2CT,0.5f},{PMIX,0.5f},
|
||||||
{PCUTOFF,0.35f},{PRES,0.55f},{PFENV,0.7f},{PATK,0.003f},{PDEC,0.4f},{PSUS,0.2f},{PREL,0.3f},
|
{PCUTOFF,0.35f},{PRES,0.55f},{PFENV,0.7f},{PATK,0.003f},{PDEC,0.4f},{PSUS,0.2f},{PREL,0.3f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,4.0f},{PDFB,0.6f},{PDMIX,0.55f},{PMASTER,0.78f} },
|
{PDSYNC,1.0f},{PDSTEPS,4.0f/15.0f},{PDFB,0.6f},{PDMIX,0.55f},{PMASTER,0.78f} },
|
||||||
cCff);
|
cCff);
|
||||||
|
|
||||||
add("Retro Arp", "ARP",
|
add("Retro Arp", "ARP",
|
||||||
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1CT,0.5f},{PO2CT,0.5f},{PMIX,0.5f},{PCUTOFF,0.42f},{PRES,0.35f},
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1CT,0.5f},{PO2CT,0.5f},{PMIX,0.5f},{PCUTOFF,0.42f},{PRES,0.35f},
|
||||||
{PFENV,0.5f},{PATK,0.004f},{PDEC,0.5f},{PSUS,0.5f},{PREL,0.1f},
|
{PFENV,0.5f},{PATK,0.004f},{PDEC,0.5f},{PSUS,0.5f},{PREL,0.1f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,4.0f},{PDFB,0.55f},{PDMIX,0.4f},{PMASTER,0.78f} },
|
{PDSYNC,1.0f},{PDSTEPS,4.0f/15.0f},{PDFB,0.55f},{PDMIX,0.4f},{PMASTER,0.78f} },
|
||||||
cCff);
|
cCff);
|
||||||
|
|
||||||
add("Dark Arp", "ARP",
|
add("Dark Arp", "ARP",
|
||||||
{ {PO1WAVE,0.25f},{PO2WAVE,0.25f},{PO1CT,0.5f},{PO2CT,0.53f},{PMIX,0.5f},{PCUTOFF,0.25f},{PRES,0.6f},
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.25f},{PO1CT,0.5f},{PO2CT,0.53f},{PMIX,0.5f},{PCUTOFF,0.25f},{PRES,0.6f},
|
||||||
{PFENV,0.8f},{PATK,0.002f},{PDEC,0.3f},{PSUS,0.1f},{PREL,0.3f},
|
{PFENV,0.8f},{PATK,0.002f},{PDEC,0.3f},{PSUS,0.1f},{PREL,0.3f},
|
||||||
{PDSYNC,1.0f},{PDSTEPS,6.0f},{PDFB,0.65f},{PDMIX,0.5f},{PMASTER,0.75f} },
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.65f},{PDMIX,0.5f},{PMASTER,0.75f} },
|
||||||
cShp);
|
cShp);
|
||||||
|
|
||||||
|
add("808 Arp", "ARP",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.5f},{PO1CT,0.5f},{PO2CT,0.53f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.35f},{PRES,0.45f},{PFENV,0.6f},{PATK,0.004f},{PDEC,0.4f},{PSUS,0.3f},{PREL,0.12f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,4.0f/15.0f},{PDFB,0.5f},{PDMIX,0.4f},{PMASTER,0.78f} },
|
||||||
|
cCff);
|
||||||
|
|
||||||
|
add("Squaregate", "ARP",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1CT,0.5f},{PO2CT,0.5f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.5f},{PRES,0.25f},{PFENV,0.4f},{PATK,0.002f},{PDEC,0.35f},{PSUS,0.0f},{PREL,0.1f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,4.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.8f} },
|
||||||
|
cStab);
|
||||||
|
|
||||||
|
add("Pluck Arp 16", "ARP",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.25f},{PO1CT,0.51f},{PO2CT,0.49f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.35f},{PRES,0.5f},{PFENV,0.6f},{PATK,0.002f},{PDEC,0.3f},{PSUS,0.0f},{PREL,0.15f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,4.0f/15.0f},{PDFB,0.5f},{PDMIX,0.45f},{PMASTER,0.78f} },
|
||||||
|
cPluck);
|
||||||
|
|
||||||
|
add("Dream Melody", "ARP",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.25f},{PO1CT,0.48f},{PO2CT,0.55f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.4f},{PRES,0.3f},{PFENV,0.5f},{PATK,0.004f},{PDEC,0.5f},{PSUS,0.3f},{PREL,0.5f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.6f},{PDMIX,0.6f},{PMASTER,0.75f} },
|
||||||
|
cCff);
|
||||||
|
|
||||||
|
add("Filter Sweep Arp", "ARP",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.5f},{PO2CT,0.5f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.18f},{PRES,0.7f},{PFENV,0.85f},{PATK,0.003f},{PDEC,0.4f},{PSUS,0.2f},{PREL,0.2f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,4.0f/15.0f},{PDFB,0.6f},{PDMIX,0.45f},{PMASTER,0.8f} },
|
||||||
|
cShp);
|
||||||
|
|
||||||
|
add("Mono Seq", "ARP",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.0f},{PO1CT,0.5f},{PMIX,0.9f},
|
||||||
|
{PCUTOFF,0.4f},{PRES,0.4f},{PFENV,0.5f},{PATK,0.001f},{PDEC,0.3f},{PSUS,0.2f},{PREL,0.1f},{PGLIDE,0.4f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,4.0f/15.0f},{PDFB,0.4f},{PDMIX,0.3f},{PMASTER,0.8f} },
|
||||||
|
cKeys);
|
||||||
|
|
||||||
|
add("Twilight Arp", "ARP",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.25f},{PO1OCT,0.55f},{PO2OCT,0.5f},{PO1CT,0.55f},{PO2CT,0.48f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.3f},{PRES,0.55f},{PFENV,0.7f},{PATK,0.003f},{PDEC,0.4f},{PSUS,0.15f},{PREL,0.3f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,4.0f/15.0f},{PDFB,0.6f},{PDMIX,0.55f},{PMASTER,0.78f} },
|
||||||
|
cCff);
|
||||||
|
|
||||||
|
add("Jungle Arp", "ARP",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.25f},{PO1CT,0.42f},{PO2CT,0.58f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.28f},{PRES,0.6f},{PFENV,0.8f},{PATK,0.002f},{PDEC,0.3f},{PSUS,0.1f},{PREL,0.25f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.6f},{PDMIX,0.5f},{PMASTER,0.75f} },
|
||||||
|
cShp);
|
||||||
|
|
||||||
|
// ORGAN ------------------------------------------------------------
|
||||||
|
add("Church Organ", "ORGAN",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.75f},{PO1OCT,0.5f},{PO2OCT,0.5f},{PO1CT,0.51f},{PO2CT,0.49f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.4f},{PRES,0.3f},{PFENV,0.2f},{PATK,0.02f},{PDEC,0.3f},{PSUS,0.8f},{PREL,0.15f},{PDRIVE,0.25f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.78f} },
|
||||||
|
cOrgan);
|
||||||
|
|
||||||
|
add("Farfisa", "ORGAN",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.5f},{PO2CT,0.48f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.5f},{PRES,0.25f},{PFENV,0.3f},{PATK,0.003f},{PDEC,0.25f},{PSUS,0.7f},{PREL,0.08f},{PDRIVE,0.5f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.8f} },
|
||||||
|
cOrgan);
|
||||||
|
|
||||||
|
add("Wheel Organ", "ORGAN",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.25f},{PO1CT,0.5f},{PO2CT,0.5f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.35f},{PRES,0.3f},{PFENV,0.25f},{PATK,0.005f},{PDEC,0.3f},{PSUS,0.8f},{PREL,0.1f},{PDRIVE,0.4f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.2f},{PMASTER,0.78f} },
|
||||||
|
cOrgan);
|
||||||
|
|
||||||
|
add("Rotary Organ", "ORGAN",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.51f},{PO2CT,0.49f},{PMIX,0.5f},{PNOISE,0.05f},
|
||||||
|
{PCUTOFF,0.45f},{PRES,0.3f},{PFENV,0.3f},{PATK,0.01f},{PDEC,0.3f},{PSUS,0.8f},{PREL,0.2f},{PDRIVE,0.2f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.4f},{PMASTER,0.78f} },
|
||||||
|
cOrgan);
|
||||||
|
|
||||||
|
add("Theater Organ", "ORGAN",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.5f},{PO1OCT,0.62f},{PO2OCT,0.5f},{PO1CT,0.5f},{PO2CT,0.53f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.4f},{PRES,0.35f},{PFENV,0.25f},{PATK,0.01f},{PDEC,0.35f},{PSUS,0.7f},{PREL,0.15f},{PDRIVE,0.35f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.35f},{PMASTER,0.75f} },
|
||||||
|
cOrgan);
|
||||||
|
|
||||||
|
add("Junk Organ", "ORGAN",
|
||||||
|
{ {PO1WAVE,0.75f},{PO2WAVE,0.5f},{PO1CT,0.47f},{PO2CT,0.55f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.35f},{PRES,0.5f},{PFENV,0.35f},{PATK,0.02f},{PDEC,0.4f},{PSUS,0.6f},{PREL,0.12f},{PDRIVE,0.7f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.8f} },
|
||||||
|
cOrgan);
|
||||||
|
|
||||||
|
add("Swell Organ", "ORGAN",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.25f},{PO1OCT,0.5f},{PO2OCT,0.5f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.3f},{PRES,0.4f},{PFENV,0.4f},{PATK,0.7f},{PDEC,0.35f},{PSUS,0.8f},{PREL,0.5f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.72f} },
|
||||||
|
cOrgan);
|
||||||
|
|
||||||
|
add("Reggae Cab", "ORGAN",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.5f},{PO2CT,0.5f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.5f},{PRES,0.2f},{PFENV,0.25f},{PATK,0.004f},{PDEC,0.3f},{PSUS,0.6f},{PREL,0.08f},{PDRIVE,0.45f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.8f} },
|
||||||
|
cOrgan);
|
||||||
|
|
||||||
|
// STRING ----------------------------------------------------------
|
||||||
|
add("Orchestra", "STRING",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.49f},{PO2CT,0.51f},{PMIX,0.4f},
|
||||||
|
{PCUTOFF,0.35f},{PRES,0.3f},{PFENV,0.5f},{PATK,0.6f},{PDEC,0.4f},{PSUS,0.8f},{PREL,0.7f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.4f},{PMASTER,0.72f} },
|
||||||
|
cStr);
|
||||||
|
|
||||||
|
add("Solo Violin", "STRING",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.25f},{PO1CT,0.5f},{PO2CT,0.52f},{PMIX,0.7f},
|
||||||
|
{PCUTOFF,0.4f},{PRES,0.35f},{PFENV,0.6f},{PATK,0.25f},{PDEC,0.4f},{PSUS,0.6f},{PREL,0.4f},{PGLIDE,0.2f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.75f} },
|
||||||
|
cStr);
|
||||||
|
|
||||||
|
add("Celloso", "STRING",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.25f},{PO1OCT,0.25f},{PO1CT,0.52f},{PO2CT,0.48f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.3f},{PRES,0.3f},{PFENV,0.6f},{PATK,0.2f},{PDEC,0.5f},{PSUS,0.7f},{PREL,0.5f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.7f} },
|
||||||
|
cStr);
|
||||||
|
|
||||||
|
add("Lead Strings", "STRING",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1OCT,0.5f},{PO2OCT,0.55f},{PO1CT,0.51f},{PO2CT,0.49f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.5f},{PRES,0.3f},{PFENV,0.5f},{PATK,0.03f},{PDEC,0.4f},{PSUS,0.7f},{PREL,0.3f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.35f},{PMASTER,0.75f} },
|
||||||
|
cStr);
|
||||||
|
|
||||||
|
add("Glass Strings", "STRING",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.0f},{PO1OCT,0.55f},{PO2OCT,0.62f},{PO1CT,0.53f},{PO2CT,0.5f},{PMIX,0.6f},
|
||||||
|
{PCUTOFF,0.5f},{PRES,0.25f},{PFENV,0.5f},{PATK,0.5f},{PDEC,0.4f},{PSUS,0.6f},{PREL,0.7f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.5f},{PMASTER,0.7f} },
|
||||||
|
cStr);
|
||||||
|
|
||||||
|
add("Pizz Strings", "STRING",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.25f},{PO1CT,0.5f},{PO2CT,0.53f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.3f},{PRES,0.5f},{PFENV,0.7f},{PATK,0.001f},{PDEC,0.3f},{PSUS,0.0f},{PREL,0.2f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.35f},{PMASTER,0.75f} },
|
||||||
|
cPluck);
|
||||||
|
|
||||||
|
add("Dark Strings", "STRING",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.75f},{PO1OCT,0.25f},{PO2OCT,0.5f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.24f},{PRES,0.5f},{PFENV,0.4f},{PATK,0.7f},{PDEC,0.4f},{PSUS,0.8f},{PREL,0.8f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.5f},{PDMIX,0.5f},{PMASTER,0.72f} },
|
||||||
|
cStr);
|
||||||
|
|
||||||
|
add("Ensemble 8", "STRING",
|
||||||
|
{ {PO1WAVE,0.5f},{PO2WAVE,0.5f},{PO1CT,0.45f},{PO2CT,0.55f},{PMIX,0.4f},
|
||||||
|
{PCUTOFF,0.32f},{PRES,0.4f},{PFENV,0.6f},{PATK,0.5f},{PDEC,0.4f},{PSUS,0.75f},{PREL,0.6f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.45f},{PMASTER,0.72f} },
|
||||||
|
cStr);
|
||||||
|
|
||||||
|
// BELL ------------------------------------------------------------
|
||||||
|
add("Temple Bell", "BELL",
|
||||||
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO2OCT,0.62f},{PMIX,0.5f},{PCUTOFF,0.35f},{PRES,0.3f},{PFENV,0.5f},
|
||||||
|
{PATK,0.001f},{PDEC,0.7f},{PSUS,0.0f},{PREL,0.6f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.6f},{PDMIX,0.5f},{PMASTER,0.75f} },
|
||||||
|
cBell);
|
||||||
|
|
||||||
|
add("Music Box", "BELL",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.0f},{PO2OCT,0.83f},{PMIX,0.5f},{PCUTOFF,0.5f},{PRES,0.25f},{PFENV,0.35f},
|
||||||
|
{PATK,0.002f},{PDEC,0.45f},{PSUS,0.0f},{PREL,0.4f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.35f},{PMASTER,0.72f} },
|
||||||
|
cBell);
|
||||||
|
|
||||||
|
add("Wind Chime", "BELL",
|
||||||
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO1OCT,0.62f},{PO2OCT,0.83f},{PO1CT,0.55f},{PO2CT,0.5f},{PMIX,0.45f},
|
||||||
|
{PCUTOFF,0.4f},{PRES,0.35f},{PFENV,0.5f},{PATK,0.004f},{PDEC,0.6f},{PSUS,0.0f},{PREL,0.7f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.7f},{PDMIX,0.6f},{PMASTER,0.7f} },
|
||||||
|
cBell);
|
||||||
|
|
||||||
|
add("Bronze Bell", "BELL",
|
||||||
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO1OCT,0.25f},{PO2OCT,0.5f},{PO1CT,0.5f},{PO2CT,0.53f},{PMIX,0.5f},
|
||||||
|
{PCUTOFF,0.3f},{PRES,0.35f},{PFENV,0.45f},{PATK,0.001f},{PDEC,0.7f},{PSUS,0.0f},{PREL,0.8f},
|
||||||
|
{PDSYNC,0.0f},{PMASTER,0.75f} },
|
||||||
|
cBell);
|
||||||
|
|
||||||
|
add("Glass Bell", "BELL",
|
||||||
|
{ {PO1WAVE,0.0f},{PO2WAVE,0.0f},{PO1OCT,0.62f},{PO2OCT,0.83f},{PO1CT,0.6f},{PO2CT,0.5f},{PMIX,0.4f},
|
||||||
|
{PCUTOFF,0.45f},{PRES,0.4f},{PFENV,0.55f},{PATK,0.001f},{PDEC,0.55f},{PSUS,0.0f},{PREL,0.5f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDFB,0.5f},{PDMIX,0.45f},{PMASTER,0.72f} },
|
||||||
|
cBell);
|
||||||
|
|
||||||
|
add("Marimba", "BELL",
|
||||||
|
{ {PO1WAVE,0.25f},{PO2WAVE,0.0f},{PO1OCT,0.62f},{PO2OCT,0.5f},{PMIX,0.7f},
|
||||||
|
{PCUTOFF,0.4f},{PRES,0.35f},{PFENV,0.5f},{PATK,0.001f},{PDEC,0.35f},{PSUS,0.0f},{PREL,0.3f},
|
||||||
|
{PDSYNC,1.0f},{PDSTEPS,6.0f/15.0f},{PDMIX,0.3f},{PMASTER,0.75f} },
|
||||||
|
cBell);
|
||||||
}
|
}
|
||||||
|
|
||||||
return cat;
|
return cat;
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,16 @@ void SynthEngine::setPresetIndex (int i)
|
||||||
loadPreset (*PresetStore::findByIndex (i));
|
loadPreset (*PresetStore::findByIndex (i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double SynthEngine::delayTimeMs() const
|
||||||
|
{
|
||||||
|
if (getParam (PDSYNC) > 0.5f)
|
||||||
|
{
|
||||||
|
const int stepIdx = juce::jlimit (0, 15, (int) juce::roundToInt (getParam (PDSTEPS) * 15.0f));
|
||||||
|
return stepsBeats()[stepIdx] * 60000.0 / lastBpmValue;
|
||||||
|
}
|
||||||
|
return paramReal (PDTIME, getParam (PDTIME));
|
||||||
|
}
|
||||||
|
|
||||||
void SynthEngine::setParam (int id, float n01)
|
void SynthEngine::setParam (int id, float n01)
|
||||||
{
|
{
|
||||||
if (id < 0 || id >= kNumParams) return;
|
if (id < 0 || id >= kNumParams) return;
|
||||||
|
|
@ -257,7 +267,7 @@ void SynthEngine::process (AudioBuffer<float>& buffer, MidiBuffer& midi,
|
||||||
const int wave2 = paramWaveIndex (snap[(size_t) PO2WAVE]);
|
const int wave2 = paramWaveIndex (snap[(size_t) PO2WAVE]);
|
||||||
|
|
||||||
bool delaySync = snap[(size_t) PDSYNC] > 0.5f;
|
bool delaySync = snap[(size_t) PDSYNC] > 0.5f;
|
||||||
int stepIdx = juce::jlimit (0, 15, (int) juce::roundToInt (snap[(size_t) PDSTEPS]));
|
int stepIdx = juce::jlimit (0, 15, (int) juce::roundToInt (snap[(size_t) PDSTEPS] * 15.0f));
|
||||||
float delayMsParam = paramReal (PDTIME, snap[(size_t) PDTIME]);
|
float delayMsParam = paramReal (PDTIME, snap[(size_t) PDTIME]);
|
||||||
float delaySec;
|
float delaySec;
|
||||||
if (delaySync)
|
if (delaySync)
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ public:
|
||||||
float lastBpm() const { return lastBpmValue; }
|
float lastBpm() const { return lastBpmValue; }
|
||||||
bool transport() const { return wasPlaying; }
|
bool transport() const { return wasPlaying; }
|
||||||
int delayTimeSamples() const { return lastDelaySamples; }
|
int delayTimeSamples() const { return lastDelaySamples; }
|
||||||
|
double delayTimeMs() const;
|
||||||
|
|
||||||
const char* waveNameFor (int index) const;
|
const char* waveNameFor (int index) const;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,7 @@ String formatParamReal(int id, float n01)
|
||||||
return formatTimeMs (paramReal (id, n01) * 1000.0f);
|
return formatTimeMs (paramReal (id, n01) * 1000.0f);
|
||||||
case PDTIME: return formatTimeMs (paramReal (id, n01));
|
case PDTIME: return formatTimeMs (paramReal (id, n01));
|
||||||
case PDSTEPS:
|
case PDSTEPS:
|
||||||
return stepsLabels() [juce::jlimit (0, 15, (int) juce::roundToInt (n01))];
|
return stepsLabels() [juce::jlimit (0, 15, (int) juce::roundToInt (n01 * 15.0f))];
|
||||||
case PDSYNC:
|
case PDSYNC:
|
||||||
return n01 > 0.5f ? "SYNC" : "MS";
|
return n01 > 0.5f ? "SYNC" : "MS";
|
||||||
case PGLIDE:
|
case PGLIDE:
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ inline std::array<float, kNumParams> defaultParams()
|
||||||
d[PFENV] = 0.38f; d[PFTYPE] = 0.0f;
|
d[PFENV] = 0.38f; d[PFTYPE] = 0.0f;
|
||||||
d[PATK] = 0.12f; d[PDEC] = 0.48f;
|
d[PATK] = 0.12f; d[PDEC] = 0.48f;
|
||||||
d[PSUS] = 0.50f; d[PREL] = 0.55f;
|
d[PSUS] = 0.50f; d[PREL] = 0.55f;
|
||||||
d[PDTIME] = 0.30f; d[PDSTEPS]= 6.0f;
|
d[PDTIME] = 0.30f; d[PDSTEPS]= 6.0f / 15.0f;
|
||||||
d[PDSYNC] = 1.0f; d[PDFB] = 0.42f;
|
d[PDSYNC] = 1.0f; d[PDFB] = 0.42f;
|
||||||
d[PDMIX] = 0.42f; d[PDRIVE] = 0.16f;
|
d[PDMIX] = 0.42f; d[PDRIVE] = 0.16f;
|
||||||
d[PGLIDE] = 0.0f; d[PMASTER]= 0.70f;
|
d[PGLIDE] = 0.0f; d[PMASTER]= 0.70f;
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ if command -v git >/dev/null 2>&1 && [ -d "$SRC_DIR/.git" ]; then
|
||||||
git_branch="$branch"
|
git_branch="$branch"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
build_time=$(date '+%Y-%m-%d %H:%M:%S %Z' 2>/dev/null || date '+%Y-%m-%d %H:%M:%S')
|
build_time=$(date '+%Y-%m-%d %H:%M:%S' 2>/dev/null)
|
||||||
|
|
||||||
mkdir -p "$(dirname "$OUT_FILE")"
|
mkdir -p "$(dirname "$OUT_FILE")"
|
||||||
TMP="$OUT_FILE.tmp.$$"
|
TMP="$OUT_FILE.tmp.$$"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue