From 907f7110e88406b603bb4efa3377283ffd68848f Mon Sep 17 00:00:00 2001 From: Damien Zammit Date: Sat, 29 Dec 2018 14:02:50 +1100 Subject: ZamTube enhancement: Balls of steel --- plugins/ZamTube/ZamTubePlugin.cpp | 18 ++++++------- plugins/ZamTube/ZamTubeUI.cpp | 12 ++++----- plugins/ZamTube/wdfcircuits.h | 54 +++++++++++++++------------------------ 3 files changed, 34 insertions(+), 50 deletions(-) diff --git a/plugins/ZamTube/ZamTubePlugin.cpp b/plugins/ZamTube/ZamTubePlugin.cpp index 74c35b6..2569638 100644 --- a/plugins/ZamTube/ZamTubePlugin.cpp +++ b/plugins/ZamTube/ZamTubePlugin.cpp @@ -53,7 +53,7 @@ void ZamTubePlugin::initParameter(uint32_t index, Parameter& parameter) parameter.name = "Bass"; parameter.symbol = "bass"; parameter.unit = " "; - parameter.ranges.def = 5.0f; + parameter.ranges.def = 1.0f; parameter.ranges.min = 0.0f; parameter.ranges.max = 10.0f; break; @@ -62,7 +62,7 @@ void ZamTubePlugin::initParameter(uint32_t index, Parameter& parameter) parameter.name = "Mids"; parameter.symbol = "mids"; parameter.unit = " "; - parameter.ranges.def = 5.0f; + parameter.ranges.def = 1.0f; parameter.ranges.min = 0.0f; parameter.ranges.max = 10.0f; break; @@ -71,7 +71,7 @@ void ZamTubePlugin::initParameter(uint32_t index, Parameter& parameter) parameter.name = "Treble"; parameter.symbol = "treb"; parameter.unit = " "; - parameter.ranges.def = 5.0f; + parameter.ranges.def = 1.0f; parameter.ranges.min = 0.0f; parameter.ranges.max = 10.0f; break; @@ -181,9 +181,9 @@ void ZamTubePlugin::loadProgram(uint32_t index) /* Default parameter values */ tubedrive = 0.0f; - bass = 5.f; - middle = 5.f; - treble = 5.f; + bass = 1.f; + middle = 1.f; + treble = 1.f; tonestack = 0.0f; mastergain = 0.0f; insane = 0.0f; @@ -233,7 +233,7 @@ void ZamTubePlugin::activate() v.cg2 = 11.99; v.ig02 = 3.917e-8; - ckt.updateRValues(ci, ck, co, e, 0.0, rp, rg, ri, rk, ro, 10000.0, Fs, v); + ckt.updateRValues(ci, ck, co, e, rp, rg, ri, rk, ro, 10000.0, Fs, v); ckt.warmup_tubes(); fSamplingFreq = Fs; @@ -951,14 +951,12 @@ void ZamTubePlugin::run(const float** inputs, float** outputs, uint32_t frames) in = fabs(in) < DANGER ? in : 0.f; double ViE = in*from_dB(tubedrive); - tubeout = 10. * ckt.advanc(ViE) * from_dB(30. - tubedrive) - * from_dB(12.); + tubeout = 10. * ckt.advanc(ViE) * from_dB(30. - tubedrive) * from_dB(12.); if (!ckt.on) { tubeout = 0.0; } else { tubeout = sanitize_denormal(tubeout); } - outputs[0][i] = in; //Tone Stack sim fRec0[0] = sanitize_denormal((float)tubeout - (fSlow16 * (((fSlow14 * fRec0[2]) + (fSlow13 * fRec0[1])) + (fSlow11 * fRec0[3])))); diff --git a/plugins/ZamTube/ZamTubeUI.cpp b/plugins/ZamTube/ZamTubeUI.cpp index ad570d5..d5e9697 100644 --- a/plugins/ZamTube/ZamTubeUI.cpp +++ b/plugins/ZamTube/ZamTubeUI.cpp @@ -61,7 +61,7 @@ ZamTubeUI::ZamTubeUI() fKnobBass->setRange(0.f, 10.f); fKnobBass->setLabel(true); fKnobBass->setScrollStep(1.0f); - fKnobBass->setDefault(5.0f); + fKnobBass->setDefault(1.0f); fKnobBass->setRotationAngle(240); fKnobBass->setCallback(this); @@ -70,7 +70,7 @@ ZamTubeUI::ZamTubeUI() fKnobMids->setRange(0.f, 10.f); fKnobMids->setLabel(true); fKnobMids->setScrollStep(1.f); - fKnobMids->setDefault(5.f); + fKnobMids->setDefault(1.f); fKnobMids->setRotationAngle(240); fKnobMids->setCallback(this); @@ -79,7 +79,7 @@ ZamTubeUI::ZamTubeUI() fKnobTreb->setRange(0.f, 10.f); fKnobTreb->setLabel(true); fKnobTreb->setScrollStep(1.f); - fKnobTreb->setDefault(5.f); + fKnobTreb->setDefault(1.f); fKnobTreb->setRotationAngle(240); fKnobTreb->setCallback(this); @@ -151,9 +151,9 @@ void ZamTubeUI::programLoaded(uint32_t index) // Default values fKnobTube->setValue(0.0f); - fKnobBass->setValue(5.f); - fKnobMids->setValue(5.f); - fKnobTreb->setValue(5.f); + fKnobBass->setValue(1.f); + fKnobMids->setValue(1.f); + fKnobTreb->setValue(1.f); fKnobGain->setValue(0.0f); fToggleInsane->setDown(false); fSliderNotch->setValue(0.0f); diff --git a/plugins/ZamTube/wdfcircuits.h b/plugins/ZamTube/wdfcircuits.h index 6be9f2a..2288d6c 100644 --- a/plugins/ZamTube/wdfcircuits.h +++ b/plugins/ZamTube/wdfcircuits.h @@ -15,18 +15,17 @@ public: Coa = 0.0; on = false; } - TubeStageCircuit(Real C_Ci, Real C_Ck, Real C_Co, Real E_E250, Real E_Vi, Real R_E250, Real R_Rg, Real R_Ri, Real R_Rk, Real R_Ro, Real R_Vi, Real sampleRate, Triode& tube) { + TubeStageCircuit(Real C_Ci, Real C_Ck, Real C_Co, Real E_E250, Real R_E250, Real R_Rg, Real R_Ri, Real R_Rk, Real R_Ro, Real R_Vi, Real sampleRate, Triode& tube) { Cia = 0.0; Cka = 0.0; Coa = 0.0; on = false; - updateRValues(C_Ci, C_Ck, C_Co, E_E250, E_Vi, R_E250, R_Rg, R_Ri, R_Rk, R_Ro, R_Vi, sampleRate, tube); + updateRValues(C_Ci, C_Ck, C_Co, E_E250, R_E250, R_Rg, R_Ri, R_Rk, R_Ro, R_Vi, sampleRate, tube); } - void updateRValues(Real C_Ci, Real C_Ck, Real C_Co, Real E_E250, Real E_Vi, Real R_E250, Real R_Rg, Real R_Ri, Real R_Rk, Real R_Ro, Real R_Vi, Real sampleRate, Triode& tube) { + void updateRValues(Real C_Ci, Real C_Ck, Real C_Co, Real E_E250, Real R_E250, Real R_Rg, Real R_Ri, Real R_Rk, Real R_Ro, Real R_Vi, Real sampleRate, Triode& tube) { t = tube; Real ViR = R_Vi; - ViE = E_Vi; Real CiR = 1.0 / (2.0*C_Ci*sampleRate); Real CkR = 1.0 / (2.0*C_Ck*sampleRate); Real CoR = 1.0 / (2.0*C_Co*sampleRate); @@ -66,7 +65,7 @@ public: void warmup_tubes(void) { int i; on = false; - for (i = 0; i < 8000; i++) { + for (i = 0; i < 1000; i++) { advanc(0.0); } on = true; @@ -75,46 +74,33 @@ public: Real advanc(Real VE){ ViE = VE; Real Ckb = Cka; - Real I3_3b3 = -I3_3Gamma1*(-Ckb); + Real I3_3b3 = I3_3Gamma1 * Ckb; Real Cib = Cia; - Real S0_3b3 = -( Cib) + -( ViE); - Real P0_3b3 = -P0_3Gamma1*(-S0_3b3); - Real S1_3b3 = -( 0.0) + -( P0_3b3); + Real S0_3b3 = Cib + ViE; + Real P0_3b3 = P0_3Gamma1*(S0_3b3); + Real S1_3b3 = P0_3b3; Real Cob = Coa; - Real S2_3b3 = -( Cob) + -( 0.0); - Real P2_3b3 = E250E - P2_3Gamma1*(E250E - S2_3b3); + Real S2_3b3 = Cob; + Real P2_3b3 = E250E - P2_3Gamma1*(E250E + S2_3b3); //Tube: K G P - t.compute(I3_3b3,S1_3b3,P2_3b3); + //printf("K=%f G=%f P=%f\n", I3_3b3,-S1_3b3,P2_3b3); + t.compute(I3_3b3,-S1_3b3,P2_3b3); Real b1 = t.getC(); Real b2 = t.getG(); Real b3 = t.getP(); //Set As - Real I3_3b1 = b1 - Ckb - I3_3Gamma1*(-Ckb); + Real I3_3b1 = (b1 + Ckb - I3_3Gamma1*(Ckb)); Cka = I3_3b1; - Real S1_3b2 = -( -( 0.0) + -( b2) - S1_3Gamma1*(-( 0.0) + -( P0_3b3) + -( b2))); - Real P0_3b1 = S1_3b2 - S0_3b3 - P0_3Gamma1*(-S0_3b3); - Real S0_3b1 = -( -( Cib) - S0_3Gamma1*(-( Cib) + -( ViE) + -( P0_3b1))); + Real S1_3b2 = ((-b2) - S1_3Gamma1*(P0_3b3 + (-b2))); + Real P0_3b1 = (S1_3b2 + (S0_3b3) - P0_3Gamma1*(S0_3b3)); + Real S0_3b1 = (Cib - S0_3Gamma1*(Cib + ViE + P0_3b1)); Cia = S0_3b1; - Real P2_3b1 = b3 + E250E - S2_3b3 - P2_3Gamma1*(E250E - S2_3b3); - Real S2_3b1 = -( -( Cob) - S2_3Gamma1*(-( Cob) + -( 0.0) + -( P2_3b1))); + Real P2_3b1 = (b3 + E250E + (S2_3b3) - P2_3Gamma1*(E250E + S2_3b3)); + Real S2_3b1 = (Cob - S2_3Gamma1*(Cob + P2_3b1)); Coa = S2_3b1; - Real S2_3b2 = -( -( Cob) + -( P2_3b1) - S2_3Gamma1*(-( Cob) + -( 0.0) + -( P2_3b1))); + Real S2_3b2 = (Cob + P2_3b1 - S2_3Gamma1*(Cob + P2_3b1)); Real Roa = S2_3b2; - return -(Roa); - } - - std::vector getState(){ - std::vector state(3, 0.0); - state[0] = Cia; - state[1] = Cka; - state[2] = Coa; - return state; - } - void setState(std::vector state) { - Assert(state.size() == 3); - Cia = state[0]; - Cka = state[1]; - Coa = state[2]; + return -Roa; } private: -- cgit v1.2.3