fldsp.h 3.2 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
*/
thomas's avatar
thomas committed
27
28
class flext_dsp:
	public flext_base
thomas's avatar
thomas committed
29
30
31
32
33
{
	FLEXT_HEADER_S(flext_dsp,flext_base,Setup)
	
public:

thomas's avatar
thomas committed
34
35
36
37
38
39
/*!	\defgroup FLEXT_DSP Flext dsp class

	@{ 
*/

/*!	\defgroup FLEXT_C_DSP Basic dsp functionality
thomas's avatar
thomas committed
40
41
42
43

	@{ 
*/

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

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

thomas's avatar
thomas committed
62
63
64

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

thomas's avatar
thomas committed
65
/*!	\defgroup FLEXT_C_DSP_VIRTUAL Flext virtual dsp functions
thomas's avatar
thomas committed
66
67
68

	@{ 
*/
thomas's avatar
thomas committed
69
	/*! \brief Called on every dsp init.
thomas's avatar
thomas committed
70
71
72
73
74
		\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
75
76
77
	*/
	virtual void m_dsp(int n,t_sample *const *insigs,t_sample *const *outsigs);

thomas's avatar
thomas committed
78
79
80
81
82
	/*! \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
83
	*/
thomas's avatar
thomas committed
84
	virtual void m_signal(int n,t_sample *const *insigs,t_sample *const *outsigs);
thomas's avatar
thomas committed
85
86

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

thomas's avatar
thomas committed
93
94
95
//!	@} 


thomas's avatar
thomas committed
96
/*!	\defgroup FLEXT_C_DSP_INOUT Flext dsp in-/outlet functions
thomas's avatar
thomas committed
97
98
99
100
	\note These must be called in the class' constructor

	@{ 
*/
thomas's avatar
thomas committed
101
102
// --- inlet/outlet stuff -----------------------------------------	

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

thomas's avatar
thomas committed
108
109
110
	/*! \brief Add signal outlet(s)
		\param m Number of inlets to add
	*/
thomas's avatar
thomas committed
111
112
	void AddOutSignal(int m = 1) { AddOutlet(xlet::tp_sig,m); }

thomas's avatar
thomas committed
113
114
//!	@} 

thomas's avatar
thomas committed
115
//!	@} 
thomas's avatar
thomas committed
116
117
118

protected:
	
thomas's avatar
thomas committed
119
120
	flext_dsp();
	virtual ~flext_dsp();
thomas's avatar
thomas committed
121

thomas's avatar
thomas committed
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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