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, &); 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, &); 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, &); 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, &); 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, &); 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; } } }