Hello Jean,
[Jean Beauve]
>I have done a third test on the 2" speaker, with a around 0.4L box and the
>results are very good, indeed.
>
>I have changed a little bit the settings
> lo.f=280
> lo.compress=1.0
> lo.gain=0.6
> hi.gain=0
I just realised the plugin is a lot more effective with an effect
strength control. A patch against the current caps sources is
attached to this mail (feel free to contact me for help if you don't
know what to do with it).
With the patch applied, you can dial down compression and gain but
still get more bass boost:
lo.f = 240
lo.compress = .3
lo.gain = .2
lo.vol = 20
hi.gain = 0
Cheers, Tim
--- releases/caps-0.9.24/Saturate.h 2014-11-10 08:56:20.000000000 +0100
+++ Saturate.h 2016-09-14 06:50:45.031674258 +0200
@@ -1,7 +1,7 @@
/*
Saturate.h
- Copyright 2004-13 Tim Goetze <tim@xxxxxxxxx>
+ Copyright 2004-16 Tim Goetze <tim@xxxxxxxxx>
http://quitte.de/dsp/
@@ -90,6 +90,8 @@
public:
Splitter split[2];
DSP::IIR2<sample_t> shape[2];
+ struct {float lo, hi;} vol;
+
DSP::ChebPoly<5> cheby;
uint remain;
@@ -112,6 +114,8 @@
Splitter split[2];
DSP::IIR2<sample_t> shape[2];
} chan[2];
+ struct {float lo, hi;} vol;
+
DSP::ChebPoly<5> cheby;
uint remain;
--- releases/caps-0.9.24/Saturate.cc 2014-11-10 09:52:25.000000000 +0100
+++ Saturate.cc 2016-09-13 18:08:36.348934794 +0200
@@ -1,7 +1,7 @@
/*
Saturate.cc
- Copyright 2003-13 Tim Goetze <tim@xxxxxxxxx>
+ Copyright 2003-16 Tim Goetze <tim@xxxxxxxxx>
http://quitte.de/dsp/
@@ -222,7 +222,7 @@
Spice::init()
{
float amps[] = {0,0,1,.3,.01};
- cheby.calculate (amps);
+ cheby.calculate(amps);
}
void
@@ -235,7 +235,7 @@
split[i].reset();
shape[i].reset();
}
- compress.init(fs);
+ compress.init(fs,32);
compress.set_threshold(0);
compress.set_attack(0);
compress.set_release(0);
@@ -244,19 +244,23 @@
void
Spice::cycle (uint frames)
{
- struct { float f, squash, gain; }
- lo = {getport(0)*over_fs, getport(1), getport(2)},
- hi = {getport(3)*over_fs, 0, getport(4)};
+ struct { float f, squash, gain, vol; }
+ lo = {getport(0)*over_fs, getport(1), getport(2), getport(3)},
+ hi = {getport(4)*over_fs, 0, getport(5), getport(6)};
- if (split[0].f != lo.f)
+ if (split[0].f != lo.f || lo.vol != vol.lo)
{
+ vol.lo = lo.vol;
split[0].set_f(lo.f);
DSP::RBJ::BP (2*lo.f,.7,shape[0]);
+ shape[0].scale(db2lin(vol.lo));
}
- if (split[1].f != hi.f)
+ if (split[1].f != hi.f || hi.vol != vol.hi)
{
+ vol.hi = hi.vol;
split[1].set_f(hi.f);
DSP::RBJ::HP (2*hi.f,.7,shape[1]);
+ shape[1].scale(db2lin(vol.hi));
}
lo.gain = pow (24,lo.gain) - 1;
@@ -264,8 +268,8 @@
sample_t dc = cheby.process(0);
- sample_t * s = ports[5];
- sample_t * d = ports[6];
+ sample_t * s = ports[7];
+ sample_t * d = ports[8];
while (frames)
{
@@ -315,11 +319,13 @@
PortInfo
Spice::port_info [] =
{
- { "lo.f (Hz)", CTRL_IN, {LOG | DEFAULT_MID, 50, 400}},
+ { "lo.f (Hz)", CTRL_IN, {LOG | DEFAULT_LOW, 50, 800}},
{ "lo.compress", CTRL_IN, {DEFAULT_MID, 0, 1}},
{ "lo.gain", CTRL_IN, {DEFAULT_LOW, 0, 1}},
- { "hi.f (Hz)", CTRL_IN | GROUP, {LOG | DEFAULT_MID, 400, 5000}},
+ { "lo.vol (dB)", CTRL_IN, {DEFAULT_0, -60, 60}},
+ { "hi.f (Hz)", CTRL_IN | GROUP, {LOG | DEFAULT_LOW, 400, 5000}},
{ "hi.gain", CTRL_IN, {DEFAULT_LOW, 0, 1}},
+ { "hi.vol (dB)", CTRL_IN, {DEFAULT_0, -60, 60}},
{ "in", INPUT | AUDIO },
{ "out", OUTPUT | AUDIO },
@@ -358,7 +364,7 @@
chan[c].split[i].reset();
chan[c].shape[i].reset();
}
- compress.init(fs);
+ compress.init(fs,64);
compress.set_threshold(0);
compress.set_attack(0);
compress.set_release(0);
@@ -367,34 +373,38 @@
void
SpiceX2::cycle (uint frames)
{
- struct { float f, squash, gain; }
- lo = {getport(0)*over_fs, getport(1), getport(2)},
- hi = {getport(3)*over_fs, 0, getport(4)};
+ struct { float f, squash, gain, vol; }
+ lo = {getport(0)*over_fs, getport(1), getport(2), getport(3)},
+ hi = {getport(4)*over_fs, 0, getport(5), getport(6)};
- if (chan[0].split[0].f != lo.f)
+ if (chan[0].split[0].f != lo.f || lo.vol != vol.lo)
{
+ vol.lo = lo.vol;
for (int c=0; c<2; ++c)
{
chan[c].split[0].set_f(lo.f);
DSP::RBJ::BP (2*lo.f,.7,chan[c].shape[0]);
+ chan[c].shape[0].scale(db2lin(vol.lo));
}
}
- if (chan[0].split[1].f != hi.f)
+ if (chan[0].split[1].f != hi.f || hi.vol != vol.hi)
{
+ vol.hi = hi.vol;
for (int c=0; c<2; ++c)
{
chan[c].split[1].set_f(hi.f);
DSP::RBJ::BP (2*hi.f,.7,chan[c].shape[1]);
+ chan[c].shape[1].scale(db2lin(vol.hi));
}
}
- lo.gain = pow (24,lo.gain) - 1;
- hi.gain = pow (8,hi.gain) - 1;
+ lo.gain = pow(24,lo.gain) - 1;
+ hi.gain = pow(8,hi.gain) - 1;
sample_t dc = cheby.process(0);
- sample_t * s[2] = {ports[5],ports[6]};
- sample_t * d[2] = {ports[7],ports[8]};
+ sample_t * s[2] = {ports[7],ports[8]};
+ sample_t * d[2] = {ports[9],ports[10]};
while (frames)
{
@@ -452,8 +462,10 @@
{ "lo.f (Hz)", CTRL_IN, {LOG | DEFAULT_LOW, 50, 800}},
{ "lo.compress", CTRL_IN, {DEFAULT_MID, 0, 1}},
{ "lo.gain", CTRL_IN, {DEFAULT_LOW, 0, 1}},
+ { "lo.vol (dB)", CTRL_IN, {DEFAULT_0, -60, 60}},
{ "hi.f (Hz)", CTRL_IN | GROUP, {LOG | DEFAULT_LOW, 400, 5000}},
{ "hi.gain", CTRL_IN, {DEFAULT_LOW, 0, 1}},
+ { "hi.vol (dB)", CTRL_IN, {DEFAULT_0, -60, 60}},
{ "in:l", INPUT | AUDIO },
{ "in:r", INPUT | AUDIO },
_______________________________________________
Linux-audio-user mailing list
Linux-audio-user@xxxxxxxxxxxxxxxxxxxx
http://lists.linuxaudio.org/listinfo/linux-audio-user