flext 0.6.2
fldsp.h
Go to the documentation of this file.
1/*
2flext - C++ layer for Max and Pure Data externals
3
4Copyright (c) 2001-2017 Thomas Grill (gr@grrrr.org)
5For information on usage and redistribution, and for a DISCLAIMER OF ALL
6WARRANTIES, 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
38public:
39
51 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
166protected:
167
169
170 virtual void Exit();
171
172private:
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
Definition: flclass.h:60
virtual void Exit()
Deallocate all kinds of stuff.
Definition: flext.cpp:88
static void Setup(t_classid c)
Definition: flext.cpp:182
Flext dsp enabled base object.
Definition: fldsp.h:33
static flext_dsp * thisObject(flext_hdr *c)
Definition: fldsp.h:194
t_signalvec * vecs
Definition: fldsp.h:183
bool dspon
Definition: fldsp.h:191
float srate
Definition: fldsp.h:175
int blksz
Definition: fldsp.h:176
flext_dsp flext_dsp
Definition: fldsp.h:25
This is the main flext include file.
#define FLEXT_TEMPINST(fun)
Definition: flprefix.h:464
#define FLEXT_SHARE
Definition: flprefix.h:425
#define FLEXT_CLASSDEF(CL)
Definition: flprefix.h:390
#define FLEXT_TEMPLATE
Definition: flprefix.h:462
void AddOutSignal(const char *desc)
Add signal outlet (with description)
Definition: fldsp.h:160
void AddInSignal(const char *desc)
Add signal inlet (with description)
Definition: fldsp.h:150
void AddOutSignal(int m=1)
Add signal outlet(s)
Definition: fldsp.h:155
void AddInSignal(int m=1)
Add signal inlet(s)
Definition: fldsp.h:145
int Blocksize() const
returns current block (aka vector) size
Definition: fldsp.h:54
t_sample * t_signalvec
typedef describing a signal vector
Definition: fldsp.h:92
t_sample *const * InSig() const
returns array of input vectors (CntInSig() vectors)
Definition: fldsp.h:57
t_sample *const * OutSig() const
returns array of output vectors (CntOutSig() vectors)
Definition: fldsp.h:71
t_sample * OutSig(int i) const
returns output vector
Definition: fldsp.h:89
t_sample * InSig(int i) const
returns input vector
Definition: fldsp.h:67
void AddInlet(int tp, int mult=1, const char *desc=NULL)
Add one or more inlet(s)
Definition: flxlet.cpp:43
void AddOutlet(int tp, int mult=1, const char *desc=NULL)
Add one or more outlet(s)
Definition: flxlet.cpp:55
int CntInSig() const
Get number of signal inlets.
Definition: flclass.h:181
#define FLEXT_HEADER_S(NEW_CLASS, PARENT_CLASS, SETUPFUN)
Flext class header with setup function.
Definition: fldefs_hdr.h:47
The obligatory PD or Max/MSP object header.
Definition: flbase.h:39