Jamoma API  0.6.0.a19
j.plug.in.cpp
1 /*
2  * j.plug.in=
3  * Plugtastic Input External
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 
11 #include "MaxAudioGraph.h"
12 #include "TTAudioGraphAPI.h"
13 
14 
15 // Data Structure for this object
16 typedef struct PlugIn {
17  Object obj;
18  TTAudioGraphObjectBasePtr audioGraphObject;
19  TTPtr audioGraphOutlet;
20  long attrSidechain;
21 };
22 typedef PlugIn* PlugInPtr;
23 
24 
25 // Prototypes for methods
26 PlugInPtr PlugInNew(SymbolPtr msg, AtomCount argc, AtomPtr argv);
27 void PlugInFree(PlugInPtr self);
28 void PlugInAssist(PlugInPtr self, void* b, long msg, long arg, char* dst);
29 TTErr PlugInSetup(PlugInPtr self);
30 MaxErr PlugInSetSidechain(PlugInPtr self, TTPtr attr, AtomCount ac, AtomPtr ap);
31 
32 
33 // Globals
34 static ClassPtr sPlugInClass;
35 
36 
37 /************************************************************************************/
38 // Main() Function
39 
40 int TTCLASSWRAPPERMAX_EXPORT main(void)
41 {
42  ClassPtr c;
43 
44  TTAudioGraphInit();
45  common_symbols_init();
46 
47  c = class_new((char*)"j.plug.in=", (method)PlugInNew, (method)PlugInFree, sizeof(PlugIn), (method)0L, A_GIMME, 0);
48 
49  class_addmethod(c, (method)PlugInSetup, "audio.setup", A_CANT, 0);
50  class_addmethod(c, (method)MaxAudioGraphReset, "audio.reset", A_CANT, 0);
51  class_addmethod(c, (method)MaxAudioGraphConnect, "audio.connect", A_OBJ, A_LONG, 0);
52  class_addmethod(c, (method)MaxAudioGraphDrop, "audio.drop", A_CANT, 0);
53  class_addmethod(c, (method)MaxAudioGraphObject, "audio.object", A_CANT, 0);
54  class_addmethod(c, (method)PlugInAssist, "assist", A_CANT, 0);
55  class_addmethod(c, (method)object_obex_dumpout, "dumpout", A_CANT, 0);
56 
57  CLASS_ATTR_LONG(c, "sidechain", 0, PlugIn, attrSidechain);
58  CLASS_ATTR_STYLE(c, "sidechain", 0, "onoff");
59  CLASS_ATTR_ACCESSORS(c, "sidechain", NULL, PlugInSetSidechain);
60 
61  class_register(_sym_box, c);
62  sPlugInClass = c;
63  return 0;
64 }
65 
66 
67 /************************************************************************************/
68 // Object Creation Method
69 
70 PlugInPtr PlugInNew(SymbolPtr msg, AtomCount argc, AtomPtr argv)
71 {
72  PlugInPtr self = PlugInPtr(object_alloc(sPlugInClass));
73  TTValue v;
74  TTErr err;
75 
76  if (self) {
77  v.setSize(2);
78  v.set(0, TT("plugtastic.input"));
79  v.set(1, TTUInt32(1));
80  err = TTObjectBaseInstantiate(TT("audio.object"), (TTObjectBasePtr*)&self->audioGraphObject, v);
81 
82  attr_args_process(self, argc, argv);
83  object_obex_store((void*)self, _sym_dumpout, (object*)outlet_new(self, NULL));
84  self->audioGraphOutlet = outlet_new((t_pxobject*)self, "audio.connect");
85  }
86  return self;
87 }
88 
89 // Memory Deallocation
90 void PlugInFree(PlugInPtr self)
91 {
92  TTObjectBaseRelease((TTObjectBasePtr*)&self->audioGraphObject);
93 }
94 
95 
96 /************************************************************************************/
97 // Methods bound to input/inlets
98 
99 // Method for Assistance Messages
100 void PlugInAssist(PlugInPtr self, void* b, long msg, long arg, char* dst)
101 {
102  if (msg==1) // Inlets
103  strcpy(dst, "multichannel audio connection and control messages");
104  else if (msg==2) { // Outlets
105  if (arg == 0)
106  strcpy(dst, "multichannel audio connection");
107  else
108  strcpy(dst, "dumpout");
109  }
110 }
111 
112 
113 TTErr PlugInSetup(PlugInPtr self)
114 {
115  Atom a[2];
116 
117  atom_setobj(a+0, ObjectPtr(self->audioGraphObject));
118  atom_setlong(a+1, 0);
119  outlet_anything(self->audioGraphOutlet, GENSYM("audio.connect"), 2, a);
120  return kTTErrNone;
121 }
122 
123 
124 MaxErr PlugInSetSidechain(PlugInPtr self, TTPtr attr, AtomCount ac, AtomPtr ap)
125 {
126  self->attrSidechain = atom_getlong(ap);
127  self->audioGraphObject->mKernel->setAttributeValue(TT("sidechain"), TTBoolean(self->attrSidechain));
128  return MAX_ERR_NONE;
129 }
bool TTBoolean
Boolean flag, same as Boolean on the Mac.
Definition: TTBase.h:167
TTErr TTObjectBaseRelease(TTObjectBasePtr *anObject)
DEPRECATED.
Provides all necessary definitions for AudioGraph API.
TTErr MaxAudioGraphReset(t_object *x, long vectorSize)
Clear the list of source objects from which this object will try to pull audio.
Base class for all first-class Jamoma objects.
Definition: TTObjectBase.h:109
TTErr MaxAudioGraphConnect(t_object *x, TTAudioGraphObjectBasePtr audioSourceObject, TTUInt16 sourceOutletNumber)
Method called when an upstream node is connected to this node.
#define TT
This macro is defined as a shortcut for doing a lookup in the symbol table.
Definition: TTSymbol.h:155
void * TTPtr
A generic pointer.
Definition: TTBase.h:248
void setSize(const TTUInt16 arg)
DEPRECATED.
Definition: TTValue.h:528
TTErr TTObjectBaseInstantiate(const TTSymbol className, TTObjectBasePtr *returnedObjectPtr, const TTValue arguments)
DEPRECATED.
A thin wrapper of Jamoma AudioGraph for use in the Cycling '74 Max/MSP environment.
TTErr MaxAudioGraphObject(t_object *x, TTAudioGraphObjectBasePtr *returnedAudioGraphObject)
Returns a pointer to the Jamoma Audio Graph object that is wrapped by this Max object.
void set(const TTUInt16 index, const T &anElementValue)
DEPRECATED.
Definition: TTValue.h:569
TTErr
Jamoma Error Codes Enumeration of error codes that might be returned by any of the TTBlue functions a...
Definition: TTBase.h:342
The TTAudioGraphObjectBase wraps a TTDSP object such that it is possible to build a dynamic graph of ...
std::uint32_t TTUInt32
32 bit unsigned integer
Definition: TTBase.h:178
TTErr MaxAudioGraphDrop(t_object *x, long inletNumber, t_object *sourceMaxObject, long sourceOutletNumber)
Method called when a connection from an upstream node is dropped.
No Error.
Definition: TTBase.h:343
[doxygenAppendixC_copyExample]
Definition: TTValue.h:34