//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // HSPad::Initialize //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ OSStatus HSPad::Initialize() { OSStatus ret = noErr; ret = AUMonotimbralInstrumentBase::Initialize(); if (ret != noErr) return ret; SetNotes(kNumNotes, kMaxActiveNotes, mHSNotes, sizeof(HSNote)); wavetable = new HSWavetable(kNumWavetables, GetOutput(0)->GetStreamFormat().mSampleRate, kNumSamplesPerWavetable, Globals()->GetParameter(kParameter_HarmonicBandwidth), Globals()->GetParameter(kParameter_HarmonicProfile), // Harmonic bandwidth scale Globals()->GetParameter(kParameter_HarmonicsAmount), Globals()->GetParameter(kParameter_HarmonicsCurveSteepness), Globals()->GetParameter(kParameter_HarmonicsBalance), kHarmonicsCompensation); if (0 == parameterListener) { ret = AUListenerCreate(MyEventListenerProc, this, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode, 0.5, ¶meterListener); if (ret != noErr) { return ret; } } for (int i=0; i<kNumParametersThatAreRelevantToWavetable; i++) { AudioUnitParameter parameter; parameter.mAudioUnit = GetComponentInstance(); parameter.mParameterID = kParametersThatAreRelevantToWavetable[i]; parameter.mScope = kAudioUnitScope_Global; parameter.mElement = 0; ret = AUListenerAddParameter(parameterListener, this, ¶meter); if (ret != noErr) { return ret; } } return ret; }
ofParameter<float> & AudioUnitController::getParameter(string name) { vector<AudioUnitParameterInfo> params = synth.getParameterList(); for (int p = 0; p < params.size(); p++) { if (name == params[p].name) { AudioUnitParameter param = {synth, static_cast<AudioUnitParameterID>(p), kAudioUnitScope_Global, 0}; AUListenerAddParameter(auEventListener, this, ¶m); parameters[p] = new AudioUnitControllerParameter(&synth, params[p], p); return parameters[p]->getParameter(); } } // if we got here, no such parameter exists ofLog(OF_LOG_ERROR, "No parameter called "+name+" found"); return; }
void AUCarbonViewControl::Bind() { #if !__LP64__ mInControlInitialization = 1; // true AUListenerAddParameter(mListener, this, &mParam); // will cause an almost-immediate callback EventTypeSpec events[] = { { kEventClassControl, kEventControlValueFieldChanged } // N.B. OS X only }; WantEventTypes(GetControlEventTarget(mControl), GetEventTypeCount(events), events); if (mType == kTypeContinuous || mType == kTypeText || mType == kTypeDiscrete) { EventTypeSpec events[] = { { kEventClassControl, kEventControlHit }, { kEventClassControl, kEventControlClick }, { kEventClassControl, kEventControlTrack } }; WantEventTypes(GetControlEventTarget(mControl), GetEventTypeCount(events), events); } if (mType == kTypeText) { EventTypeSpec events[] = { { kEventClassControl, kEventControlSetFocusPart } }; WantEventTypes(GetControlEventTarget(mControl), GetEventTypeCount(events), events); ControlKeyFilterUPP proc = mParam.ValuesHaveStrings() ? StdKeyFilterCallback : NumericKeyFilterCallback; // this will fail for a static text field SetControlData(mControl, 0, kControlEditTextKeyFilterTag, sizeof(proc), &proc); } Update(true); mInControlInitialization = 0; // false #endif }