[PD-cvs] externals/sc4pd/source Decay2.cpp,NONE,1.1 sc4pd.hpp,NONE,1.1 Decay.cpp,1.2,1.3 main.cpp,1.13,1.14 ring1.cpp,1.1,1.2
Tim Blechmann
timblech at users.sourceforge.net
Mon Aug 2 22:14:01 CEST 2004
Update of /cvsroot/pure-data/externals/sc4pd/source
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24769/source
Modified Files:
Decay.cpp main.cpp ring1.cpp
Added Files:
Decay2.cpp sc4pd.hpp
Log Message:
Index: main.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/sc4pd/source/main.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -d -r1.13 -r1.14
*** main.cpp 2 Aug 2004 19:18:22 -0000 1.13
--- main.cpp 2 Aug 2004 20:13:59 -0000 1.14
***************
*** 59,63 ****
"sqrdif(~),\n"
" sqrsum(~), absdif(~), LFSaw(~), LFPulse(~), Impulse(~),\n"
! " Integrator(~), Decay~\n"
);
--- 59,63 ----
"sqrdif(~),\n"
" sqrsum(~), absdif(~), LFSaw(~), LFPulse(~), Impulse(~),\n"
! " Integrator(~), Decay~, Decay2~\n"
);
***************
*** 195,198 ****
--- 195,200 ----
FLEXT_DSP_SETUP(Decay_ar);
+
+ FLEXT_DSP_SETUP(Decay2_ar);
}
--- NEW FILE: Decay2.cpp ---
/* sc4pd
Decay2~, Decay2
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: AMM: AMMMusic 1966
*/
#include "sc4pd.hpp"
/* ------------------------ Decay2~ -----------------------------*/
class Decay2_ar
:public flext_dsp
{
FLEXT_HEADER(Decay2_ar,flext_dsp);
public:
Decay2_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_attack(float f);
void m_decay(float f);
private:
FLEXT_CALLBACK_F(m_decay);
FLEXT_CALLBACK_F(m_attack);
float m_attackTime, m_y1a, m_b1a, n_b1a;
float m_decayTime, m_y1b, m_b1b, n_b1b;
bool changed;
};
FLEXT_LIB_DSP_V("Decay2~",Decay2_ar);
Decay2_ar::Decay2_ar(int argc,t_atom * argv)
{
FLEXT_ADDMETHOD_(0,"decayTime",m_decay);
FLEXT_ADDMETHOD_(0,"attackTime",m_attack);
AtomList Args(argc,argv);
m_decayTime = sc_getfloatarg(Args,1); //decay
m_attackTime = sc_getfloatarg(Args,0);//attack
AddOutSignal();
m_y1a = m_y1b = 0.f; //different than in sc
}
void Decay2_ar::m_signal(int n, t_sample *const *in,
t_sample *const *out)
{
t_sample *nout = *out;
t_sample *nin = *in;
float y1a = m_y1a;
float y1b = m_y1b;
float b1a = m_b1a;
float b1b = m_b1b;
if(changed)
{
float b1a_slope = CALCSLOPE(n_b1a, b1a);
float b1b_slope = CALCSLOPE(n_b1b, b1b);
m_b1a = n_b1a;
m_b1b = n_b1b;
for (int i = 0; i!= n;++i)
{
float y0 = ZXP(nin);
y1a = y0 + b1a * y1a;
y1b = y0 + b1b * y1b;
ZXP (nout) = y1a - y1b;
b1a += b1a_slope;
b1b += b1b_slope;
}
changed = false;
}
else
{
for (int i = 0; i!= n;++i)
{
float y0 = ZXP(nin);
y1a = y0 + b1a * y1a;
y1b = y0 + b1b * y1b;
ZXP (nout) = y1a - y1b;
}
}
m_y1a = zapgremlins(y1a);
m_y1b = zapgremlins(y1b);
}
void Decay2_ar::m_decay(float f)
{
m_decayTime = f;
n_b1a = f == 0.f ? 0.f : exp(log001 / (f * Samplerate()));
changed = true;
}
void Decay2_ar::m_attack(float f)
{
m_attackTime = f;
n_b1b = f == 0.f ? 0.f : exp(log001 / (f * Samplerate()));
changed = true;
}
void Decay2_ar::m_dsp(int n, t_sample *const *in, t_sample *const *out)
{
m_b1a = m_decayTime == 0.f ? 0.f : exp(log001 /
(m_decayTime * Samplerate()));
m_b1b = m_attackTime == 0.f ? 0.f : exp(log001 /
(m_attackTime * Samplerate()));
}
/* todo: does it make sense to implement a message-based Decay2?
Probably not... */
--- NEW FILE: sc4pd.hpp ---
/* sc4pd:
support functions
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: Morton Feldman: For John Cage
*/
#include <flext.h>
#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 406)
#error You need at least FLEXT version 0.4.6
#endif
#include "SC_PlugIn.h"
#include "support.hpp"
/* this macro has to be redefined to work with flext */
// calculate a slope for control rate interpolation to audio rate.
//#define CALCSLOPE(next,prev) ((next - prev) * unit->mRate->mSlopeFactor)
#undef CALCSLOPE
#define CALCSLOPE(next,prev) ((next - prev) * 1/Blocksize())
/* to make sure the behaviour is consistent: */
#undef ZXP
#define ZXP(z) (*(z)++)
Index: Decay.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/sc4pd/source/Decay.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** Decay.cpp 2 Aug 2004 19:18:22 -0000 1.2
--- Decay.cpp 2 Aug 2004 20:13:59 -0000 1.3
***************
*** 38,41 ****
--- 38,42 ----
#include "sc4pd.hpp"
+ /* todo: linear interpolation is broken */
/* ------------------------ Decay~ -----------------------------*/
***************
*** 68,72 ****
AtomList Args(argc,argv);
! m_b1 = sc_getfloatarg(Args,0);
AddOutSignal();
--- 69,73 ----
AtomList Args(argc,argv);
! decayTime = sc_getfloatarg(Args,0);
AddOutSignal();
***************
*** 149,158 ****
{
decayTime = f;
! m_b1= 0.f ? 0.f : exp(log001 / (decayTime * Samplerate()));
}
void Decay_ar::m_dsp(int n, t_sample *const *in, t_sample *const *out)
{
! m_b1= 0.f ? 0.f : exp(log001 / (decayTime * Samplerate()));
}
--- 150,159 ----
{
decayTime = f;
! m_b1= f == 0.f ? 0.f : exp(log001 / (decayTime * Samplerate()));
}
void Decay_ar::m_dsp(int n, t_sample *const *in, t_sample *const *out)
{
! m_b1= decayTime == 0.f ? 0.f : exp(log001 / (decayTime * Samplerate()));
}
Index: ring1.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/sc4pd/source/ring1.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** ring1.cpp 30 Jul 2004 21:27:07 -0000 1.1
--- ring1.cpp 2 Aug 2004 20:13:59 -0000 1.2
***************
*** 36,46 ****
*/
! #include <flext.h>
! #include "SC_PlugIn.h"
!
! #if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 406)
! #error You need at least FLEXT version 0.4.6
! #endif
!
inline float sc_ring1 (float a, float b)
--- 36,40 ----
*/
! #include "sc4pd.hpp"
inline float sc_ring1 (float a, float b)
More information about the Pd-cvs
mailing list