From 89f570e5ebeab979202acf679974bafd05072692 Mon Sep 17 00:00:00 2001 From: Tim Blechmann Date: Sat, 7 Aug 2004 14:01:31 +0000 Subject: sc4pd_dsp class and other changes svn path=/trunk/externals/tb/; revision=1912 --- sc4pd/source/PitchShift.cpp | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) (limited to 'sc4pd/source/PitchShift.cpp') diff --git a/sc4pd/source/PitchShift.cpp b/sc4pd/source/PitchShift.cpp index d182681..8a3f265 100644 --- a/sc4pd/source/PitchShift.cpp +++ b/sc4pd/source/PitchShift.cpp @@ -31,7 +31,7 @@ SuperCollider by James McCartney http://www.audiosynth.com - Coded while listening to: + Coded while listening to: Bernhard Lang: Differenz / Wiederholung 2 */ @@ -40,9 +40,9 @@ /* ------------------------ PitchShift~ -----------------------------*/ class PitchShift_ar - :public flext_dsp + :public sc4pd_dsp { - FLEXT_HEADER(PitchShift_ar,flext_dsp); + FLEXT_HEADER(PitchShift_ar,sc4pd_dsp); public: PitchShift_ar(int argc,t_atom * argv); @@ -55,11 +55,6 @@ protected: virtual void m_dsp(int n, t_sample *const *in, t_sample *const *out); - void m_set_windowsize(float f) - { - m_windowsize = f; - } - void m_set_pitchratio (float f) { m_pitchratio = f; @@ -76,7 +71,7 @@ protected: } private: - float m_windowsize, m_pitchratio,m_pitchdispersion,m_timedispersion; + float m_windowsize,m_pitchratio,m_pitchdispersion,m_timedispersion; RGen rgen; @@ -93,7 +88,6 @@ private: DEFSIGFUN(m_signal_); DEFSIGFUN(m_signal_z); - FLEXT_CALLBACK_F(m_set_windowsize); FLEXT_CALLBACK_F(m_set_pitchratio); FLEXT_CALLBACK_F(m_set_pitchdispersion); FLEXT_CALLBACK_F(m_set_timedispersion); @@ -103,7 +97,6 @@ FLEXT_LIB_DSP_V("PitchShift~",PitchShift_ar); PitchShift_ar::PitchShift_ar(int argc,t_atom * argv) { - FLEXT_ADDMETHOD_(0,"windowSize",m_set_windowsize); FLEXT_ADDMETHOD_(0,"pitchRatio",m_set_pitchratio); FLEXT_ADDMETHOD_(0,"pitchDispersion",m_set_pitchdispersion); FLEXT_ADDMETHOD_(0,"timeDispersion",m_set_timedispersion); @@ -115,6 +108,7 @@ PitchShift_ar::PitchShift_ar(int argc,t_atom * argv) post("4 arguments needed"); return; } + m_windowsize = sc_getfloatarg(Args,0); m_pitchratio = sc_getfloatarg(Args,1); m_pitchdispersion = sc_getfloatarg(Args,2); @@ -132,17 +126,16 @@ void PitchShift_ar::m_dsp(int n, t_sample *const *in, t_sample *const *out) /* initialization from PitchShift_Ctor(PitchShift *unit) */ long delaybufsize; - float /* *out, *in,*/ *dlybuf; - float winsize, pchratio; + float *dlybuf; + float pchratio; float fdelaylen, slope; long framesize, last; //out = ZOUT(0); //in = ZIN(0); pchratio = m_pitchratio; - winsize = m_windowsize; - delaybufsize = (long)ceil(winsize * SAMPLERATE * 3.f + 3.f); + delaybufsize = (long)ceil(m_windowsize * SAMPLERATE * 3.f + 3.f); fdelaylen = delaybufsize - 3; delaybufsize = delaybufsize + BUFLENGTH; @@ -159,7 +152,7 @@ void PitchShift_ar::m_dsp(int n, t_sample *const *in, t_sample *const *out) m_numoutput = 0; m_mask = last = (delaybufsize - 1); - m_framesize = framesize = ((long)(winsize * SAMPLERATE) + 2) & ~3; + m_framesize = framesize = ((long)(m_windowsize * SAMPLERATE) + 2) & ~3; m_slope = slope = 2.f / framesize; m_stage = 3; m_counter = framesize >> 2; @@ -197,7 +190,7 @@ void PitchShift_ar::m_signal_z(int n, t_sample *const *in, float dsamp3, dsamp3_slope, ramp3, ramp3_slope; float dsamp4, dsamp4_slope, ramp4, ramp4_slope; float fdelaylen, d1, d2, frac, slope, samp_slope, startpos, - winsize, pchdisp, timedisp; + pchdisp, timedisp; long remain, nsmps, idelaylen, irdphase, irdphaseb, iwrphase; long mask, idsamp; long counter, stage, framesize, numoutput; @@ -208,10 +201,9 @@ void PitchShift_ar::m_signal_z(int n, t_sample *const *in, nin = *in; pchratio = m_pitchratio; - winsize = m_windowsize; pchdisp = m_pitchdispersion; timedisp = m_timedispersion; - timedisp = sc_clip(timedisp, 0.f, winsize) * SAMPLERATE; + timedisp = sc_clip(timedisp, 0.f, m_windowsize) * SAMPLERATE; dlybuf = m_dlybuf; fdelaylen = m_fdelaylen; @@ -466,7 +458,7 @@ void PitchShift_ar::m_signal_(int n, t_sample *const *in, float dsamp3, dsamp3_slope, ramp3, ramp3_slope; float dsamp4, dsamp4_slope, ramp4, ramp4_slope; float fdelaylen, d1, d2, frac, slope, samp_slope, startpos, - winsize, pchdisp, timedisp; + pchdisp, timedisp; long remain, nsmps, idelaylen, irdphase, irdphaseb, iwrphase, mask, idsamp; long counter, stage, framesize; @@ -476,11 +468,10 @@ void PitchShift_ar::m_signal_(int n, t_sample *const *in, nin = *in; pchratio = m_pitchratio; - winsize = m_windowsize; pchdisp = m_pitchdispersion; timedisp = m_timedispersion; - timedisp = sc_clip(timedisp, 0.f, winsize) * SAMPLERATE; + timedisp = sc_clip(timedisp, 0.f, m_windowsize) * SAMPLERATE; dlybuf = m_dlybuf; fdelaylen = m_fdelaylen; @@ -635,4 +626,4 @@ void PitchShift_ar::m_signal_(int n, t_sample *const *in, } -/* todo: does a control rate PitchShift make sense? */ +/* a control rate PitchShift doesn't make sense */ -- cgit v1.2.1