flext  0.6.0
fldsp.h
Go to the documentation of this file.
1 /*
2 flext - C++ layer for Max and Pure Data externals
3 
4 Copyright (c) 2001-2017 Thomas Grill (gr@grrrr.org)
5 For information on usage and redistribution, and for a DISCLAIMER OF ALL
6 WARRANTIES, see the file, "license.txt," in this distribution.
7 */
8 
14 #ifndef __FLDSP_H
15 #define __FLDSP_H
16 
17 // include the header file declaring the base classes
18 #include "flext.h"
19 
20 #include "flpushns.h"
21 
22 // === flext_dsp ==================================================
23 
26 
27 
32  public flext_base
33 {
35 
37 
38 public:
39 
50  float Samplerate() const { return srate; }
52 
54  int Blocksize() const { return blksz; }
55 
57  t_sample *const *InSig() const {
58 #if MSP64
59  return inVec;
60 #else
61 
62  return vecs;
63 #endif
64  }
65 
67  t_sample *InSig(int i) const { return InSig()[i]; }
68 
70  // \todo cache that returned pointer
71  t_sample *const *OutSig() const
72  {
73  int i = CntInSig();
74 #if MSP64
75  return outVec;
76 #else
77  // in PD we have at least one actual dsp in vector
78 #if FLEXT_SYS == FLEXT_SYS_PD
79  return vecs+(i?i:1);
80 #elif FLEXT_SYS == FLEXT_SYS_MAX
81  return vecs+i;
82 #else
83 #error
84 #endif
85 #endif
86  }
87 
89  t_sample *OutSig(int i) const { return OutSig()[i]; }
90 
92  typedef t_sample *t_signalvec;
93 
95 
96 // --- inheritable virtual methods --------------------------------
97 
108  virtual bool CbDsp();
109 
113  virtual void CbSignal();
114 
115 
122  virtual void m_dsp(int n,t_signalvec const *insigs,t_signalvec const *outsigs);
123 
130  virtual void m_signal(int n,t_sample *const *insigs,t_sample *const *outsigs);
131 
133 
134 
140 // --- inlet/outlet stuff -----------------------------------------
141 
145  void AddInSignal(int m = 1) { AddInlet(xlet_sig,m); }
146 
150  void AddInSignal(const char *desc) { AddInlet(xlet_sig,1,desc); }
151 
155  void AddOutSignal(int m = 1) { AddOutlet(xlet_sig,m); }
156 
160  void AddOutSignal(const char *desc) { AddOutlet(xlet_sig,1,desc); }
161 
163 
165 
166 protected:
167 
169 
170  virtual void Exit();
171 
172 private:
173 
174  // not static, could be different in different patchers..
175  float srate;
176  int blksz;
177 
178 
179 #if MSP64
180  t_signalvec *inVec;
181  t_signalvec *outVec;
182 #else
184 #endif
185 
186  // setup function
187  static void Setup(t_classid c);
188 
189 #if FLEXT_SYS == FLEXT_SYS_PD
190  static bool cb_enable(flext_base *c,float &on);
191  bool dspon;
192 #endif
193 
194  static inline flext_dsp *thisObject(flext_hdr *c) { return FLEXT_CAST<flext_dsp *>(c->data); }
195 
196  // dsp stuff
197 #if MSP64
198  void SetupDsp64(flext_hdr *x, t_object *dsp64, short *count, double samplerate, long maxvectorsize, long flags);
199  static void dspmeth64(flext_hdr *x, t_object *dsp64, double **ins, long numins, double **outs, long numouts, long sampleframes, long flags, void *userparam);
200 #else // Max 32-bits or Pd
201  void SetupDsp(t_signal **sp);
202  static t_int *dspmeth(t_int *w);
203 #endif
204 };
205 
206 #include "flpopns.h"
207 
208 #endif
flext.h
This is the main flext include file.
flext_base::AddOutlet
void AddOutlet(xlettype tp, int mult=1, const char *desc=NULL)
Add one or more outlet(s)
Definition: flxlet.cpp:55
flext_dsp::AddInSignal
void AddInSignal(int m=1)
Add signal inlet(s)
Definition: fldsp.h:145
flext_dsp::t_signalvec
t_sample * t_signalvec
typedef describing a signal vector
Definition: fldsp.h:92
flext_base
Definition: flclass.h:58
flext_base::Exit
virtual void Exit()
Deallocate all kinds of stuff.
Definition: flext.cpp:88
FLEXT_HEADER_S
#define FLEXT_HEADER_S(NEW_CLASS, PARENT_CLASS, SETUPFUN)
Flext class header with setup function.
Definition: fldefs_hdr.h:47
flext_dsp::InSig
t_sample * InSig(int i) const
returns input vector
Definition: fldsp.h:67
flpopns.h
flext_base::Setup
static void Setup(t_classid c)
Definition: flext.cpp:182
flext_base::AddInlet
void AddInlet(xlettype tp, int mult=1, const char *desc=NULL)
Add one or more inlet(s)
Definition: flxlet.cpp:43
flext_dsp::Blocksize
int Blocksize() const
returns current block (aka vector) size
Definition: fldsp.h:54
flext_dsp::AddOutSignal
void AddOutSignal(const char *desc)
Add signal outlet (with description)
Definition: fldsp.h:160
flext_dsp
Flext dsp enabled base object.
Definition: fldsp.h:31
FLEXT_TEMPLATE
#define FLEXT_TEMPLATE
Definition: flprefix.h:462
flext_dsp::AddInSignal
void AddInSignal(const char *desc)
Add signal inlet (with description)
Definition: fldsp.h:150
FLEXT_SHARE
#define FLEXT_SHARE
Definition: flprefix.h:425
flext_dsp::InSig
t_sample *const * InSig() const
returns array of input vectors (CntInSig() vectors)
Definition: fldsp.h:57
flext_dsp::OutSig
t_sample *const * OutSig() const
returns array of output vectors (CntOutSig() vectors)
Definition: fldsp.h:71
flpushns.h
flext_dsp::vecs
t_signalvec * vecs
Definition: fldsp.h:183
flext_dsp::srate
float srate
Definition: fldsp.h:175
flext_base::CntInSig
int CntInSig() const
Get number of signal inlets.
Definition: flclass.h:181
FLEXT_CLASSDEF
#define FLEXT_CLASSDEF(CL)
Definition: flprefix.h:390
flext_dsp::thisObject
static flext_dsp * thisObject(flext_hdr *c)
Definition: fldsp.h:194
flext_dsp
flext_dsp flext_dsp
Definition: fldsp.h:24
flext_dsp::blksz
int blksz
Definition: fldsp.h:176
FLEXT_TEMPINST
#define FLEXT_TEMPINST(fun)
Definition: flprefix.h:464
flext_dsp::OutSig
t_sample * OutSig(int i) const
returns output vector
Definition: fldsp.h:89
flext_hdr
The obligatory PD or Max/MSP object header.
Definition: flbase.h:38
flext_dsp::AddOutSignal
void AddOutSignal(int m=1)
Add signal outlet(s)
Definition: fldsp.h:155