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)