Jamoma API  0.6.0.a19
BlueFilter.cpp
1 #include "BlueFilter.h"
2 
3 COMPONENT_ENTRY(BlueFilter)
4 
5 
6 BlueFilter::BlueFilter(AudioUnit component)
7  : AUEffectBase(component)
8 {
9  TTDSPInit();
10 
11  CreateElements();
12  Globals()->UseIndexedParameters(kNumberOfParameters);
13 
14  SetParameter(kParam_One, kDefaultValue_ParamOne);
15  SetAFactoryPresetAsCurrent(kPresets[kPreset_Default]); // TODO: for some reason, this doesn't seem to be applied...
16 
17  #if AU_DEBUG_DISPATCHER
18  mDebugDispatcher = new AUDebugDispatcher(this);
19  #endif
20 }
21 
22 
23 OSStatus BlueFilter::GetParameterValueStrings(AudioUnitScope inScope, AudioUnitParameterID inParameterID, CFArrayRef* outStrings)
24 {
25  return kAudioUnitErr_InvalidProperty;
26 }
27 
28 
29 OSStatus BlueFilter::GetParameterInfo(AudioUnitScope inScope, AudioUnitParameterID inParameterID, AudioUnitParameterInfo &outParameterInfo)
30 {
31  OSStatus result = noErr;
32 
33  outParameterInfo.flags = kAudioUnitParameterFlag_IsWritable
34  | kAudioUnitParameterFlag_IsReadable;
35 
36  if(inScope == kAudioUnitScope_Global){
37  switch(inParameterID){
38  case kParam_One:
39  AUBase::FillInParameterName(outParameterInfo, kParameterOneName, false);
40  outParameterInfo.unit = kAudioUnitParameterUnit_Hertz;
41  outParameterInfo.minValue = 10.0;
42  outParameterInfo.maxValue = 20000.0;
43  outParameterInfo.flags += kAudioUnitParameterFlag_IsHighResolution;
44  outParameterInfo.flags += kAudioUnitParameterFlag_DisplayLogarithmic;
45  outParameterInfo.defaultValue = kDefaultValue_ParamOne;
46  break;
47  default:
48  result = kAudioUnitErr_InvalidParameter;
49  break;
50  }
51  }
52  else
53  result = kAudioUnitErr_InvalidParameter;
54 
55  return result;
56 }
57 
58 
59 OSStatus BlueFilter::GetPropertyInfo( AudioUnitPropertyID inID,
60  AudioUnitScope inScope,
61  AudioUnitElement inElement,
62  UInt32& outDataSize,
63  Boolean& outWritable)
64 {
65  return AUEffectBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
66 }
67 
68 
69 OSStatus BlueFilter::GetProperty( AudioUnitPropertyID inID,
70  AudioUnitScope inScope,
71  AudioUnitElement inElement,
72  void* outData )
73 {
74  return AUEffectBase::GetProperty (inID, inScope, inElement, outData);
75 }
76 
77 
78 ComponentResult BlueFilter::GetPresets(CFArrayRef* outData) const
79 {
80  if(outData == NULL)
81  return noErr;
82 
83  CFMutableArrayRef presetsArray = CFArrayCreateMutable(NULL, kNumberPresets, NULL);
84 
85  for(int i=0; i<kNumberPresets; ++i)
86  CFArrayAppendValue(presetsArray, &kPresets [i]);
87 
88  *outData = (CFArrayRef)presetsArray;
89  return noErr;
90 }
91 
92 
93 OSStatus BlueFilter::NewFactoryPresetSet(const AUPreset &inNewFactoryPreset)
94 {
95  SInt32 chosenPreset = inNewFactoryPreset.presetNumber;
96 
97  if(chosenPreset == kPreset_Low || chosenPreset == kPreset_High){
98  for(int i = 0; i < kNumberPresets; ++i){
99  if(chosenPreset == kPresets[i].presetNumber){
100  switch(chosenPreset){
101  case kPreset_Low:
102  SetParameter(kParam_One, kParameter_Preset_Low);
103  break;
104  case kPreset_High:
105  SetParameter(kParam_One, kParameter_Preset_High);
106  break;
107  }
108  SetAFactoryPresetAsCurrent(kPresets[i]);
109  return noErr;
110  }
111  }
112  }
113  return kAudioUnitErr_InvalidProperty;
114 }
115 
116 
117 #pragma mark -
118 #pragma mark BlueFilter Effect Kernel
119 
120 void BlueFilter::BlueFilterKernel::Reset()
121 {
122  ;// do whatever work is necessary to return the audio unit to its pristine, initialized state.
123 }
124 
125 
126 // Process 1 channel of audio, the AU will manage the number of parallel channels by creating multiple kernel instances
127 void BlueFilter::BlueFilterKernel::Process( const Float32* inSourceP,
128  Float32* inDestP,
129  UInt32 inFramesToProcess,
130  UInt32 inNumChannels, // for version 2 AudioUnits inNumChannels is always 1
131  bool &ioSilence )
132 {
133  mInput->setVector(0, inFramesToProcess, (TTFloat32*)inSourceP);
134  mOutput->setVectorSizeWithInt(inFramesToProcess);
135  mOutput->alloc();
136 
137  mButter->setAttributeValue(TT("frequency"), GetParameter(kParam_One));
138  mButter->process(mInput, mOutput);
139 
140  mOutput->getVector(0, inFramesToProcess, (TTFloat32*)inDestP);
141 }
142 
#define TT
This macro is defined as a shortcut for doing a lookup in the symbol table.
Definition: TTSymbol.h:155
float TTFloat32
32 bit floating point number
Definition: TTBase.h:187
void TTDSP_EXPORT TTDSPInit(const char *pathToBinaries=NULL)
Initialise the Jamoma DSP library, as well as Jamoma Foundation foundation if needed.
Definition: TTDSP.cpp:30