Jamoma API  0.6.0.a19
PlugtasticAUEffectGraph.h
1 #ifndef __PlugtasticAUEffectGraph_h__
2 #define __PlugtasticAUEffectGraph_h__
3 
4 
5 #include "PlugtasticAPI.h"
6 #include "AUEffectBase.h"
7 
8 
9 class PlugtasticAUEffectGraph {
10 
11  TTAudioGraphObjectPtr obj0;
12  TTAudioGraphObjectPtr obj1;
13  TTAudioGraphObjectPtr obj2;
14  TTAudioGraphObjectPtr obj3;
15 
17  TTAudioSignalPtr mAudioSignal;
18 
19 public:
20 
21  TTUInt32 mVectorSize;
22 // TTUInt32 mNumInputChannels;
23 
24 
25  PlugtasticAUEffectGraph() :
26  obj0(NULL),
27  obj1(NULL),
28  obj2(NULL),
29  obj3(NULL),
30  mAudioSignal(NULL)
31  {
32 // With the initial transition to Jamoma, we are sharing the binaries between Jamoma and compiled plug-ins
33 // But we need to ultimately isolate these...
34 // PlugtasticInit("/Library/Application Support/Plugtastic");
35  PlugtasticInit();
36 
37  TTObjectBaseInstantiate(TT("audio.object"), (TTObjectBasePtr*)&obj0, TTValue(TT("plugtastic.output")));
38 // TODO: the 'filter' object doesn't exist because it is a class that is buried inside of an extern definition
39 // rather than as a proper extension class !!!
40 // TTObjectBaseInstantiate(TT("audio.object"), (TTObjectBasePtr*)&obj1, TTValue(TT("filter")));
41  TTObjectBaseInstantiate(TT("audio.object"), (TTObjectBasePtr*)&obj1, TTValue(TT("overdrive")));
42  TTObjectBaseInstantiate(TT("audio.object"), (TTObjectBasePtr*)&obj2, TTValue(TT("degrade")));
43 
44  // TTObjectBaseInstantiate(TT("audio.object"), (TTObjectBasePtr*)&obj3, TTValue(TT("plugtastic.input")))
45  TTObjectBaseInstantiate(TT("audio.object"), (TTObjectBasePtr*)&obj3, TTValue(TT("audio.generator")));
46  obj3->addAudioFlag(kTTAudioGraphGenerator);
47 
48  obj2->connectAudio(obj3);
49  obj1->connectAudio(obj2);
50  obj0->connectAudio(obj1);
51 
52 
53  obj1->getUnitGenerator()->setAttributeValue(TT("drive"), 9.9);
54  obj2->getUnitGenerator()->setAttributeValue(TT("bitdepth"), 24);
55  }
56 
57 
58  virtual ~PlugtasticAUEffectGraph()
59  {
64  }
65 
66 
67  void process(const AudioBufferList* inBufferList, AudioBufferList* outBufferList, const AudioBufferList* sidechainInBufferList, AudioBufferList* sidechainOutBufferList)
68  {
69  TTUInt32 channel;
70  TTUInt32 inChannelCount = inBufferList->mNumberBuffers;
71  TTUInt32 outChannelCount = outBufferList->mNumberBuffers;
72 
73  // copy the input
74  obj3->getUnitGenerator()->setAttributeValue(TT("vectorSize"), mVectorSize);
75  obj3->getUnitGenerator()->setAttributeValue(TT("maxNumChannels"), inChannelCount);
76  obj3->getUnitGenerator()->setAttributeValue(TT("numChannels"), inChannelCount);
77  obj3->setOutputNumChannels(0, inChannelCount);
78 
79  // TODO: sidechain handling
80 #ifdef SIDECHAIN_INPUT
81 
82 #endif
83 
84 
85 
86 // TODO: All of this channel-related stuff can be set once at setup -- it doesn't need to be called every vector!
87 
88  for (channel=0; channel != inChannelCount; channel++)
89  TTAudioGraphGeneratorPtr(obj3->getUnitGenerator())->mBuffer->setVector(channel, mVectorSize, (TTFloat32*)inBufferList->mBuffers[channel].mData);
90 
91  // run the graph
92  mInitData.vectorSize = mVectorSize;
93 
94  obj0->lockProcessing();
95  obj0->preprocess(mInitData);
96  obj0->process(mAudioSignal);
97  obj0->unlockProcessing();
98 
99  // copy the output
100  for (channel=0; channel != outChannelCount; channel++)
101  mAudioSignal->getVector(channel, mVectorSize, (TTFloat32*)outBufferList->mBuffers[channel].mData);
102  }
103 
104 };
105 
106 #endif // #ifndef __PlugtasticAUEffectGraph_h__
107 
108 
TTErr TTObjectBaseRelease(TTObjectBasePtr *anObject)
DEPRECATED.
Base class for all first-class Jamoma objects.
Definition: TTObjectBase.h:109
This object is an audio generator, and do not expect audio input.
Definition: TTAudioGraph.h:73
#define TT
This macro is defined as a shortcut for doing a lookup in the symbol table.
Definition: TTSymbol.h:155
TTAudioGraphGenerator * TTAudioGraphGeneratorPtr
Pointer to a TTAudioGraphGenerator.
TTUInt16 vectorSize
The global/recommended/initial vectorSize (which can be overriden during process) ...
Definition: TTAudioGraph.h:83
float TTFloat32
32 bit floating point number
Definition: TTBase.h:187
TTErr TTObjectBaseInstantiate(const TTSymbol className, TTObjectBasePtr *returnedObjectPtr, const TTValue arguments)
DEPRECATED.
The TTAudioSignal class represents N vectors of audio samples for M channels.
Definition: TTAudioSignal.h:57
[doxygenAppendixC_bitmaskExample]
Definition: TTAudioGraph.h:81
std::uint32_t TTUInt32
32 bit unsigned integer
Definition: TTBase.h:178
[doxygenAppendixC_copyExample]
Definition: TTValue.h:34