fldsp.h 3.14 KB
Newer Older
thomas's avatar
thomas committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* 

flext - C++ layer for Max/MSP and pd (pure data) externals

Copyright (c) 2001,2002 Thomas Grill (xovo@gmx.net)
For information on usage and redistribution, and for a DISCLAIMER OF ALL
WARRANTIES, see the file, "license.txt," in this distribution.  

*/

/*! \file fldsp.h
    \brief Declares the flext dsp class
    
*/

#ifndef __FLDSP_H
#define __FLDSP_H

thomas's avatar
thomas committed
19
// include the header file declaring the base classes
thomas's avatar
thomas committed
20
#include "flext.h"
thomas's avatar
thomas committed
21
22
23
24


// === flext_dsp ==================================================

thomas's avatar
thomas committed
25
/*! \brief Flext dsp enabled base object
thomas's avatar
thomas committed
26
27
28
29
30
31
32
33
*/
class flext_dsp:
	public flext_base
{
	FLEXT_HEADER_S(flext_dsp,flext_base,Setup)
	
public:

thomas's avatar
thomas committed
34
35
36
37
38
/*!	\defgroup FLEXT_C_DSP Flext basic dsp functionality

	@{ 
*/

thomas's avatar
thomas committed
39
40
41
	//! returns current sample rate
	float Samplerate() const { return srate; }
	
thomas's avatar
thomas committed
42
	//! returns current block (aka vector) size
thomas's avatar
thomas committed
43
44
	int Blocksize() const { return blksz; }
	
thomas's avatar
thomas committed
45
46
47
	/*! \brief returns number of audio system input channels
		\bug Doesn't work in Max/MSP - is always 0
	*/
thomas's avatar
thomas committed
48
	int ChannelsIn() const { return chnsin; }
thomas's avatar
thomas committed
49
50
51
52

	/*! \brief returns number of audio system output channels
		\bug Doesn't work in Max/MSP - is always 0
	*/
thomas's avatar
thomas committed
53
54
	int ChannelsOut() const { return chnsout; }
	
thomas's avatar
thomas committed
55
56
//!	@} 

thomas's avatar
thomas committed
57
58
59

// --- inheritable virtual methods --------------------------------

thomas's avatar
thomas committed
60
61
62
63
/*!	\defgroup FLEXT_C_VIRTUAL_DSP Flext virtual dsp functions

	@{ 
*/
thomas's avatar
thomas committed
64
	/*! \brief Called on every dsp init.
thomas's avatar
thomas committed
65
66
67
68
69
		\note Don't expect any valid data in the signal vectors!

		\param n: frames (aka samples) in one signal vector
		\param insigs: array of input vectors  (get number with function CntInSig())
		\param outsigs: array of output vectors  (get number with function CntOutSig())
thomas's avatar
thomas committed
70
71
72
	*/
	virtual void m_dsp(int n,t_sample *const *insigs,t_sample *const *outsigs);

thomas's avatar
thomas committed
73
74
75
76
77
	/*! \brief Called with every signal vector - here you do the dsp calculation

		\param n: frames (aka samples) in one signal vector
		\param insigs: array of input vectors  (get number with function CntInSig())
		\param outsigs: array of output vectors  (get number with function CntOutSig())
thomas's avatar
thomas committed
78
79
80
81
	*/
	virtual void m_signal(int n,t_sample *const *insigs,t_sample *const *outsigs) = 0;

#ifndef MAXMSP
thomas's avatar
thomas committed
82
83
84
	/*! \brief called with "enable" message: pauses/resumes dsp
		\note PD only - implicitely defined in MaxMSP
	*/
thomas's avatar
thomas committed
85
86
87
	virtual void m_enable(bool on);
#endif

thomas's avatar
thomas committed
88
89
90
91
92
93
94
95
//!	@} 


/*!	\defgroup FLEXT_C_INOUT_DSP Flext dsp in-/outlet functions
	\note These must be called in the class' constructor

	@{ 
*/
thomas's avatar
thomas committed
96
97
// --- inlet/outlet stuff -----------------------------------------	

thomas's avatar
thomas committed
98
99
100
	/*! \brief Add signal inlet(s)
		\param m Number of inlets to add
	*/
thomas's avatar
thomas committed
101
102
	void AddInSignal(int m = 1) { AddInlet(xlet::tp_sig,m); }

thomas's avatar
thomas committed
103
104
105
	/*! \brief Add signal outlet(s)
		\param m Number of inlets to add
	*/
thomas's avatar
thomas committed
106
107
	void AddOutSignal(int m = 1) { AddOutlet(xlet::tp_sig,m); }

thomas's avatar
thomas committed
108
109
//!	@} 

thomas's avatar
thomas committed
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140

protected:
	
	flext_dsp();
	~flext_dsp();
	
private:

	// not static, could be different in different patchers..
	float srate; 
	int blksz;
	int chnsin,chnsout;

	// setup function
	static void Setup(t_class *c);

	// callback functions

	static void cb_dsp(t_class *c,t_signal **s);
#ifndef MAXMSP
	static void cb_enable(t_class *c,t_flint on);
	bool dspon;
#endif

	// dsp stuff

	static t_int *dspmeth(t_int *w); 
	t_sample **invecs,**outvecs;
};

#endif