From 75f3211629ec54526b2ddbb634a023d97a3ebd88 Mon Sep 17 00:00:00 2001 From: Oleksiy Date: Sun, 20 Sep 2026 01:13:50 +0300 Subject: [PATCH] Switched back to SVF bacause of the instability of Resonant Filter --- Acid/Acid.ino | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/Acid/Acid.ino b/Acid/Acid.ino index 78ed33b..58728a6 100644 --- a/Acid/Acid.ino +++ b/Acid/Acid.ino @@ -7,7 +7,6 @@ // This code is licenced under GPL v3 or later // todo: -// debug accent handling that overloads the filter, also accent can be too short or too long if it's relying on midi note // add overdrive // frequency from CV (noteFreq) could be Q16n16 for consistency @@ -15,7 +14,8 @@ #include #include #include -#include +//#include +#include #include #include #include @@ -99,16 +99,20 @@ Oscil aSaw8192(SAW_MAX_8 MetaOscil aSaw {&aSaw138, &aSaw154, &aSaw182, &aSaw240, &aSaw292, &aSaw341, &aSaw390, &aSaw431, &aSaw512, &aSaw630, &aSaw744, &aSaw1170, &aSaw1638, &aSaw2730, &aSaw4096, &aSaw8192}; IntMap kMapNote( 0, 4095, 24 * pitchSubSteps, 84 * pitchSubSteps ); -IntMap kMapCutoff( 0, 1023, 26, 100 ); +//IntMap kMapCutoff( 0, 1023, 26, 100 ); //for lpf +//IntMap kMapResonance( 0, 1023, 0, 255 ); +IntMap kMapCutoff( 0, 1023, 400, 3600 ); +IntMap kMapResonance( 0, 1023, 200, 64 ); IntMap kMapEnvMod( 0, 1023, 0, 140 ); -IntMap kMapResonance( 0, 1023, 0, 255 ); IntMap kMapDrive( 0, 1023, 0, 400 ); IntMap kMapAttack( 0, 1023, 1, 100 ); IntMap kMapDecay( 0, 1023, 100, 1500 ); IntMap kMapAccentLevel( 0, 1023, 0, 128 ); Ead kEnvelope(MOZZI_CONTROL_RATE); -LowPassFilter lpfr; +//LowPassFilter lpf; +StateVariable svf; + Portamento kGlide; //Global variables @@ -271,8 +275,11 @@ void updateControl(){ //Remap the values and assign to parameters int accentLevel = kMapAccentLevel(knobSVal); int baseCutoff = kMapCutoff(knob1Val); - int cutoff = accent? (baseCutoff + (((long)accentLevel * (100 - baseCutoff)) >> 7)) : baseCutoff; - int resonance = accent? (255 - (((long)(128 - accentLevel) * (255 - kMapResonance(knob2Val))) >> 7)) : kMapResonance(knob2Val); + //int cutoff = accent? (baseCutoff + (((long)accentLevel * (100 - baseCutoff)) >> 7)) : baseCutoff; //lpf version + int cutoff = accent? (baseCutoff + (((long)accentLevel * (3600 - baseCutoff)) >> 7)) : baseCutoff; //svf version + //int resonance = accent? (255 - (((long)(128 - accentLevel) * (255 - kMapResonance(knob2Val))) >> 7)) : kMapResonance(knob2Val); //lpf version + int baseResonance = kMapResonance(knob2Val); + int resonance = accent? (baseResonance - (((long)accentLevel * (baseResonance - 64)) >> 7)) : baseResonance; int envMod = kMapEnvMod(knob3Val); driveAmount = kMapDrive(knob4Val); @@ -319,7 +326,9 @@ void updateControl(){ gain = accent? constrain(env + (((long)env * accentLevel) >> 7), 0, 255) : env; //needs finetuning - lpfr.setCutoffFreqAndResonance(constrain(cutoff + (((long)env * envMod * cutoff)>>16), 0, 255), resonance); + //lpf.setCutoffFreqAndResonance(constrain(cutoff + (((long)env * envMod * cutoff)>>16), 0, 255), resonance); + svf.setCentreFreq(cutoff + (((long)env * envMod * cutoff)>>16)); + svf.setResonance(resonance); } AudioOutput updateAudio(){ @@ -329,7 +338,8 @@ AudioOutput updateAudio(){ } else { signal = aSaw.next(); } - signal = lpfr.next(signal); //filter + //signal = lpf.next(signal); //filter + signal = svf.next(signal); signal = (signal * gain); //envelope //signal = softClip((signal * (127 + driveAmount)) >> 9); //overdrive //signal = (signal * makeupGain) >> 7; //makeup gain compensation