[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