[PD-cvs] externals/sc4pd/source LFNoise1.cpp,NONE,1.1 LFNoise2.cpp,NONE,1.1 LFClipNoise.cpp,1.1,1.2 LFNoise0.cpp,1.1,1.2 main.cpp,1.5,1.6
Tim Blechmann
timblech at users.sourceforge.net
Fri Jul 16 18:43:50 CEST 2004
Update of /cvsroot/pure-data/externals/sc4pd/source
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18458/source
Modified Files:
LFClipNoise.cpp LFNoise0.cpp main.cpp
Added Files:
LFNoise1.cpp LFNoise2.cpp
Log Message:
Index: main.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/sc4pd/source/main.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** main.cpp 15 Jul 2004 21:34:12 -0000 1.5
--- main.cpp 16 Jul 2004 16:43:48 -0000 1.6
***************
*** 58,62 ****
"TExpRand(~), IRand(~), TIRand(~),\n CoinGate, "
"LinRand(~), NRand(~), ExpRand(~), LFClipNoise(~),\n"
! " LFNoise0(~)\n");
//initialize objects
--- 58,62 ----
"TExpRand(~), IRand(~), TIRand(~),\n CoinGate, "
"LinRand(~), NRand(~), ExpRand(~), LFClipNoise(~),\n"
! " LFNoise0(~), LFNoise1(~), LFNoise2\n");
//initialize objects
***************
*** 125,128 ****
--- 125,134 ----
FLEXT_DSP_SETUP(LFNoise0_ar);
FLEXT_SETUP(LFNoise0_kr);
+
+ FLEXT_DSP_SETUP(LFNoise1_ar);
+ FLEXT_SETUP(LFNoise1_kr);
+
+ FLEXT_DSP_SETUP(LFNoise2_ar);
+ FLEXT_SETUP(LFNoise2_kr);
}
Index: LFNoise0.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/sc4pd/source/LFNoise0.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** LFNoise0.cpp 15 Jul 2004 21:34:12 -0000 1.1
--- LFNoise0.cpp 16 Jul 2004 16:43:47 -0000 1.2
***************
*** 155,160 ****
protected:
! void m_perform();
!
void m_seed(int i)
{
--- 155,160 ----
protected:
! void m_perform(void*);
!
void m_seed(int i)
{
***************
*** 164,170 ****
void m_set(float f)
{
! double dt = sc_min(1/f, .001f);
m_timer.Reset();
! m_timer.Periodic(1000*dt);
}
--- 164,170 ----
void m_set(float f)
{
! double dt = sc_max(1/f, .001f);
m_timer.Reset();
! m_timer.Periodic(dt);
}
***************
*** 188,201 ****
AtomList Args(argc,argv);
! double dt = sc_min(1/sc_getfloatarg(Args,0), .001f);
rgen.init(timeseed());
! m_timer.Periodic(1000*dt);
AddOutFloat();
}
! void LFNoise0_kr::m_perform()
{
ToOutFloat(0,rgen.frand2());
--- 188,201 ----
AtomList Args(argc,argv);
! double dt = sc_max(1/sc_getfloatarg(Args,0), .001f);
rgen.init(timeseed());
! m_timer.Periodic(dt);
AddOutFloat();
}
! void LFNoise0_kr::m_perform(void*)
{
ToOutFloat(0,rgen.frand2());
--- NEW FILE: LFNoise2.cpp ---
/* sc4pd
LFNoise2, LFNoise2~
Copyright (c) 2004 Tim Blechmann.
This code is derived from:
SuperCollider real time audio synthesis system
Copyright (c) 2002 James McCartney. All rights reserved.
http://www.audiosynth.com
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Based on:
PureData by Miller Puckette and others.
http://www.crca.ucsd.edu/~msp/software.html
FLEXT by Thomas Grill
http://www.parasitaere-kapazitaeten.net/ext
SuperCollider by James McCartney
http://www.audiosynth.com
Coded while listening to: Guenther Mueller & Toshimaru Nakamura: Tint
*/
#include <flext.h>
#include "SC_PlugIn.h"
#include "support.hpp"
#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 406)
#error You need at least FLEXT version 0.4.6
#endif
/* ------------------------ LFNoise2~ -------------------------------*/
class LFNoise2_ar:
public flext_dsp
{
FLEXT_HEADER(LFNoise2_ar,flext_dsp);
public:
LFNoise2_ar(int argc, t_atom *argv);
protected:
virtual void m_signal(int n, t_sample *const *in, t_sample *const *out);
virtual void m_dsp(int n, t_sample *const *in, t_sample *const *out);
void m_seed(int i)
{
rgen.init(i);
}
void m_set(float f)
{
m_freq = f;
}
private:
RGen rgen;
float m_freq;
float m_level;
float m_slope;
float m_curve;
int m_counter;
int m_sr;
float m_nextvalue;
float m_nextmidpt;
FLEXT_CALLBACK_I(m_seed);
FLEXT_CALLBACK_F(m_set);
};
FLEXT_LIB_DSP_V("LFNoise2~",LFNoise2_ar);
LFNoise2_ar::LFNoise2_ar(int argc, t_atom *argv)
{
FLEXT_ADDMETHOD_(0,"seed",m_seed);
FLEXT_ADDMETHOD_(0,"set",m_set);
//parse arguments
AtomList Args(argc,argv);
m_freq = sc_getfloatarg(Args,0);
rgen.init(timeseed());
m_counter=0;
m_level=rgen.frand2();
m_slope=0;
m_curve=0;
m_nextvalue=0;
m_nextmidpt=0;
AddOutSignal();
}
void LFNoise2_ar::m_dsp(int n, t_sample *const *in,
t_sample *const *out)
{
m_sr = Samplerate();
}
void LFNoise2_ar::m_signal(int n, t_sample *const *in,
t_sample *const *out)
{
t_sample *nout = *out;
float level = m_level;
int32 counter = m_counter;
float slope = m_slope;
float curve = m_curve;
RGET;
int remain = n;
do
{
if (counter<=0)
{
float value = m_nextvalue;
m_nextvalue = frand2(s1,s2,s3);
level = m_nextmidpt;
m_nextmidpt = (m_nextvalue + value) * .5;
counter = (int32)(m_sr / sc_max(m_freq, .001f));
counter = sc_max(2, counter);
float fseglen = (float)counter;
curve = 2.f * (m_nextmidpt - level - fseglen * slope)
/ (fseglen * fseglen + fseglen);
}
int nsmps = sc_min(remain, counter);
remain -= nsmps;
counter -= nsmps;
for (int i = 0; i!= nsmps;++i)
{
(*(nout)++)=level;
slope+=curve;
level+=slope;
}
}
while(remain);
m_level = level;
m_counter = counter;
m_slope = slope;
m_curve = curve;
RPUT;
}
/* ------------------------ LFNoise2 ---------------------------------*/
class LFNoise2_kr:
public flext_base
{
FLEXT_HEADER(LFNoise2_kr,flext_base);
public:
LFNoise2_kr(int argc, t_atom *argv);
protected:
void m_perform(void*);
void m_seed(int i)
{
rgen.init(i);
}
void m_set(float);
private:
RGen rgen;
float m_level;
float m_slope;
float m_curve;
float m_nextvalue;
float m_nextmidpt;
float dt; //in s
float tick; //in s
int counter;
Timer m_timer;
FLEXT_CALLBACK_I(m_seed);
FLEXT_CALLBACK_T(m_perform);
FLEXT_CALLBACK_F(m_set);
};
FLEXT_LIB_V("LFNoise2",LFNoise2_kr);
LFNoise2_kr::LFNoise2_kr(int argc, t_atom *argv)
: tick(0.01)
{
FLEXT_ADDMETHOD_(0,"seed",m_seed);
FLEXT_ADDMETHOD_(0,"set",m_set);
FLEXT_ADDTIMER(m_timer,m_perform);
//parse arguments
AtomList Args(argc,argv);
rgen.init(timeseed());
m_level=rgen.frand2();
AddOutFloat();
m_set(sc_getfloatarg(Args,0));
}
void LFNoise2_kr::m_set(float f)
{
dt = sc_max(1/f, .001f);
counter = (dt/tick);
counter = sc_max(2, counter);
float value = m_nextvalue;
m_nextvalue = rgen.frand2();
m_level = m_nextmidpt;
m_nextmidpt = (m_nextvalue + value) * .5;
float fseglen = (float)counter;
m_curve = 2.f * (m_nextmidpt - m_level - fseglen * m_slope)
/ (fseglen * fseglen + fseglen);
m_timer.Reset();
m_timer.Delay(tick);
}
void LFNoise2_kr::m_perform(void*)
{
m_slope+=m_curve;
m_level+=m_slope;
ToOutFloat(0,m_level);
if (--counter)
{
m_timer.Reset();
m_timer.Delay(tick);
}
else
{
counter = (dt/tick);
counter = sc_max(2, counter);
float value = m_nextvalue;
m_nextvalue = rgen.frand2();
m_level = m_nextmidpt;
m_nextmidpt = (m_nextvalue + value) * .5;
float fseglen = (float)counter;
m_curve = 2.f * (m_nextmidpt - m_level - fseglen * m_slope) /
(fseglen * fseglen + fseglen);
m_timer.Reset();
m_timer.Delay(tick);
}
}
Index: LFClipNoise.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/sc4pd/source/LFClipNoise.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** LFClipNoise.cpp 15 Jul 2004 21:34:12 -0000 1.1
--- LFClipNoise.cpp 16 Jul 2004 16:43:47 -0000 1.2
***************
*** 155,159 ****
protected:
! void m_perform();
void m_seed(int i)
--- 155,159 ----
protected:
! void m_perform(void*);
void m_seed(int i)
***************
*** 164,170 ****
void m_set(float f)
{
! double dt = sc_min(1/f, .001f);
m_timer.Reset();
! m_timer.Periodic(1000*dt);
}
--- 164,170 ----
void m_set(float f)
{
! double dt = sc_max(1/f, .001f);
m_timer.Reset();
! m_timer.Periodic(dt);
}
***************
*** 188,201 ****
AtomList Args(argc,argv);
! double dt = sc_min(1/sc_getfloatarg(Args,0), .001f);
rgen.init(timeseed());
! m_timer.Periodic(1000*dt);
AddOutFloat();
}
! void LFClipNoise_kr::m_perform()
{
ToOutFloat(0,rgen.fcoin());
--- 188,201 ----
AtomList Args(argc,argv);
! double dt = sc_max(1/sc_getfloatarg(Args,0), .001f);
rgen.init(timeseed());
! m_timer.Periodic(dt);
AddOutFloat();
}
! void LFClipNoise_kr::m_perform(void*)
{
ToOutFloat(0,rgen.fcoin());
--- NEW FILE: LFNoise1.cpp ---
/* sc4pd
LFNoise1, LFNoise1~
Copyright (c) 2004 Tim Blechmann.
This code is derived from:
SuperCollider real time audio synthesis system
Copyright (c) 2002 James McCartney. All rights reserved.
http://www.audiosynth.com
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Based on:
PureData by Miller Puckette and others.
http://www.crca.ucsd.edu/~msp/software.html
FLEXT by Thomas Grill
http://www.parasitaere-kapazitaeten.net/ext
SuperCollider by James McCartney
http://www.audiosynth.com
Coded while listening to: Fred Frith: Gravity
*/
#include <flext.h>
#include "SC_PlugIn.h"
#include "support.hpp"
#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 406)
#error You need at least FLEXT version 0.4.6
#endif
/* ------------------------ LFNoise1~ -------------------------------*/
class LFNoise1_ar:
public flext_dsp
{
FLEXT_HEADER(LFNoise1_ar,flext_dsp);
public:
LFNoise1_ar(int argc, t_atom *argv);
protected:
virtual void m_signal(int n, t_sample *const *in, t_sample *const *out);
virtual void m_dsp(int n, t_sample *const *in, t_sample *const *out);
void m_seed(int i)
{
rgen.init(i);
}
void m_set(float f)
{
m_freq = f;
}
private:
RGen rgen;
float m_freq;
float m_level;
float m_slope;
int m_counter;
int m_sr;
FLEXT_CALLBACK_I(m_seed);
FLEXT_CALLBACK_F(m_set);
};
FLEXT_LIB_DSP_V("LFNoise1~",LFNoise1_ar);
LFNoise1_ar::LFNoise1_ar(int argc, t_atom *argv)
{
FLEXT_ADDMETHOD_(0,"seed",m_seed);
FLEXT_ADDMETHOD_(0,"set",m_set);
//parse arguments
AtomList Args(argc,argv);
m_freq = sc_getfloatarg(Args,0);
rgen.init(timeseed());
m_counter=0;
m_level=rgen.frand2();
m_slope=0;
AddOutSignal();
}
void LFNoise1_ar::m_dsp(int n, t_sample *const *in,
t_sample *const *out)
{
m_sr = Samplerate();
}
void LFNoise1_ar::m_signal(int n, t_sample *const *in,
t_sample *const *out)
{
t_sample *nout = *out;
float level = m_level;
int32 counter = m_counter;
float slope = m_slope;
RGET;
int remain = n;
do
{
if (counter<=0)
{
counter = (int)(m_sr / sc_max(m_freq, .001f));
counter = sc_max(1, counter);
float nextlevel = frand2(s1,s2,s3);
slope = (nextlevel - level) / counter;
}
int nsmps = sc_min(remain, counter);
remain -= nsmps;
counter -= nsmps;
for (int i = 0; i!= nsmps;++i)
{
(*(nout)++)=level;
level+=slope;
}
}
while(remain);
m_level = level;
m_counter = counter;
m_slope = slope;
RPUT;
}
/* ------------------------ LFNoise1 ---------------------------------*/
class LFNoise1_kr:
public flext_base
{
FLEXT_HEADER(LFNoise1_kr,flext_base);
public:
LFNoise1_kr(int argc, t_atom *argv);
protected:
void m_perform(void*);
void m_seed(int i)
{
rgen.init(i);
}
void m_set(float);
private:
RGen rgen;
float m_level;
float m_slope;
float dt; //in s
float tick; //in s
int counter;
Timer m_timer;
FLEXT_CALLBACK_I(m_seed);
FLEXT_CALLBACK_T(m_perform);
FLEXT_CALLBACK_F(m_set);
};
FLEXT_LIB_V("LFNoise1",LFNoise1_kr);
LFNoise1_kr::LFNoise1_kr(int argc, t_atom *argv)
: tick(0.01)
{
FLEXT_ADDMETHOD_(0,"seed",m_seed);
FLEXT_ADDMETHOD_(0,"set",m_set);
FLEXT_ADDTIMER(m_timer,m_perform);
//parse arguments
AtomList Args(argc,argv);
rgen.init(timeseed());
m_level=rgen.frand2();
AddOutFloat();
m_set(sc_getfloatarg(Args,0));
}
void LFNoise1_kr::m_set(float f)
{
dt = sc_max(1/f, .001f);
counter = (dt/tick);
float nextlevel = rgen.frand2();
m_slope = (nextlevel - m_level) / counter;
m_timer.Reset();
m_timer.Delay(tick);
}
void LFNoise1_kr::m_perform(void*)
{
m_level+=m_slope;
ToOutFloat(0,m_level);
if (--counter)
{
m_timer.Reset();
m_timer.Delay(tick);
}
else
{
counter = (dt/tick);
float nextlevel = rgen.frand2();
m_slope = (nextlevel - m_level) / counter;
m_timer.Reset();
m_timer.Delay(tick);
}
}
More information about the Pd-cvs
mailing list