示例#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
void HSPad::Cleanup()
{
    for (int i=0; i<kNumParametersThatAreRelevantToWavetable; i++) {
        AudioUnitParameter  parameter;
        parameter.mAudioUnit = GetComponentInstance();
        parameter.mParameterID = kParametersThatAreRelevantToWavetable[i];
        parameter.mScope = kAudioUnitScope_Global;
        parameter.mElement = 0;

        AUListenerRemoveParameter(parameterListener, 0, &parameter);
    }

    delete wavetable;
    wavetable = 0;

    AUMonotimbralInstrumentBase::Cleanup();
}
void CComponentProxyManager::ResolveDependency()
{
    for (uint32_t i = 0; i < m_pDependencyResolver->size(); ++i)
    {
        SDependencyResolver* pDependencyResolver = (*m_pDependencyResolver)[i];
        CComponentBase* pComponentToBeLink = GetComponentInstance(pDependencyResolver->uInstanceId, pDependencyResolver->uGuid);
        BEATS_ASSERT(pComponentToBeLink != NULL, _T("Resolve dependency failed, Comopnent id %d guid 0x%x doesn't exist!"), pDependencyResolver->uInstanceId, pDependencyResolver->uGuid);
        BEATS_ASSERT(pDependencyResolver->pDescription != NULL);
        BEATS_ASSERT(pDependencyResolver->pVariableAddress == NULL, "pVariableAddress should be null in proxy mode");
        BEATS_ASSERT(pComponentToBeLink != NULL, 
            _T("Component %s id %d can't resolve its dependency %s to component guid 0x%x id %d, have you deleted that component recently?"),
            pDependencyResolver->pDescription->GetOwner()->GetClassStr(), 
            pDependencyResolver->pDescription->GetOwner()->GetId(),
            pDependencyResolver->pDescription->GetDisplayName(),
            pDependencyResolver->uGuid,
            pDependencyResolver->uInstanceId);
        BEATS_ASSERT(pDependencyResolver->pDescription->GetDependencyLine(pDependencyResolver->uIndex)->GetConnectedComponent() == NULL);
        pDependencyResolver->pDescription->SetDependency(pDependencyResolver->uIndex, static_cast<CComponentProxy*>(pComponentToBeLink));
    }
    BEATS_SAFE_DELETE_VECTOR(*m_pDependencyResolver);
}
void CComponentInstanceManager::ResolveDependency()
{
    for (uint32_t i = 0; i < m_pDependencyResolver->size(); ++i)
    {
        SDependencyResolver* pDependencyResolver = (*m_pDependencyResolver)[i];
        CComponentBase* pComponentToBeLink = GetComponentInstance(pDependencyResolver->uInstanceId, pDependencyResolver->uGuid);
        BEATS_ASSERT(pComponentToBeLink != NULL, _T("Resolve dependency failed, Comopnent id %d guid 0x%x doesn't exist!"), pDependencyResolver->uInstanceId, pDependencyResolver->uGuid);
        BEATS_ASSERT(pDependencyResolver->pDescription == NULL);
        if (pDependencyResolver->pVariableAddress != NULL)
        {
            if (pDependencyResolver->bIsList)
            {
                pDependencyResolver->pAddFunc(pDependencyResolver->pVariableAddress, pComponentToBeLink);
            }
            else
            {
                BEATS_ASSERT(*(ptrdiff_t*)pDependencyResolver->pVariableAddress == 0, "the variable of address should be cleared.");
                *(ptrdiff_t*)pDependencyResolver->pVariableAddress = (ptrdiff_t)pComponentToBeLink;
            }
        }
    }
    BEATS_SAFE_DELETE_VECTOR(*m_pDependencyResolver);
}