void process(AUAudioFrameCount frameCount, AUAudioFrameCount bufferOffset) override { for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) { int frameOffset = int(frameIndex + bufferOffset); distortion = distortionRamper.getAndStep(); lpf180->dist = (float)distortion; lpf181->dist = (float)distortion; cutoffFrequency = cutoffFrequencyRamper.getAndStep(); lpf180->cutoff = (float)cutoffFrequency; lpf181->cutoff = (float)cutoffFrequency; resonance = resonanceRamper.getAndStep(); lpf180->res = (float)resonance; lpf181->res = (float)resonance; for (int channel = 0; channel < channels; ++channel) { float *in = (float *)inBufferListPtr->mBuffers[channel].mData + frameOffset; float *out = (float *)outBufferListPtr->mBuffers[channel].mData + frameOffset; if (started) { if (channel == 0) { sp_lpf18_compute(sp, lpf180, in, out); } else { sp_lpf18_compute(sp, lpf181, in, out); } } else { *out = *in; } } } }
void write_osc(sp_data *sp, void *udata) { UserData *ud = udata; int i; SPFLOAT out = 0, osc = 0, filt = 0, lfo = 0; for(i = 0; i < 3; i++) { sp_osc_compute(sp, ud->osc[i], NULL, &osc); out += osc * 0.3; } sp_osc_compute(sp, ud->lfo, NULL, &lfo); ud->lpf->cutoff = 100 + 3000 * (0.5 * (lfo + 1)); sp_lpf18_compute(sp, ud->lpf, &out, &filt); sp->out[0] = filt; }