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