1 #ifndef __PlugtasticAUGraph_h__
2 #define __PlugtasticAUGraph_h__
4 #include "PlugtasticAPI.h"
5 #include "AUEffectBase.h"
6 #include "PlugtasticParameter.h"
8 class PlugtasticAUInstrumentGraph {
9 friend class PlugtasticAUParameters;
13 TTAudioGraphObjectPtr obj0;
14 TTAudioGraphObjectPtr obj1;
15 TTAudioGraphObjectPtr obj2;
16 TTAudioGraphObjectPtr obj3;
17 TTAudioGraphObjectPtr obj4;
18 TTAudioGraphObjectPtr obj5;
19 TTAudioGraphObjectPtr obj6;
20 TTAudioGraphObjectPtr obj7;
21 TTAudioGraphObjectPtr obj8;
22 TTAudioGraphObjectPtr obj9;
23 TTAudioGraphObjectPtr obj10;
24 TTAudioGraphObjectPtr obj11;
25 TTAudioGraphObjectPtr obj12;
26 TTAudioGraphObjectPtr obj13;
27 TTAudioGraphObjectPtr obj14;
28 TTAudioGraphObjectPtr obj15;
29 TTAudioGraphObjectPtr obj16;
30 TTAudioGraphObjectPtr obj17;
31 TTAudioGraphObjectPtr obj18;
32 TTAudioGraphObjectPtr obj19;
33 TTAudioGraphObjectPtr obj20;
34 TTAudioGraphObjectPtr obj21;
35 TTAudioGraphObjectPtr obj22;
36 TTAudioGraphObjectPtr obj23;
37 TTAudioGraphObjectPtr obj24;
38 TTAudioGraphObjectPtr obj25;
39 TTAudioGraphObjectPtr obj26;
44 PlugtasticAUInstrumentGraph() :
76 audioObjectArguments.
setSize(3);
79 audioObjectArguments.
set(0,
TT(
"plugtastic.output"));
80 audioObjectArguments.
set(1, 2);
81 audioObjectArguments.
set(2, 1);
83 obj0->mKernel->setAttributeValue(
TT(
"linearGain"), 1.000000);
84 obj0->mKernel->setAttributeValue(
TT(
"maxNumChannels"), 0);
85 obj0->mKernel->setAttributeValue(
TT(
"midiGain"), 100.000000);
86 obj0->mKernel->setAttributeValue(
TT(
"gain"), 0.000000);
87 obj0->mKernel->setAttributeValue(
TT(
"bypass"), 0);
88 obj0->mKernel->setAttributeValue(
TT(
"mute"), 0);
89 obj0->mKernel->setAttributeValue(
TT(
"sampleRate"), 44100u);
91 audioObjectArguments.
set(0,
TT(
"operator"));
92 audioObjectArguments.
set(1, 1);
93 audioObjectArguments.
set(2, 1);
95 obj1->mKernel->setAttributeValue(
TT(
"maxNumChannels"), 0);
96 obj1->mKernel->setAttributeValue(
TT(
"operator"),
TT(
"*"));
97 obj1->mKernel->setAttributeValue(
TT(
"operand"), 1.000000);
98 obj1->mKernel->setAttributeValue(
TT(
"bypass"), 0);
99 obj1->mKernel->setAttributeValue(
TT(
"mute"), 0);
100 obj1->mKernel->setAttributeValue(
TT(
"sampleRate"), 44100u);
102 audioObjectArguments.
set(0,
TT(
"wavetable"));
103 audioObjectArguments.
set(1, 0);
104 audioObjectArguments.
set(2, 1);
106 obj2->mKernel->setAttributeValue(
TT(
"frequency"), 440.000000);
107 obj2->mKernel->setAttributeValue(
TT(
"maxNumChannels"), 1);
108 obj2->mKernel->setAttributeValue(
TT(
"size"), 8192u);
109 obj2->mKernel->setAttributeValue(
TT(
"gain"), 0.000000);
110 obj2->mKernel->setAttributeValue(
TT(
"mode"),
TT(
"sine"));
111 obj2->mKernel->setAttributeValue(
TT(
"interpolation"),
TT(
"linear"));
112 obj2->mKernel->setAttributeValue(
TT(
"bypass"), 0);
113 obj2->mKernel->setAttributeValue(
TT(
"mute"), 0);
114 obj2->mKernel->setAttributeValue(
TT(
"sampleRate"), 44100u);
116 audioObjectArguments.
set(0,
TT(
"operator"));
117 audioObjectArguments.
set(1, 1);
118 audioObjectArguments.
set(2, 1);
120 obj3->mKernel->setAttributeValue(
TT(
"maxNumChannels"), 0);
121 obj3->mKernel->setAttributeValue(
TT(
"operator"),
TT(
"+"));
122 obj3->mKernel->setAttributeValue(
TT(
"operand"), 1.000000);
123 obj3->mKernel->setAttributeValue(
TT(
"bypass"), 0);
124 obj3->mKernel->setAttributeValue(
TT(
"mute"), 0);
125 obj3->mKernel->setAttributeValue(
TT(
"sampleRate"), 44100u);
127 audioObjectArguments.
set(0,
TT(
"audio.sig"));
128 audioObjectArguments.
set(1, 1);
129 audioObjectArguments.
set(2, 1);
131 obj4->mKernel->setAttributeValue(
TT(
"value"), 110.000000);
132 obj4->mKernel->setAttributeValue(
TT(
"maxNumChannels"), 0);
133 obj4->mKernel->setAttributeValue(
TT(
"bypass"), 0);
134 obj4->mKernel->setAttributeValue(
TT(
"mute"), 0);
135 obj4->mKernel->setAttributeValue(
TT(
"sampleRate"), 44100u);
139 obj6->mKernel->setAttributeValue(
TT(
"inputUnit"),
TT(
"midi"));
140 obj6->mKernel->setAttributeValue(
TT(
"outputUnit"),
TT(
"hz"));
141 obj6->mKernel->setAttributeValue(
TT(
"dataspace"),
TT(
"time"));
142 obj6->mKernel->setAttributeValue(
TT(
"bypass"), 0);
146 obj7->mKernel->setAttributeValue(
TT(
"type"),
TT(
"note"));
147 obj7->mKernel->setAttributeValue(
TT(
"bypass"), 0);
151 obj8->mKernel->setAttributeValue(
TT(
"owner"), 135826496);
152 obj8->mKernel->setAttributeValue(
TT(
"bypass"), 0);
153 obj8->mKernel->setAttributeValue(
TT(
"device"),
TT(
"default"));
158 obj3->connectAudio(obj4, 0, 0);
159 audioObjectArguments.
set(0,
TT(
"operator"));
160 audioObjectArguments.
set(1, 1);
161 audioObjectArguments.
set(2, 1);
163 obj9->mKernel->setAttributeValue(
TT(
"maxNumChannels"), 0);
164 obj9->mKernel->setAttributeValue(
TT(
"operator"),
TT(
"*"));
165 obj9->mKernel->setAttributeValue(
TT(
"operand"), 1.000000);
166 obj9->mKernel->setAttributeValue(
TT(
"bypass"), 0);
167 obj9->mKernel->setAttributeValue(
TT(
"mute"), 0);
168 obj9->mKernel->setAttributeValue(
TT(
"sampleRate"), 44100u);
170 audioObjectArguments.
set(0,
TT(
"wavetable"));
171 audioObjectArguments.
set(1, 0);
172 audioObjectArguments.
set(2, 1);
174 obj10->mKernel->setAttributeValue(
TT(
"frequency"), 440.000000);
175 obj10->mKernel->setAttributeValue(
TT(
"maxNumChannels"), 1);
176 obj10->mKernel->setAttributeValue(
TT(
"size"), 8192u);
177 obj10->mKernel->setAttributeValue(
TT(
"gain"), 0.000000);
178 obj10->mKernel->setAttributeValue(
TT(
"mode"),
TT(
"sine"));
179 obj10->mKernel->setAttributeValue(
TT(
"interpolation"),
TT(
"linear"));
180 obj10->mKernel->setAttributeValue(
TT(
"bypass"), 0);
181 obj10->mKernel->setAttributeValue(
TT(
"mute"), 0);
182 obj10->mKernel->setAttributeValue(
TT(
"sampleRate"), 44100u);
184 audioObjectArguments.
set(0,
TT(
"operator"));
185 audioObjectArguments.
set(1, 1);
186 audioObjectArguments.
set(2, 1);
188 obj11->mKernel->setAttributeValue(
TT(
"maxNumChannels"), 0);
189 obj11->mKernel->setAttributeValue(
TT(
"operator"),
TT(
"*"));
190 obj11->mKernel->setAttributeValue(
TT(
"operand"), 1.000000);
191 obj11->mKernel->setAttributeValue(
TT(
"bypass"), 0);
192 obj11->mKernel->setAttributeValue(
TT(
"mute"), 0);
193 obj11->mKernel->setAttributeValue(
TT(
"sampleRate"), 44100u);
195 obj11->connectAudio(obj4, 0, 0);
196 audioObjectArguments.
set(0,
TT(
"audio.sig"));
197 audioObjectArguments.
set(1, 1);
198 audioObjectArguments.
set(2, 1);
200 obj12->mKernel->setAttributeValue(
TT(
"value"), 10.000000);
201 obj12->mKernel->setAttributeValue(
TT(
"maxNumChannels"), 0);
202 obj12->mKernel->setAttributeValue(
TT(
"bypass"), 0);
203 obj12->mKernel->setAttributeValue(
TT(
"mute"), 0);
204 obj12->mKernel->setAttributeValue(
TT(
"sampleRate"), 44100u);
206 obj11->connectAudio(obj12, 0, 1);
207 obj10->connectAudio(obj11, 0, 0);
208 obj9->connectAudio(obj10, 0, 0);
209 audioObjectArguments.
set(0,
TT(
"operator"));
210 audioObjectArguments.
set(1, 1);
211 audioObjectArguments.
set(2, 1);
213 obj16->mKernel->setAttributeValue(
TT(
"maxNumChannels"), 0);
214 obj16->mKernel->setAttributeValue(
TT(
"operator"),
TT(
"*"));
215 obj16->mKernel->setAttributeValue(
TT(
"operand"), 1.000000);
216 obj16->mKernel->setAttributeValue(
TT(
"bypass"), 0);
217 obj16->mKernel->setAttributeValue(
TT(
"mute"), 0);
218 obj16->mKernel->setAttributeValue(
TT(
"sampleRate"), 44100u);
220 obj16->connectAudio(obj11, 0, 0);
221 audioObjectArguments.
set(0,
TT(
"adsr"));
222 audioObjectArguments.
set(1, 1);
223 audioObjectArguments.
set(2, 1);
225 obj17->mKernel->setAttributeValue(
TT(
"sustain"), -12.000000);
226 obj17->mKernel->setAttributeValue(
TT(
"release"), 500.000000);
227 obj17->mKernel->setAttributeValue(
TT(
"maxNumChannels"), 0);
228 obj17->mKernel->setAttributeValue(
TT(
"sampleRate"), 44100u);
229 obj17->mKernel->setAttributeValue(
TT(
"attack"), 150.000000);
230 obj17->mKernel->setAttributeValue(
TT(
"mode"),
TT(
"hybrid"));
231 obj17->mKernel->setAttributeValue(
TT(
"trigger"), 0);
232 obj17->mKernel->setAttributeValue(
TT(
"decay"), 150.000000);
233 obj17->mKernel->setAttributeValue(
TT(
"mute"), 0);
234 obj17->mKernel->setAttributeValue(
TT(
"linearSustain"), 0.251189);
235 obj17->mKernel->setAttributeValue(
TT(
"bypass"), 0);
237 obj17->connect(obj7);
238 obj16->connectAudio(obj17, 0, 1);
239 obj9->connectAudio(obj16, 0, 1);
240 obj3->connectAudio(obj9, 0, 1);
241 obj2->connectAudio(obj3, 0, 0);
242 obj1->connectAudio(obj2, 0, 0);
243 audioObjectArguments.
set(0,
TT(
"adsr"));
244 audioObjectArguments.
set(1, 1);
245 audioObjectArguments.
set(2, 1);
247 obj23->mKernel->setAttributeValue(
TT(
"sustain"), -6.000000);
248 obj23->mKernel->setAttributeValue(
TT(
"release"), 500.000000);
249 obj23->mKernel->setAttributeValue(
TT(
"maxNumChannels"), 0);
250 obj23->mKernel->setAttributeValue(
TT(
"sampleRate"), 44100u);
251 obj23->mKernel->setAttributeValue(
TT(
"attack"), 50.000000);
252 obj23->mKernel->setAttributeValue(
TT(
"mode"),
TT(
"hybrid"));
253 obj23->mKernel->setAttributeValue(
TT(
"trigger"), 0);
254 obj23->mKernel->setAttributeValue(
TT(
"decay"), 100.000000);
255 obj23->mKernel->setAttributeValue(
TT(
"mute"), 0);
256 obj23->mKernel->setAttributeValue(
TT(
"linearSustain"), 0.501187);
257 obj23->mKernel->setAttributeValue(
TT(
"bypass"), 0);
259 obj23->connect(obj7);
260 obj1->connectAudio(obj23, 0, 1);
261 obj0->connectAudio(obj1, 0, 0);
265 virtual ~PlugtasticAUInstrumentGraph()
297 void process(
const AudioBufferList* inBufferList, AudioBufferList* outBufferList,
const AudioBufferList* sidechainInBufferList, AudioBufferList* sidechainOutBufferList)
300 TTUInt16 inChannelCount = inBufferList->mNumberBuffers;
301 TTUInt32 outChannelCount = outBufferList->mNumberBuffers;
304 ->getUnitGenerator()->setAttributeValue(
TT(
"vectorSize"), mVectorSize);
305 ->getUnitGenerator()->setAttributeValue(
TT(
"maxNumChannels"), inChannelCount);
306 ->getUnitGenerator()->setAttributeValue(
TT(
"numChannels"), inChannelCount);
307 ->setOutputNumChannels(0, inChannelCount);
311 for (channel=0; channel != inChannelCount; channel++)
317 obj0->lockProcessing();
318 obj0->preprocess(mInitData);
319 obj0->process(mAudioSignal);
320 obj0->unlockProcessing();
323 for (channel=0; channel != outChannelCount; channel++)
324 mAudioSignal->getVector(channel, mVectorSize, (
TTFloat32*)outBufferList->mBuffers[channel].mData);
332 kNumberOfParameters = 0
335 #include "PlugtasticAUInstrument.h"
337 class PlugtasticAUParameters {
339 static void FillInParameterName (AudioUnitParameterInfo& ioInfo, CFStringRef inName,
bool inShouldRelease)
341 ioInfo.cfNameString = inName;
342 ioInfo.flags |= kAudioUnitParameterFlag_HasCFNameString;
344 ioInfo.flags |= kAudioUnitParameterFlag_CFNameRelease;
345 CFStringGetCString(inName, ioInfo.name, offsetof (AudioUnitParameterInfo, clumpID), kCFStringEncodingUTF8);
350 OSStatus getInfo(AudioUnitScope inScope, AudioUnitParameterID inParameterID, AudioUnitParameterInfo &outParameterInfo)
352 OSStatus result = noErr;
354 outParameterInfo.flags = kAudioUnitParameterFlag_IsWritable | kAudioUnitParameterFlag_IsReadable;
356 if (inScope == kAudioUnitScope_Global) {
357 switch (inParameterID) {
359 result = kAudioUnitErr_InvalidParameter;
364 result = kAudioUnitErr_InvalidParameter;
370 void setDefaults(PlugtasticAUInstrument*
self)
375 void setParameter(PlugtasticAUInstrumentGraph* graph, AudioUnitParameterID inID, Float32 inValue)
385 #endif // __PlugtasticAUGraph_h__
std::uint16_t TTUInt16
16 bit unsigned integer
TTErr TTObjectBaseRelease(TTObjectBasePtr *anObject)
DEPRECATED.
Base class for all first-class Jamoma objects.
#define TT
This macro is defined as a shortcut for doing a lookup in the symbol table.
TTErr setVector(const TTChannelCount channel, const TTUInt16 vectorSize, const TTSampleValuePtr newVector)
[doxygenAppendixC_methodExample]
void setSize(const TTUInt16 arg)
DEPRECATED.
TTAudioGraphGenerator * TTAudioGraphGeneratorPtr
Pointer to a TTAudioGraphGenerator.
TTUInt16 vectorSize
The global/recommended/initial vectorSize (which can be overriden during process) ...
float TTFloat32
32 bit floating point number
TTErr TTObjectBaseInstantiate(const TTSymbol className, TTObjectBasePtr *returnedObjectPtr, const TTValue arguments)
DEPRECATED.
The TTAudioSignal class represents N vectors of audio samples for M channels.
void set(const TTUInt16 index, const T &anElementValue)
DEPRECATED.
[doxygenAppendixC_bitmaskExample]
std::uint32_t TTUInt32
32 bit unsigned integer
TTAudioSignalPtr mBuffer
Storage for the audioSignal that we provide.
[doxygenAppendixC_copyExample]