mirror of
https://codeberg.org/armin/sm-26.git
synced 2026-10-11 17:01:53 +02:00
Fetch JUCE into build/, tidy gitignore, expand README
This commit is contained in:
parent
4a761729f8
commit
ab9ea542a7
12 changed files with 350 additions and 149 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue