int COMBIT::run() { int samps = framesToRun() * inputChannels(); if (currentFrame() < insamps) rtgetin(in, this, samps); for (int i = 0; i < samps; i += inputChannels()) { if (--branch <= 0) { double p[8]; update(p, 8); amp = p[3]; if (amptable) { #ifdef EMBEDDED amp *= rtcmix_table(currentFrame(), amptable, tabs); #else amp *= table(currentFrame(), amptable, tabs); #endif } if (p[4] != frequency) { frequency = p[4]; delsamps = (int) ((1.0 / frequency) * SR + 0.5); } if (p[5] != rvbtime) { rvbtime = p[5]; comb->setReverbTime(rvbtime); } pctleft = p[7]; branch = skip; } float insig, out[2]; if (currentFrame() < insamps) insig = in[i + inchan]; else insig = 0.0; out[0] = comb->next(insig, delsamps) * amp; if (outputChannels() == 2) { out[1] = out[0] * (1.0 - pctleft); out[0] *= pctleft; } rtaddout(out); increment(); } return framesToRun(); }
int CLAR::run() { for (int i = 0; i < framesToRun(); i++) { if (--branch <= 0) { if (amparr) { #ifdef MAXMSP aamp = rtcmix_table(currentFrame(), amparr, amptabs); #else aamp = table(currentFrame(), amparr, amptabs); #endif } if (oamparr) oamp = tablei(currentFrame(), oamparr, oamptabs); branch = skip; } float sig = (rrand() * namp * aamp) + aamp; float del1sig = mdelget(del1,length1,dl1); float del2sig = mdelget(del2,length2,dl2); if (del1sig > 1.0) del1sig = 1.0; if (del1sig < -1.0) del1sig = -1.0; if (del2sig > 1.0) del2sig = 1.0; if (del2sig < -1.0) del2sig = -1.0; sig = sig + 0.9 * ((d2gain * del2sig) + ((0.9-d2gain) * del1sig)); float csig = -0.5 * sig + aamp; float ssig = sig * sig; sig = (0.3 * ssig) + (-0.8 * (sig * ssig)); sig = sig + csig; sig = (0.7 * sig) + (0.3 * oldsig); oldsig = sig; delput(sig,del2,dl2); delput(sig,del1,dl1); float out[2]; out[0] = sig * amp * oamp; if (outputChannels() == 2) { out[1] = (1.0 - spread) * out[0]; out[0] *= spread; } rtaddout(out); increment(); } return framesToRun(); }
int TRANSBEND :: run() { const int out_frames = framesToRun(); int i, branch = 0, ibranch = 0, inChans = inputChannels(); float aamp, *outp; double frac; const float cpsoct10 = cpsoct(10.0); #ifdef DEBUG printf("out_frames: %d in_frames_left: %d\n", out_frames, in_frames_left); #endif aamp = amp; /* in case amptable == NULL */ outp = outbuf; /* point to inst private out buffer */ for (i = 0; i < out_frames; i++) { if (--branch < 0) { if (amptable) aamp = rtcmix_table(currentFrame(), amptable, tabs) * amp; branch = skip; } while (get_frame) { if (inframe >= RTBUFSAMPS) { rtgetin(in, this, RTBUFSAMPS * inChans); in_frames_left -= RTBUFSAMPS; #ifdef DEBUG printf("READ %d frames, in_frames_left: %d\n", RTBUFSAMPS, in_frames_left); #endif inframe = 0; } oldersig = oldsig; oldsig = newsig; newsig = in[(inframe * inChans) + inchan]; inframe++; incount++; if (counter - (double) incount < 0.5) get_frame = 0; } frac = (counter - (double) incount) + 2.0; outp[0] = interp(oldersig, oldsig, newsig, frac) * aamp; #ifdef DEBUG_FULL printf("i: %d counter: %g incount: %d frac: %g inframe: %d cursamp: %d\n", i, counter, incount, frac, inframe, currentFrame()); printf("interping %g, %g, %g => %g\n", oldersig, oldsig, newsig, outp[0]); #endif if (outputchans == 2) { outp[1] = outp[0] * (1.0 - pctleft); outp[0] *= pctleft; } outp += outputchans; increment(); if (--ibranch < 0) { float interval = rtcmix_table(currentFrame(), pitchtable, ptabs); _increment = (double) cpsoct(10.0 + interval) / cpsoct10; ibranch = 20; } counter += _increment; /* keeps track of interp pointer */ if (counter - (double) incount >= -0.5) get_frame = 1; } #ifdef DEBUG printf("OUT %d frames\n\n", i); #endif return i; }