23 #include "PlugtasticAUInstrument.h"
25 COMPONENT_ENTRY(PlugtasticAUInstrument)
27 #pragma mark PlugtasticAUInstrument Methods
34 PlugtasticAUInstrument::PlugtasticAUInstrument(ComponentInstance inComponentInstance)
36 : AUInstrumentBase(inComponentInstance, 0, 1)
39 Globals()->UseIndexedParameters (kNumberOfParameters);
42 #if AU_DEBUG_DISPATCHER
43 mDebugDispatcher =
new AUDebugDispatcher (
this);
46 mGraph =
new PlugtasticAUInstrumentGraph;
47 mParameters =
new PlugtasticAUParameters;
48 mParameters->setDefaults(
this);
67 OSStatus PlugtasticAUInstrument::GetParameterInfo(AudioUnitScope inScope, AudioUnitParameterID inParameterID, AudioUnitParameterInfo &outParameterInfo)
69 return mParameters->getInfo(inScope, inParameterID, outParameterInfo);
75 ComponentResult PlugtasticAUInstrument::SetParameter(AudioUnitParameterID inID,
76 AudioUnitScope inScope,
77 AudioUnitElement inElement,
79 UInt32 inBufferOffsetInFrames)
81 mParameters->setParameter(mGraph, inID,inValue);
82 return AUBase::SetParameter(inID, inScope, inElement, inValue, inBufferOffsetInFrames);
96 #pragma mark TestNote Methods
101 OSStatus PlugtasticAUInstrument::Render(UInt32 inNumFrames, AudioBufferList& inBufferList)
108 float globalVol = GetGlobalParameter(kGlobalVolumeParam);
110 int numChans = inBufferList.mNumberBuffers;
114 left = (
float*)inBufferList.mBuffers[0].mData;
115 right = numChans == 2 ? (
float*)inBufferList.mBuffers[1].mData : 0;
117 double sampleRate = SampleRate();
118 double freq = Frequency() * (twopi/sampleRate);
120 switch (GetState()) {
121 case kNoteState_Attacked :
122 case kNoteState_Sostenutoed :
123 case kNoteState_ReleasedButSostenutoed :
124 case kNoteState_ReleasedButSustained : {
125 for (UInt32 frame=0; frame<inNumFrames; ++frame) {
128 float out = pow5(sin(phase)) * amp * globalVol;
139 case kNoteState_Released :
141 UInt32 endFrame = 0xFFFFFFFF;
142 for (UInt32 frame=0; frame<inNumFrames; ++frame)
146 else if (endFrame == 0xFFFFFFFF)
148 float out = pow5(sin(phase)) * amp * globalVol;
154 if (endFrame != 0xFFFFFFFF)
159 case kNoteState_FastReleased :
161 UInt32 endFrame = 0xFFFFFFFF;
162 for (UInt32 frame=0; frame<inNumFrames; ++frame)
165 amp += fast_dn_slope;
166 else if (endFrame == 0xFFFFFFFF)
168 float out = pow5(sin(phase)) * amp * globalVol;
174 if (endFrame != 0xFFFFFFFF)