mirror of
https://codeberg.org/armin/rmx-19.git
synced 2026-10-11 16:51:55 +02:00
fix chorus popSample read pointer drift; show welcome only on first open
This commit is contained in:
parent
bf70af0191
commit
d3bf0804e1
3 changed files with 36 additions and 5 deletions
|
|
@ -185,7 +185,14 @@ LcdPanel::LcdPanel (RMX19AudioProcessor& p)
|
|||
presentImage = juce::Image (juce::Image::ARGB, gridW * presentScale, gridH * presentScale, false);
|
||||
backdrop = juce::Image (juce::Image::ARGB, gridW * subsample, gridH * subsample, false);
|
||||
buildBackdrop();
|
||||
splashUntil = juce::Time::getMillisecondCounter() + 1500;
|
||||
if (firstRunEver())
|
||||
{
|
||||
splashUntil = juce::Time::getMillisecondCounter() + 1500;
|
||||
}
|
||||
else
|
||||
{
|
||||
screen = Screen::Home;
|
||||
}
|
||||
lastMidi = proc.getLastMidiTime();
|
||||
startTimerHz (22);
|
||||
}
|
||||
|
|
@ -195,6 +202,25 @@ LcdPanel::~LcdPanel()
|
|||
stopTimer();
|
||||
}
|
||||
|
||||
// The welcome splash plays only on the very first plugin open ever. A small
|
||||
// flag file under the user's Application Support dir records that it was shown,
|
||||
// so later instances start directly on the Home screen.
|
||||
static juce::File welcomeFlagFile()
|
||||
{
|
||||
return juce::File::getSpecialLocation (juce::File::userApplicationDataDirectory)
|
||||
.getChildFile ("RMX-19").getChildFile ("welcome.seen");
|
||||
}
|
||||
|
||||
bool LcdPanel::firstRunEver()
|
||||
{
|
||||
auto flag = welcomeFlagFile();
|
||||
if (flag.exists())
|
||||
return false;
|
||||
flag.getParentDirectory().createDirectory();
|
||||
flag.replaceWithText ("seen");
|
||||
return true;
|
||||
}
|
||||
|
||||
void LcdPanel::timerCallback()
|
||||
{
|
||||
bool needsRedraw = (screen == Screen::Splash);
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@ public:
|
|||
|
||||
void resetToHome();
|
||||
|
||||
static bool firstRunEver();
|
||||
|
||||
static constexpr int gridW = 160; // dot-matrix cell resolution
|
||||
static constexpr int gridH = 64;
|
||||
// internal supersampling: dots are rasterized as anti-aliased circles at 4x,
|
||||
|
|
|
|||
|
|
@ -81,10 +81,13 @@ public:
|
|||
|
||||
chorusL.pushSample (0, inL);
|
||||
chorusR.pushSample (0, inR);
|
||||
const float mL = 0.5f * (chorusL.popSample (0, chBase + chDepth * t1)
|
||||
+ chorusL.popSample (0, chBase + chDepth * t2));
|
||||
const float mR = 0.5f * (chorusR.popSample (0, chBase + chDepth * t2)
|
||||
+ chorusR.popSample (0, chBase + chDepth * t3));
|
||||
// multi-tap: only the first popSample advances the read pointer,
|
||||
// otherwise one push + two pops drifts the taps through the whole
|
||||
// buffer and late-stale echoes of old notes come back (octave up).
|
||||
const float mL = 0.5f * (chorusL.popSample (0, chBase + chDepth * t1, true)
|
||||
+ chorusL.popSample (0, chBase + chDepth * t2, false));
|
||||
const float mR = 0.5f * (chorusR.popSample (0, chBase + chDepth * t2, true)
|
||||
+ chorusR.popSample (0, chBase + chDepth * t3, false));
|
||||
outL += mL * wet * 0.8f;
|
||||
outR += mR * wet * 0.8f;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue