Jamoma API  0.6.0.a19
op.cpp
1 /*
2  * op≈
3  * External object for Pd to perform basic mathematical operations on objects in a Jamoma AudioGraph dsp chain.
4  * Copyright © 2010 by Timothy Place
5  *
6  * License: This code is licensed under the terms of the "New BSD License"
7  * http://creativecommons.org/licenses/BSD/
8  */
9 
10 #include "PureAudioGraph.h"
11 
12 
13 // Data Structure for this object
14 struct Op {
15  Object obj;
16  TTAudioGraphObjectPtr audioGraphObject;
17  _outlet* outlet;
18  SymbolPtr attrOperator;
19  TTFloat32 attrOperand;
20 };
21 typedef Op* OpPtr;
22 
23 
24 // Prototypes for methods
25 extern "C" void setup_jcom_op0x3d(void);
26 OpPtr OpNew (SymbolPtr msg, AtomCount argc, AtomPtr argv);
27 void OpFree (OpPtr self);
28 TTErr OpReset (OpPtr self, long vectorSize);
29 TTErr OpSetup (OpPtr self);
30 TTErr OpConnect (OpPtr self, TTAudioGraphObjectPtr audioSourceObject, long sourceOutletNumber);
31 void OpSetOperator (OpPtr self, SymbolPtr value);
32 void OpSetOperand (OpPtr self, t_floatarg value);
33 
34 
35 // Globals
36 static ClassPtr sOpClass;
37 
38 
39 /************************************************************************************/
40 // Main() Function
41 
42 void setup_jcom_op0x3d(void)
43 {
44  TTAudioGraphInit();
45 
46  sOpClass = class_new(gensym("jcom_op="), (t_newmethod)OpNew, (t_method)OpFree, sizeof(Op), 0, A_GIMME, 0);
47 
48  class_addmethod(sOpClass, (t_method)OpReset, gensym("audio.reset"), A_CANT, 0);
49  class_addmethod(sOpClass, (t_method)OpSetup, gensym("audio.setup"), A_CANT, 0);
50  class_addmethod(sOpClass, (t_method)OpConnect, gensym("audio.connect"), A_POINTER, A_POINTER, 0);
51  class_addmethod(sOpClass, (t_method)OpSetOperator, gensym("operator"), A_SYMBOL, 0);
52  class_addmethod(sOpClass, (t_method)OpSetOperand, gensym("operand"), A_FLOAT, 0);
53 
54  class_sethelpsymbol(sOpClass, gensym("help-jcom_op=.pd"));
55 }
56 
57 
58 /************************************************************************************/
59 // Object Creation Method
60 
61 OpPtr OpNew(SymbolPtr msg, AtomCount argc, AtomPtr argv)
62 {
63  OpPtr self;
64  TTValue v;
65  TTErr err;
66 
67  self = OpPtr(pd_new(sOpClass));
68  if (self) {
69  self->outlet = outlet_new(SELF, gensym("audio.connect"));
70 
71  v.setSize(2);
72  v.set(0, TT("operator"));
73  v.set(1, TTUInt32(1));
74  err = TTObjectInstantiate(TT("audio.object"), (TTObjectPtr*)&self->audioGraphObject, v);
75 
76  if (!self->audioGraphObject->getUnitGenerator()) {
77  error("op≈: cannot load Jamoma DSP object");
78  return NULL;
79  }
80  }
81  return self;
82 }
83 
84 
85 // Memory Deallocation
86 void OpFree(OpPtr self)
87 {
88  TTObjectRelease((TTObjectPtr*)&self->audioGraphObject);
89 }
90 
91 
92 /************************************************************************************/
93 // Methods bound to input/inlets
94 
95 
96 TTErr OpReset(OpPtr self, long vectorSize)
97 {
98  return self->audioGraphObject->resetAudio();
99 }
100 
101 
102 TTErr OpSetup(OpPtr self)
103 {
104  Atom a[2];
105 
106  a[0].a_type = A_POINTER;
107  a[1].a_type = A_POINTER;
108  a[0].a_w.w_symbol = SymbolPtr(self->audioGraphObject);
109  a[1].a_w.w_symbol = 0;
110 
111  outlet_anything(self->outlet, gensym("audio.connect"), 2, a);
112  return kTTErrNone;
113 }
114 
115 
116 TTErr OpConnect(OpPtr self, TTAudioGraphObjectPtr audioSourceObject, TTPtrSizedInt sourceOutletNumber)
117 {
118  return self->audioGraphObject->connectAudio(audioSourceObject, sourceOutletNumber);
119 }
120 
121 
122 // ATTRIBUTE SETTERS
123 
124 void OpSetOperator(OpPtr self, SymbolPtr value)
125 {
126  self->attrOperator = value;
127  self->audioGraphObject->getUnitGenerator()->setAttributeValue(TT("Operator"), TT(self->attrOperator->s_name));
128 }
129 
130 
131 void OpSetOperand(OpPtr self, t_floatarg value)
132 {
133  self->attrOperand = value;
134  self->audioGraphObject->getUnitGenerator()->setAttributeValue(TT("Operand"), self->attrOperand);
135 }
136 
#define TT
This macro is defined as a shortcut for doing a lookup in the symbol table.
Definition: TTSymbol.h:155
void setSize(const TTUInt16 arg)
DEPRECATED.
Definition: TTValue.h:528
float TTFloat32
32 bit floating point number
Definition: TTBase.h:187
void set(const TTUInt16 index, const T &anElementValue)
DEPRECATED.
Definition: TTValue.h:569
long TTPtrSizedInt
An integer that is the same size as a pointer.
Definition: TTBase.h:240
TTErr
Jamoma Error Codes Enumeration of error codes that might be returned by any of the TTBlue functions a...
Definition: TTBase.h:342
std::uint32_t TTUInt32
32 bit unsigned integer
Definition: TTBase.h:178
No Error.
Definition: TTBase.h:343
[doxygenAppendixC_copyExample]
Definition: TTValue.h:34