Пример #1
0
 void run(int frameCount, float* outL, float* outR)
 {
     float originalFrequency = *blsquare->freq;
     *blsquare->freq *= kernel->detuningMultiplier;
     *blsquare->freq += kernel->detuningOffset;
     *blsquare->freq = clamp(*blsquare->freq, 0.0f, 22050.0f);
     *blsquare->width = kernel->pulseWidth;
     
     adsr->atk = (float)kernel->attackDuration;
     adsr->dec = (float)kernel->decayDuration;
     adsr->sus = (float)kernel->sustainLevel;
     adsr->rel = (float)kernel->releaseDuration;
     
     for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) {
         float x = 0;
         sp_adsr_compute(kernel->sp, adsr, &internalGate, &amp);
         sp_blsquare_compute(kernel->sp, blsquare, nil, &x);
         *outL++ += amp * x;
         *outR++ += amp * x;
         
     }
     *blsquare->freq = originalFrequency;
     if (stage == stageRelease && amp < 0.00001) {
         clear();
         remove();
     }
 }
        void run(int frameCount, float *outL, float *outR) override
        {
            float originalFrequency = osc->freq;

            osc->freq *= powf(2, kernel->pitchBend / 12.0);
            osc->freq = clamp(osc->freq, 0.0f, 22050.0f);
            float bentFrequency = osc->freq;

            adsr->atk = (float)kernel->attackDuration;
            adsr->dec = (float)kernel->decayDuration;
            adsr->sus = (float)kernel->sustainLevel;
            adsr->rel = (float)kernel->releaseDuration;

            for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) {
                float x = 0;
                float depth = kernel->vibratoDepth / 12.0;
                float variation = sinf((kernel->currentRunningIndex + frameIndex) * 2 * 2 * M_PI * kernel->vibratoRate / kernel->getSampleRate());
                osc->freq = bentFrequency * powf(2, depth * variation);

                sp_adsr_compute(kernel->getSpData(), adsr, &internalGate, &amp);
                sp_osc_compute(kernel->getSpData(), osc, nil, &x);
                *outL++ += amp * x;
                *outR++ += amp * x;

            }
            osc->freq = originalFrequency;
            if (stage == stageRelease && amp < 0.00001) {
                clear();
                remove();
            }
        }
        void run(int frameCount, float* outL, float* outR)
        {
            float originalFrequency = phs->freq;
            phs->freq *= kernel->detuningMultiplier;
            phs->freq += kernel->detuningOffset;
            phs->freq = clamp(phs->freq, 0.0f, 22050.0f);
            pdhalf->amount = kernel->phaseDistortion;

            adsr->atk = (float)kernel->attackDuration;
            adsr->dec = (float)kernel->decayDuration;
            adsr->sus = (float)kernel->sustainLevel;
            adsr->rel = (float)kernel->releaseDuration;

            for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) {
                float temp = 0;
                float pd = 0;
                float ph = 0;
                sp_adsr_compute(kernel->sp, adsr, &internalGate, &amp);

                sp_phasor_compute(kernel->sp, phs, NULL, &ph);
                sp_pdhalf_compute(kernel->sp, pdhalf, &ph, &pd);
                tab->index = pd;
                sp_tabread_compute(kernel->sp, tab, NULL, &temp);

                *outL++ += velocityAmp * amp * temp;
                *outR++ += velocityAmp * amp * temp;
                
            }
            phs->freq = originalFrequency;
            if (stage == stageRelease && amp < 0.00001) {
                clear();
                remove();
            }
        }
    void process(AUAudioFrameCount frameCount, AUAudioFrameCount bufferOffset) override {
        // For each sample.
        for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) {
            int frameOffset = int(frameIndex + bufferOffset);
            
            adsr->atk = attackDurationRamper.getStep();
            adsr->dec = decayDurationRamper.getStep();
            adsr->sus = sustainLevelRamper.getStep();
            adsr->rel = releaseDurationRamper.getStep();
            
//            NSLog(@"%f %f", adsr->atk, adsr->rel);

            sp_adsr_compute(sp, adsr, &internalGate, &amp);

            for (int channel = 0; channel < channels; ++channel) {
                float *in  = (float *)inBufferListPtr->mBuffers[channel].mData  + frameOffset;
                float *out = (float *)outBufferListPtr->mBuffers[channel].mData + frameOffset;
                *out = *in * amp;
            }
        }
    }
    void process(AUAudioFrameCount frameCount, AUAudioFrameCount bufferOffset) override {

        for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) {

            int frameOffset = int(frameIndex + bufferOffset);

            attackDuration = attackDurationRamper.getAndStep();
            adsr->atk = (float)attackDuration;
            decayDuration = decayDurationRamper.getAndStep();
            adsr->dec = (float)decayDuration;
            sustainLevel = sustainLevelRamper.getAndStep();
            adsr->sus = (float)sustainLevel;
            releaseDuration = releaseDurationRamper.getAndStep();
            adsr->rel = (float)releaseDuration;

            sp_adsr_compute(sp, adsr, &internalGate, &amp);
            
            for (int channel = 0; channel < channels; ++channel) {
                float *in  = (float *)inBufferListPtr->mBuffers[channel].mData  + frameOffset;
                float *out = (float *)outBufferListPtr->mBuffers[channel].mData + frameOffset;
                *out = *in * amp;
            }
        }
    }