[PD-cvs] externals/sc4pd/source TwoPole.cpp,NONE,1.1 OnePole.cpp,1.1,1.2 main.cpp,1.21,1.22 sc4pd.hpp,1.4,1.5
Tim Blechmann
timblech at users.sourceforge.net
Sat Aug 7 22:44:00 CEST 2004
Update of /cvsroot/pure-data/externals/sc4pd/source
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20139/source
Modified Files:
OnePole.cpp main.cpp sc4pd.hpp
Added Files:
TwoPole.cpp
Log Message:
Index: main.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/sc4pd/source/main.cpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -C2 -d -r1.21 -r1.22
*** main.cpp 7 Aug 2004 14:01:31 -0000 1.21
--- main.cpp 7 Aug 2004 20:43:57 -0000 1.22
***************
*** 63,67 ****
" DelayL~, DelayC~, CombN~, CombL~, CombC~, AllpassN~, "
"AllpassL~,\n"
! " AllpassC~, PitchShift~, Resonz~, OnePole(~)"
"\n"
);
--- 63,69 ----
" DelayL~, DelayC~, CombN~, CombL~, CombC~, AllpassN~, "
"AllpassL~,\n"
! " AllpassC~, PitchShift~, Resonz~, OnePole(~), OneZero(~)"
! "TwoPole~"
!
"\n"
);
***************
*** 236,239 ****
--- 238,246 ----
FLEXT_DSP_SETUP(OnePole_ar);
FLEXT_SETUP(OnePole_kr);
+
+ FLEXT_DSP_SETUP(OneZero_ar);
+ FLEXT_SETUP(OneZero_kr);
+
+ FLEXT_DSP_SETUP(TwoPole_ar);
}
--- NEW FILE: TwoPole.cpp ---
/* sc4pd
TwoPole~
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: VA: Insight
*/
#include "sc4pd.hpp"
/* ------------------------ TwoPole~ -------------------------------*/
class TwoPole_ar:
public sc4pd_dsp
{
FLEXT_HEADER(TwoPole_ar,sc4pd_dsp);
public:
TwoPole_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)
{
mRadiansPerSample = sc_radianspersample();
mFilterSlope = sc_filterslope();
mFilterLoops = sc_filterloops();
mFilterRemain = sc_filterremain();
}
void m_set_freq(float f)
{
m_freq=f;
changed = true;
}
void m_set_radius(float f)
{
m_reson=f;
changed = true;
}
private:
float m_b1, m_b2, m_y1, m_y2, m_freq, m_reson;
bool changed;
float mRadiansPerSample, mFilterSlope;
int mFilterLoops, mFilterRemain;
FLEXT_CALLBACK_F(m_set_freq);
FLEXT_CALLBACK_F(m_set_radius);
};
FLEXT_LIB_DSP_V("TwoPole~",TwoPole_ar);
TwoPole_ar::TwoPole_ar(int argc, t_atom *argv)
{
FLEXT_ADDMETHOD_(0,"kfreq",m_set_freq);
FLEXT_ADDMETHOD_(0,"kradius",m_set_radius);
//parse arguments
AtomList Args(argc,argv);
m_freq = sc_getfloatarg(Args,0);
m_reson = sc_getfloatarg(Args,1);
changed = false;
AddOutSignal();
m_b1 = 0.f;
m_b2 = 0.f;
m_y1 = 0.f;
m_y2 = 0.f;
}
void TwoPole_ar::m_signal(int n, t_sample *const *in,
t_sample *const *out)
{
t_sample *nin = *in;
t_sample *nout = *out;
float y0;
float y1 = m_y1;
float y2 = m_y2;
if (changed)
{
float b1 = m_b1;
float b2 = m_b2;
float b1_next = 2.f * m_reson * cos(m_freq * mRadiansPerSample);
float b2_next = -(m_reson * m_reson);
float b1_slope = (b1_next - b1) * mFilterSlope;
float b2_slope = (b2_next - b2) * mFilterSlope;
for (int i = 0; i!= mFilterLoops;++i)
{
ZXP(nout) = y0 = ZXP(nin) + b1 * y1 + b2 * y2;
ZXP(nout) = y2 = ZXP(nin) + b1 * y0 + b2 * y1;
ZXP(nout) = y1 = ZXP(nin) + b1 * y2 + b2 * y0;
b1 += b1_slope;
b2 += b2_slope;
}
for (int i = 0; i!= mFilterRemain;++i)
{
ZXP(nout) = y0 = ZXP(nin) + b1 * y1 + b2 * y2;
y2 = y1;
y1 = y0;
}
m_b1 = b1;
m_b2 = b2;
changed = false;
}
else
{
float b1 = m_b1;
float b2 = m_b2;
for (int i = 0; i!= mFilterLoops;++i)
{
ZXP(nout) = y0 = ZXP(nin) + b1 * y1 + b2 * y2;
ZXP(nout) = y2 = ZXP(nin) + b1 * y0 + b2 * y1;
ZXP(nout) = y1 = ZXP(nin) + b1 * y2 + b2 * y0;
}
for (int i = 0; i!= mFilterRemain;++i)
{
ZXP(nout) = y0 = ZXP(nin) + b1 * y1 + b2 * y2;
y2 = y1;
y1 = y0;
}
}
m_y1 = zapgremlins(y1);
m_y2 = zapgremlins(y2);
}
/* no control rate two pole filter */
Index: OnePole.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/sc4pd/source/OnePole.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** OnePole.cpp 7 Aug 2004 14:05:40 -0000 1.1
--- OnePole.cpp 7 Aug 2004 20:43:57 -0000 1.2
***************
*** 32,36 ****
http://www.audiosynth.com
! Coded while listening to:
*/
--- 32,36 ----
http://www.audiosynth.com
! Coded while listening to: Goh Lee Kwang: Internal Pleasures
*/
***************
*** 241,245 ****
void OnePole_kr::m_perform(float f)
{
! m_y1= f + m_b1 * (m_y1 - f);
ToOutFloat(0,m_y1);
}
--- 241,245 ----
void OnePole_kr::m_perform(float f)
{
! m_y1= ((1-abs(m_b1))*f)+m_b1*m_y1;
ToOutFloat(0,m_y1);
}
Index: sc4pd.hpp
===================================================================
RCS file: /cvsroot/pure-data/externals/sc4pd/source/sc4pd.hpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** sc4pd.hpp 7 Aug 2004 14:01:31 -0000 1.4
--- sc4pd.hpp 7 Aug 2004 20:43:57 -0000 1.5
***************
*** 103,112 ****
}
! inline float sc_filterloops()
{
return Blocksize() / 3;
}
! inline float sc_filterremain()
{
return Blocksize() % 3;
--- 103,112 ----
}
! inline int sc_filterloops()
{
return Blocksize() / 3;
}
! inline int sc_filterremain()
{
return Blocksize() % 3;
More information about the Pd-cvs
mailing list