示例#1
0
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//	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,
                               &parameterListener);

        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, &parameter);
        if (ret != noErr) {
            return ret;
        }
    }

    return ret;
}
示例#2
0
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, &param);
            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;
}
示例#3
0
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
}