[PD-cvs] externals/tbext/source him.cpp,1.4,1.5
Tim Blechmann
timblech at users.sourceforge.net
Sun Sep 5 23:28:54 CEST 2004
Update of /cvsroot/pure-data/externals/tbext/source
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7755
Modified Files:
him.cpp
Log Message:
added crossfade
Index: him.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/tbext/source/him.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** him.cpp 13 Jul 2004 20:04:52 -0000 1.4
--- him.cpp 5 Sep 2004 21:28:52 -0000 1.5
***************
*** 63,66 ****
--- 63,67 ----
protected:
virtual void m_signal (int n, float *const *in, float *const *out);
+ virtual void m_dsp (int n, float *const *in, float *const *out);
void set_mu(t_float);
***************
*** 79,83 ****
// 4th order Runge Kutta update of the dynamical variables
! void runge_kutta_4(t_float dt);
//these are our data
--- 80,84 ----
// 4th order Runge Kutta update of the dynamical variables
! void runge_kutta_4(t_float dt);
//these are our data
***************
*** 89,92 ****
--- 90,101 ----
bool regtime; //if true "regularisierte zeit"
+ bool xfade;
+ t_float newE;
+ t_float newdt;
+ bool newsystem;
+ bool newregtime;
+
+ t_float * m_fader;
+
//Callbacks
FLEXT_CALLBACK_1(set_mu,t_float);
***************
*** 210,214 ****
/*
! the system might become unstable ... in this case, we'll reset the system
*/
--- 219,223 ----
/*
! the system might become unstable ... in this case, we'll request a new system
*/
***************
*** 216,220 ****
{
if(data[i]>2)
! reset();
}
}
--- 225,237 ----
{
if(data[i]>2)
! {
! xfade = newsystem = true;
! data[i] = 2;
! }
! if(data[i]<-2)
! {
! xfade = newsystem = true;
! data[i] = -2;
! }
}
}
***************
*** 234,238 ****
if (regtime)
{
! for (int j=0;j!=n;++j)
{
runge_kutta_4(dt);
--- 251,255 ----
if (regtime)
{
! for (int i=0;i!=n;++i)
{
runge_kutta_4(dt);
***************
*** 247,251 ****
else
{
! for (int j=0;j!=n;++j)
{
runge_kutta_4(dt/(2*sqrt(data[0]*data[0]+data[2]*data[2])));
--- 264,268 ----
else
{
! for (int i=0;i!=n;++i)
{
runge_kutta_4(dt/(2*sqrt(data[0]*data[0]+data[2]*data[2])));
***************
*** 258,263 ****
--- 275,369 ----
}
}
+
+ if (xfade)
+ {
+ /* fading */
+ out0 = out[0];
+ out1 = out[1];
+ out2 = out[2];
+ out3 = out[3];
+ out4 = out[4];
+ out5 = out[5];
+
+ t_float * fader = m_fader + n - 1;
+ for (int i=0;i!=n;++i)
+ {
+ (*(out0)++) *= *fader;
+ (*(out1)++) *= *fader;
+ (*(out2)++) *= *fader;
+ (*(out3)++) *= *fader;
+ (*(out4)++) *= *fader;
+ (*(out5)++) *= *fader--;
+ }
+
+ if (newsystem)
+ {
+ reset();
+ newsystem = false;
+ }
+
+ E = newE;
+ dt = newdt;
+ regtime = newregtime;
+
+ out0 = out[0];
+ out1 = out[1];
+ out2 = out[2];
+ out3 = out[3];
+ out4 = out[4];
+ out5 = out[5];
+
+ fader = m_fader;
+ if (regtime)
+ {
+ for (int i=0;i!=n;++i)
+ {
+ runge_kutta_4(dt);
+ (*(out0)++)+= data[0]* *fader;
+ (*(out1)++)+= data[1]* *fader;
+ (*(out2)++)+= data[2]* *fader;
+ (*(out3)++)+= data[3]* *fader;
+ (*(out4)++)+= data[0]*data[2]* *fader;
+ (*(out5)++)+= (data[0]*data[0]-data[2]*data[2])*0.5* *fader++;
+ }
+ }
+ else
+ {
+ for (int i=0;i!=n;++i)
+ {
+ runge_kutta_4(dt/(2*sqrt(data[0]*data[0]+data[2]*data[2])));
+ (*(out0)++)+= data[0]* *fader;
+ (*(out1)++)+= data[1]* *fader;
+ (*(out2)++)+= data[2]* *fader;
+ (*(out3)++)+= data[3]* *fader;
+ (*(out4)++)+= data[0]*data[2]* *fader;
+ (*(out5)++)+= (data[0]*data[0]-data[2]*data[2])*0.5* *fader++;
+ }
+ }
+
+ xfade = false;
+ }
+
}
+ void him::m_dsp(int n, t_float *const *in, t_float *const *out)
+ {
+ m_fader = new t_float[n];
+ t_float on = 1.f/(n-1);
+
+ t_float value = 0;
+
+ t_float* localfader = m_fader;
+
+ while (n--)
+ {
+ *localfader = value;
+ value += on;
+ ++localfader;
+ }
+ xfade = false;
+ }
+
+
void him::set_mu(t_float f)
{
***************
*** 282,302 ****
data[3]=f;
reset_muv();
- post("resetting muv!!!");
}
void him::set_etilde(t_float f)
{
! E=f;
! reset_nuv();
}
void him::set_dt(t_float f)
{
! dt=f;
}
void him::set_regtime(bool b)
{
! regtime=b;
}
--- 388,410 ----
data[3]=f;
reset_muv();
}
void him::set_etilde(t_float f)
{
! newE=f;
! xfade = true;
! //reset_nuv();
}
void him::set_dt(t_float f)
{
! newdt=f;
! xfade = true;
}
void him::set_regtime(bool b)
{
! newregtime=b;
! xfade = true;
}
***************
*** 317,320 ****
data[2]=float(rand())/float(RAND_MAX);
reset_nuv();
- post("randomizing values");
}
--- 425,427 ----
More information about the Pd-cvs
mailing list