/usr/include/faust/osc/RootNode.h is in faust-common 0.9.95~repack1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | /*
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 __RootNode__
#define __RootNode__
#include <map>
#include <string>
#include <vector>
#include "faust/osc/MessageDriven.h"
namespace oscfaust
{
class OSCIO;
class RootNode;
typedef class SMARTP<RootNode> SRootNode;
/**
* an alias target includes a map to rescale input values to output values
* and a target osc address. The input values can be given in reversed order
* to reverse the control
*/
struct aliastarget
{
float fMinIn;
float fMaxIn;
float fMinOut;
float fMaxOut;
std::string fTarget; // the real osc address
aliastarget(const char* address, float imin, float imax, float omin, float omax)
: fMinIn(imin), fMaxIn(imax), fMinOut(omin), fMaxOut(omax), fTarget(address) {}
aliastarget(const aliastarget& t)
: fMinIn(t.fMinIn), fMaxIn(t.fMaxIn), fMinOut(t.fMinOut), fMaxOut(t.fMaxOut), fTarget(t.fTarget) {}
float scale(float x) const
{
if (fMinIn < fMaxIn) {
// increasing control
float z = (x < fMinIn) ? fMinIn : (x > fMaxIn) ? fMaxIn : x;
return fMinOut + (z-fMinIn)*(fMaxOut-fMinOut)/(fMaxIn-fMinIn);
} else if (fMinIn > fMaxIn) {
// reversed control
float z = (x < fMaxIn) ? fMaxIn : (x > fMinIn) ? fMinIn : x;
return fMinOut + (fMinIn-z)*(fMaxOut-fMinOut)/(fMinIn-fMaxIn);
} else {
// no control !
return (fMinOut+fMaxOut)/2.0;
}
}
};
//--------------------------------------------------------------------------
/*!
\brief a faust root node
A Faust root node handles the \c 'hello' message and provides support
for incoming osc signal data.
*/
class RootNode : public MessageDriven
{
int *fUPDIn, *fUDPOut, *fUDPErr; // the osc port numbers (required by the hello method)
OSCIO* fIO; // an OSC IO controler
std::map<std::string, std::vector<aliastarget> > fAliases;
void processAlias(const std::string& address, float val);
protected:
RootNode(const char *name, OSCIO* io = 0) : MessageDriven(name, ""), fUPDIn(0), fUDPOut(0), fUDPErr(0), fIO(io) {}
virtual ~RootNode() {}
public:
static SRootNode create(const char* name, OSCIO* io = 0) { return new RootNode(name, io); }
virtual void processMessage(const Message* msg);
virtual bool accept(const Message* msg);
virtual void get(unsigned long ipdest) const;
virtual void get(unsigned long ipdest, const std::string& what) const;
void addAlias(const char* alias, const char* address, float imin, float imax, float omin, float omax);
bool acceptSignal(const Message* msg); ///< handler for signal data
void hello(unsigned long ipdest) const; ///< handler for the 'hello' message
void setPorts(int* in, int* out, int* err);
std::vector<std::string> getAliases(const std::string& address);
};
} // end namespoace
#endif
|