Пример #1
0
    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;
                }
            }
        }
    }
Пример #2
0
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;
}