From 6a2cccf403ac6045d987eb771b5ac904a33b122a Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Wed, 19 Mar 2003 04:36:44 +0000 Subject: "" svn path=/trunk/; revision=482 --- externals/grill/flext/source/flbuf.cpp | 10 +++++++--- externals/grill/flext/source/fldefs.h | 2 ++ externals/grill/flext/source/flsupport.h | 18 +++++++++++++++--- 3 files changed, 24 insertions(+), 6 deletions(-) (limited to 'externals/grill/flext/source') diff --git a/externals/grill/flext/source/flbuf.cpp b/externals/grill/flext/source/flbuf.cpp index 633f0d45..f7672b75 100644 --- a/externals/grill/flext/source/flbuf.cpp +++ b/externals/grill/flext/source/flbuf.cpp @@ -176,20 +176,21 @@ bool flext::buffer::Update() #endif } -void flext::buffer::Frames(int fr,bool keep) +void flext::buffer::Frames(int fr,bool keep,bool zero) { #if FLEXT_SYS == FLEXT_SYS_PD + // is this function guaranteed to keep memory and set rest to zero? ::garray_resize(arr,(float)fr); Update(); #elif FLEXT_SYS == FLEXT_SYS_MAX t_sample *tmp = NULL; - int sz = frames; + int sz = frames; if(fr < sz) sz = fr; if(keep) { // copy buffer data to tmp storage tmp = new t_sample[sz]; - if(tmp) + if(tmp) CopySamples(data,tmp,sz); else error("flext::buffer - not enough memory for keeping buffer~ contents"); @@ -210,7 +211,10 @@ void flext::buffer::Frames(int fr,bool keep) // copy data back CopySamples(tmp,data,sz); delete[] tmp; + if(zero && sz < fr) ZeroSamples(data+sz,fr-sz); } + else + if(zero) ZeroSamples(data,fr); #else #error #endif diff --git a/externals/grill/flext/source/fldefs.h b/externals/grill/flext/source/fldefs.h index 7ba0f1b2..da6d995c 100644 --- a/externals/grill/flext/source/fldefs.h +++ b/externals/grill/flext/source/fldefs.h @@ -67,6 +67,8 @@ FLEXT_REALHDR_S(NEW_CLASS, PARENT_CLASS, SETUPFUN) // ==================================================================================== /*! \defgroup FLEXT_D_INSTANCE Class instantiation + \note The name of your class is of importance! It must be the same as the external + \note (excluded an eventual ~ (tilde)) */ diff --git a/externals/grill/flext/source/flsupport.h b/externals/grill/flext/source/flsupport.h index b76437cc..c9235d95 100644 --- a/externals/grill/flext/source/flsupport.h +++ b/externals/grill/flext/source/flsupport.h @@ -129,22 +129,34 @@ public: //! Get frame count int Frames() const { return frames; } //! Set frame count - void Frames(int fr,bool keep = false); + void Frames(int fr,bool keep = false,bool zero = true); //! Graphic auto refresh interval void SetRefrIntv(float intv); protected: + //! buffer name const t_symbol *sym; + //! array holding audio data t_sample *data; - int chns,frames; + //! number of audio channels + int chns; + //! number of frames (multiplied by chns for the number of samples) + int frames; #if FLEXT_SYS == FLEXT_SYS_PD + //! pointer to the PD array structure t_garray *arr; + //! update interval float interval; - bool isdirty,ticking; + //! flag signaling that the data has been changed + bool isdirty; + //! flag showing that the update clock is active + bool ticking; + //! update clock t_clock *tick; private: + //! update clock callback static void cb_tick(buffer *b); #endif }; -- cgit v1.2.1