summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2018-12-29 14:02:50 +1100
committerDamien Zammit <damien@zamaudio.com>2018-12-29 14:49:48 +1100
commit907f7110e88406b603bb4efa3377283ffd68848f (patch)
treea73e0702a415242870e2b0918194378f156c889c
parent191d630483f2cd3161a49f889e69af4f94d474d4 (diff)
ZamTube enhancement: Balls of steel
-rw-r--r--plugins/ZamTube/ZamTubePlugin.cpp18
-rw-r--r--plugins/ZamTube/ZamTubeUI.cpp12
-rw-r--r--plugins/ZamTube/wdfcircuits.h54
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<Real> getState(){
- std::vector<Real> state(3, 0.0);
- state[0] = Cia;
- state[1] = Cka;
- state[2] = Coa;
- return state;
- }
- void setState(std::vector<Real> state) {
- Assert(state.size() == 3);
- Cia = state[0];
- Cka = state[1];
- Coa = state[2];
+ return -Roa;
}
private: