X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/1059e1cc0c2ecfa237406949aa26155b6a5b9154..66f23d4fabf89ad09adbd4dfc15ac6b5b2b7da83:/interpreter/preprocessor/faust-0.9.47mr3/architecture/osclib/faust/src/nodes/FaustNode.h diff --git a/interpreter/preprocessor/faust-0.9.47mr3/architecture/osclib/faust/src/nodes/FaustNode.h b/interpreter/preprocessor/faust-0.9.47mr3/architecture/osclib/faust/src/nodes/FaustNode.h new file mode 100644 index 0000000..8dc645b --- /dev/null +++ b/interpreter/preprocessor/faust-0.9.47mr3/architecture/osclib/faust/src/nodes/FaustNode.h @@ -0,0 +1,91 @@ +/* + + Copyright (C) 2011 Grame + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France + research@grame.fr + +*/ + + +#ifndef __FaustNode__ +#define __FaustNode__ + +#include +#include + +#include "MessageDriven.h" + +namespace oscfaust +{ + +class FaustNode; +typedef class SMARTP SFaustNode; + +/** + * map (rescale) input values to output values + */ +struct mapping +{ + const float fMinIn; + const float fMaxIn; + const float fMinOut; + const float fMaxOut; + const float fScale; + + mapping(float imin, float imax, float omin, float omax) : fMinIn(imin), fMaxIn(imax), + fMinOut(omin), fMaxOut(omax), + fScale( (fMaxOut-fMinOut)/(fMaxIn-fMinIn) ) {} + float scale (float x) { float z = (x < fMinIn) ? fMinIn : (x > fMaxIn) ? fMaxIn : x; return fMinOut + (z - fMinIn) * fScale; } +}; + + +//-------------------------------------------------------------------------- +/*! + \brief a faust node is a terminal node and represents a faust parameter controler +*/ +class FaustNode : public MessageDriven +{ + float * fZone; // the parameter memory zone + mapping fMapping; + + bool store (float val); + + protected: + FaustNode(const char *name, float* zone, float init, float min, float max, const char* prefix) + : MessageDriven (name, prefix), fZone(zone), fMapping(min, max, min, max) + { *zone = init; } + + FaustNode(const char *name, float* zone, float imin, float imax, float init, float min, float max, const char* prefix) + : MessageDriven (name, prefix), fZone(zone), fMapping(imin, imax, min, max) + { *zone = init; } + virtual ~FaustNode() {} + + public: + static SFaustNode create (const char* name, float* zone, float init, float min, float max, const char* prefix) + { return new FaustNode(name, zone, init, min, max, prefix); } + static SFaustNode create (const char* name, float* zone, float imin, float imax, float init, float min, float max, const char* prefix) + { return new FaustNode(name, zone, imin, imax, init, min, max, prefix); } + + + virtual bool accept( const Message* msg ); ///< handler for the 'accept' message + virtual void get (unsigned long ipdest) const; ///< handler for the 'get' message +}; + +} // end namespoace + +#endif