Fetch JUCE into build/, tidy gitignore, expand README

This commit is contained in:
Armin 2026-09-12 21:53:16 +02:00
commit ab9ea542a7
12 changed files with 350 additions and 149 deletions

View file

@ -53,6 +53,7 @@ void SynthEngine::loadPreset (const Preset& p)
knobHighs[i] = p.ctl[i].hi;
}
allNotesOff();
delay.clear();
}
void SynthEngine::setPresetIndex (int i)
@ -243,14 +244,14 @@ void SynthEngine::process (AudioBuffer<float>& buffer, MidiBuffer& midi,
const int filterType = paramFilterType (ftypeN01);
bool delaySync = params[PDSYNC] > 0.5f;
int stepIdx = juce::jlimit (0, 15, (int) juce::roundToInt (params[PDSTEPS] * 15.0f));
int stepIdx = juce::jlimit (0, 15, (int) juce::roundToInt (params[PDSTEPS]));
float delayMsParam = paramReal (PDTIME, params[PDTIME]);
float delaySec;
if (delaySync)
delaySec = (float) (stepsBeats()[stepIdx] * 60.0 / lastBpmValue);
else
delaySec = delayMsParam * 0.001f;
delaySec = std::clamp (delaySec, 0.001f, 17.0f);
delaySec = std::clamp (delaySec, 0.001f, 4.0f);
lastDelaySamples = delaySec * sampleRate;
const float delayFB = params[PDFB];
@ -258,18 +259,16 @@ void SynthEngine::process (AudioBuffer<float>& buffer, MidiBuffer& midi,
const float dryMix = 1.0f - delayMix;
const float wetMix = delayMix;
int delayWrite = (int) delay.writePos[0];
int delayRead = (delayWrite - (int) lastDelaySamples + delay.maxLen * 2) % delay.maxLen;
(void) delayRead;
for (const auto& metadata : midi)
{
MidiMessage msg = metadata.getMessage();
int sm = metadata.samplePosition;
if (sm < n && msg.isNoteOn())
int sm = juce::jlimit (0, n - 1, metadata.samplePosition);
if (msg.isNoteOn())
noteOn (msg.getNoteNumber(), msg.getFloatVelocity());
else if (sm < n && msg.isNoteOff())
else if (msg.isNoteOff())
noteOff (msg.getNoteNumber());
else if (msg.isAllNotesOff() || msg.isAllSoundOff())
allNotesOff();
}
float* outL = buffer.getWritePointer (0);
@ -339,7 +338,8 @@ void SynthEngine::process (AudioBuffer<float>& buffer, MidiBuffer& midi,
float dry = sumL;
int w = delay.writePos[0];
float delayed = delay.buf[0][w];
int r = (w - (int) lastDelaySamples + delay.maxLen * 2) % delay.maxLen;
float delayed = delay.buf[0][r];
float fb = dry + delayed * (float) delayFB;
fb = softClip (fb * 0.7f);
delay.buf[0][w] = fb;