From d62e56f4df9594f72ce501f5e19c974fd18e7295 Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Tue, 22 Oct 2002 23:07:10 +0000 Subject: This commit was generated by cvs2svn to compensate for changes in r186, which included commits to RCS files with non-trunk default branches. svn path=/trunk/; revision=187 --- externals/grill/flext/source/flsndobj.cpp | 107 ++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 externals/grill/flext/source/flsndobj.cpp (limited to 'externals/grill/flext/source/flsndobj.cpp') diff --git a/externals/grill/flext/source/flsndobj.cpp b/externals/grill/flext/source/flsndobj.cpp new file mode 100644 index 00000000..1965b86b --- /dev/null +++ b/externals/grill/flext/source/flsndobj.cpp @@ -0,0 +1,107 @@ +#include "flsndobj.h" + +//namespace flext { + +flext_sndobj::flext_sndobj(): + inobjs(0),outobjs(0), + inobj(NULL),tmpobj(NULL),outobj(NULL), + smprt(0),blsz(0) +{} + +flext_sndobj::~flext_sndobj() +{ + ClearObjs(); +} + +void flext_sndobj::ClearObjs() +{ + FreeObjs(); + + if(inobj) { + for(int i = 0; i < inobjs; ++i) { delete inobj[i]; delete tmpobj[i]; } + delete[] inobj; inobj = NULL; + delete[] tmpobj; tmpobj = NULL; + inobjs = 0; + } + if(outobj) { + for(int i = 0; i < outobjs; ++i) delete outobj[i]; + delete[] outobj; outobj = NULL; outobjs = 0; + } +} + +void flext_sndobj::m_dsp(int n,t_sample *const *in,t_sample *const *out) +{ + // called on every rebuild of the dsp chain + + int i; + if(Blocksize() != blsz || Samplerate() != smprt) { + // block size or sample rate has changed... rebuild all objects + + ClearObjs(); + + blsz = Blocksize(); + smprt = Samplerate(); + + // set up sndobjs for inlets and outlets + inobj = new Inlet *[inobjs = CntInSig()]; + tmpobj = new SndObj *[inobjs]; + for(i = 0; i < inobjs; ++i) { + inobj[i] = new Inlet(in[i],blsz,smprt); + tmpobj[i] = new SndObj(NULL,blsz,smprt); + } + outobj = new Outlet *[outobjs = CntInSig()]; + for(i = 0; i < outobjs; ++i) outobj[i] = new Outlet(out[i],blsz,smprt); + + NewObjs(); + } + else { + // assign changed input/output vectors + + for(i = 0; i < inobjs; ++i) inobj[i]->SetBuf(in[i]); + for(i = 0; i < outobjs; ++i) outobj[i]->SetBuf(out[i]); + } +} + +void flext_sndobj::m_signal(int n,t_sample *const *in,t_sample *const *out) +{ + for(int i = 0; i < inobjs; ++i) *tmpobj[i] << *inobj[i]; + ProcessObjs(); +} + + +flext_sndobj::Inlet::Inlet(const t_sample *b,int vecsz,float sr): + SndIO(1,sizeof(t_sample)*8,NULL,vecsz,sr),buf(b) +{} + +short flext_sndobj::Inlet::Read() +{ + if(!m_error) { + for(m_vecpos = 0; m_vecpos < m_samples; m_vecpos++) + m_output[m_vecpos] = buf[m_vecpos]; + return 1; + } + else return 0; +} + +short flext_sndobj::Inlet::Write() { return 0; } + + +flext_sndobj::Outlet::Outlet(t_sample *b,int vecsz,float sr): + SndIO(1,sizeof(t_sample)*8,NULL,vecsz,sr),buf(b) +{} + +short flext_sndobj::Outlet::Read() { return 0; } + +short flext_sndobj::Outlet::Write() +{ + if(!m_error) { + if(m_IOobjs[0]) + for(m_vecpos = 0; m_vecpos < m_samples; m_vecpos++) + buf[m_vecpos] = m_IOobjs[0]->Output(m_vecpos); + return 1; + } + else return 0; +} + +//} // namespace flext + -- cgit v1.2.1