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-2015 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 
31 class FLEXT_SHARE FLEXT_CLASSDEF(flext_dsp):
32  public flext_base
33 {
34  FLEXT_HEADER_S(FLEXT_CLASSDEF(flext_dsp),flext_base,Setup)
35 
36  friend class FLEXT_SHARE FLEXT_TEMPINST(FLEXT_CLASSDEF(flext_base));
37 
38 public:
39 
50  float Samplerate() const { return srate; }
52 
54  int Blocksize() const { return blksz; }
55 
57  t_sample *const *InSig() const { return vecs; }
58 
60  t_sample *InSig(int i) const { return InSig()[i]; }
61 
63  // \todo cache that returned pointer
64  t_sample *const *OutSig() const
65  {
66  int i = CntInSig();
67  // in PD we have at least one actual dsp in vector
68 #if FLEXT_SYS == FLEXT_SYS_PD
69  return vecs+(i?i:1);
70 #elif FLEXT_SYS == FLEXT_SYS_MAX
71  return vecs+i;
72 #else
73 #error
74 #endif
75  }
76 
78  t_sample *OutSig(int i) const { return OutSig()[i]; }
79 
81  typedef t_sample *t_signalvec;
82 
84 
85 // --- inheritable virtual methods --------------------------------
86 
97  virtual bool CbDsp();
98 
102  virtual void CbSignal();
103 
104 
111  virtual void m_dsp(int n,t_signalvec const *insigs,t_signalvec const *outsigs);
112 
119  virtual void m_signal(int n,t_sample *const *insigs,t_sample *const *outsigs);
120 
122 
123 
129 // --- inlet/outlet stuff -----------------------------------------
130 
134  void AddInSignal(int m = 1) { AddInlet(xlet_sig,m); }
135 
139  void AddInSignal(const char *desc) { AddInlet(xlet_sig,1,desc); }
140 
144  void AddOutSignal(int m = 1) { AddOutlet(xlet_sig,m); }
145 
149  void AddOutSignal(const char *desc) { AddOutlet(xlet_sig,1,desc); }
150 
152 
154 
155 protected:
156 
157  FLEXT_CLASSDEF(flext_dsp)();
158 
159  virtual void Exit();
160 
161 private:
162 
163  // not static, could be different in different patchers..
164  float srate;
165  int blksz;
166  t_signalvec *vecs;
167 
168  // setup function
169  static void Setup(t_classid c);
170 
171 #if FLEXT_SYS == FLEXT_SYS_PD
172  static bool cb_enable(flext_base *c,float &on);
173  bool dspon;
174 #endif
175 
176  static inline flext_dsp *thisObject(flext_hdr *c) { return FLEXT_CAST<flext_dsp *>(c->data); }
177 
178  void SetupDsp(t_signal **sp);
179 
180  // dsp stuff
181  static t_int *dspmeth(t_int *w);
182 };
183 
184 #include "flpopns.h"
185 
186 #endif
void AddOutSignal(int m=1)
Add signal outlet(s)
Definition: fldsp.h:144
#define FLEXT_HEADER_S(NEW_CLASS, PARENT_CLASS, SETUPFUN)
Flext class header with setup function.
Definition: fldefs_hdr.h:47
This is the main flext include file.
Definition: flclass.h:58
float srate
Definition: fldsp.h:164
t_sample *const * InSig() const
returns array of input vectors (CntInSig() vectors)
Definition: fldsp.h:57
static flext_dsp * thisObject(flext_hdr *c)
Definition: fldsp.h:176
t_signalvec * vecs
Definition: fldsp.h:166
int blksz
Definition: fldsp.h:165
void AddOutSignal(const char *desc)
Add signal outlet (with description)
Definition: fldsp.h:149
t_sample * InSig(int i) const
returns input vector
Definition: fldsp.h:60
void AddInSignal(int m=1)
Add signal inlet(s)
Definition: fldsp.h:134
#define FLEXT_TEMPINST(fun)
Definition: flprefix.h:457
void AddInSignal(const char *desc)
Add signal inlet (with description)
Definition: fldsp.h:139
#define FLEXT_TEMPLATE
Definition: flprefix.h:455
t_sample * OutSig(int i) const
returns output vector
Definition: fldsp.h:78
Flext dsp enabled base object.
Definition: fldsp.h:31
The obligatory PD or Max/MSP object header.
Definition: flbase.h:38
int Blocksize() const
returns current block (aka vector) size
Definition: fldsp.h:54
t_sample *const * OutSig() const
returns array of output vectors (CntOutSig() vectors)
Definition: fldsp.h:64
#define FLEXT_SHARE
Definition: flprefix.h:418
#define FLEXT_CLASSDEF(CL)
Definition: flprefix.h:383
bool dspon
Definition: fldsp.h:173
t_sample * t_signalvec
typedef describing a signal vector
Definition: fldsp.h:81