static int32_t make_Modulatr(CSOUND *csound,Modulatr *p, MYFLT *i) { FUNC *ftp; if (LIKELY((ftp = csound->FTnp2Find(csound,i)) != NULL)) p->wave = ftp; else { /* Expect sine wave */ return csound->InitError(csound, Str("No table for Modulatr")); } p->v_time = FL(0.0); /* p->v_rate = 6.0; */ /* p->vibAmt = 0.04; */ make_SubNoise(&p->noise, 330);/* Surely this should be scaled to esr?? */ /* p->rndAmt = 0.005; */ make_OnePole(&p->onepole); OnePole_setPole(&p->onepole, POLE_POS); OnePole_setGain(&p->onepole, RND_SCALE * FL(0.005) /* p->rndAmt */); return 0; }
int bowedset(CSOUND *csound, BOWED *p) { int32 length; FUNC *ftp; MYFLT amp = (*p->amp)*AMP_RSCALE; /* Normalise */ if (LIKELY((ftp = csound->FTnp2Find(csound, p->ifn)) != NULL)) p->vibr = ftp; else { /* Expect sine wave */ return csound->InitError(csound, Str("No table for wgbow vibrato")); } if (*p->lowestFreq>=FL(0.0)) { /* If no init skip */ if (*p->lowestFreq!=FL(0.0)) { length = (int32) (CS_ESR / *p->lowestFreq + FL(1.0)); p->limit = *p->lowestFreq; } else if (*p->frequency!=FL(0.0)) { length = (int32) (CS_ESR / *p->frequency + FL(1.0)); p->limit = *p->frequency; } else { csound->Warning(csound, Str("unknown lowest frequency for bowed string " "-- assuming 50Hz\n")); length = (int32) (CS_ESR / FL(50.0) + FL(1.0)); p->limit = FL(50.0); } make_DLineL(csound, &p->neckDelay, length); length = length >> 1; /* Unsure about this; seems correct in later code */ make_DLineL(csound, &p->bridgeDelay, length); /* p->bowTabl.offSet = FL(0.0);*/ /* offset is a bias, really not needed unless */ /* friction is different in each direction */ /* p->bowTabl.slope contrls width of friction pulse, related to bowForce */ p->bowTabl.slope = FL(3.0); make_OnePole(&p->reflFilt); make_BiQuad(&p->bodyFilt); make_ADSR(&p->adsr); DLineL_setDelay(&p->neckDelay, FL(100.0)); DLineL_setDelay(&p->bridgeDelay, FL(29.0)); OnePole_setPole(&p->reflFilt, FL(0.6) - (FL(0.1) * RATE_NORM)); OnePole_setGain(&p->reflFilt, FL(0.95)); BiQuad_setFreqAndReson(p->bodyFilt, FL(500.0), FL(0.85)); BiQuad_setEqualGainZeroes(p->bodyFilt); BiQuad_setGain(p->bodyFilt, FL(0.2)); ADSR_setAllTimes(csound, &p->adsr, FL(0.02), FL(0.005), FL(0.9), FL(0.01)); /* ADSR_setAll(&p->adsr, 0.002f,0.01f,0.9f,0.01f); */ p->adsr.target = FL(1.0); p->adsr.rate = p->adsr.attackRate; p->adsr.state = ATTACK; p->maxVelocity = FL(0.03) + (FL(0.2) * amp); p->lastpress = FL(0.0); /* Set unknown state */ p->lastfreq = FL(0.0); p->lastbeta = FL(0.0); /* Remember states */ p->lastamp = amp; } return OK; }
int fluteset(CSOUND *csound, FLUTE *p) { FUNC *ftp; int32 length; if (LIKELY((ftp = csound->FTnp2Find(csound, p->ifn)) != NULL)) p->vibr = ftp; else { /* Expect sine wave */ return csound->InitError(csound, Str("No table for Flute")); } if (*p->lowestFreq>=FL(0.0)) { /* Skip initialisation?? */ if (*p->lowestFreq!=FL(0.0)) { length = (int32) (CS_ESR / *p->lowestFreq + FL(1.0)); p->limit = *p->lowestFreq; } else if (*p->frequency!=FL(0.0)) { length = (int32) (CS_ESR / *p->frequency + FL(1.0)); p->limit = *p->frequency; } else { csound->Warning(csound, Str("No base frequency for flute " "-- assumed to be 50Hz\n")); length = (int32) (CS_ESR / FL(50.0) + FL(1.0)); p->limit = FL(50.0); } make_DLineL(csound, &p->boreDelay, length); length = length >> 1; /* ??? really; yes from later version */ make_DLineL(csound, &p->jetDelay, length); make_OnePole(&p->filter); make_DCBlock(&p->dcBlock); make_Noise(p->noise); make_ADSR(&p->adsr); /* Clear */ /* OnePole_clear(&p->filter); */ /* DCBlock_clear(&p->dcBlock); */ /* End Clear */ /* DLineL_setDelay(&p->boreDelay, 100.0f); */ /* DLineL_setDelay(&p->jetDelay, 49.0f); */ OnePole_setPole(&p->filter, FL(0.7) - (FL(0.1) * RATE_NORM)); OnePole_setGain(&p->filter, -FL(1.0)); ADSR_setAllTimes(csound, &p->adsr, FL(0.005), FL(0.01), FL(0.8), FL(0.010)); /* ADSR_setAll(&p->adsr, 0.02f, 0.05f, 0.8f, 0.001f); */ /* Suggested values */ /* p->endRefl = 0.5; */ /* p->jetRefl = 0.5; */ /* p->noiseGain = 0.15; */ /* Breath pressure random component */ /* p->vibrGain = 0.05; */ /* breath periodic vibrato component */ /* p->jetRatio = 0.32; */ p->lastamp = FL(1.0); /* Remember */ /* This should be controlled by attack */ ADSR_setAttackRate(csound, &p->adsr, FL(0.02)); p->maxPress = FL(2.3) / FL(0.8); p->outputGain = FL(1.001); ADSR_keyOn(&p->adsr); p->kloop = (MYFLT)((int)(p->h.insdshead->offtim*CS_EKR - CS_EKR*(*p->dettack))); p->lastFreq = FL(0.0); p->lastJet = -FL(1.0); /* freq = (2/3)*p->frequency as we're overblowing here */ /* but 1/(2/3) is 1.5 so multiply for speed */ } return OK; }