/* Suggested values pluckAmp = 0.3; pluckPos = 0.4; detuning = 0.995; */ int mandolinset(CSOUND *csound, MANDOL *p) { FUNC *ftp; if (LIKELY((ftp = csound->FTnp2Find(csound, p->ifn)) != NULL)) p->soundfile = ftp; else { /* Expect pluck wave */ return csound->InitError(csound, Str("No table for Mandolin")); } if (*p->lowestFreq>=FL(0.0)) { /* Skip initialisation */ if (*p->lowestFreq!=FL(0.0)) { p->length = (int32) (CS_ESR / (*p->lowestFreq * FL(0.9)) + FL(1.0)); } else if (LIKELY(*p->frequency!=FL(0.0))) { p->length = (int32) (CS_ESR / *p->frequency + FL(1.0)); } else { csound->Warning(csound, Str("No base frequency for mandolin")); p->length = (int32) (CS_ESR / FL(50.0) + FL(1.0)); } p->lastFreq = FL(50.0); /* p->baseLoopGain = 0.995; */ /* p->loopGain = 0.999; */ make_DLineA(csound,&p->delayLine1, p->length); make_DLineA(csound,&p->delayLine2, p->length); make_DLineL(csound,&p->combDelay, p->length); make_OneZero(&p->filter1); make_OneZero(&p->filter2); // p->lastLength = p->length * FL(0.5); /* soundfile->normalize(0.05); Empirical hack here transferred to use */ p->lastLength = ( CS_ESR / p->lastFreq); /* length - delays */ /* DLineA_setDelay(&p->delayLine1, (p->lastLength / *p->detuning) - 0.5f); */ /* DLineA_setDelay(&p->delayLine2, (p->lastLength * *p->detuning) - 0.5f); */ /* this function gets interesting here, */ p->s_time = FL(0.0); /* because pluck may be longer than */ /* string length, so we just reset the */ /* soundfile and add in the pluck in */ /* the tick method. */ /* Set Pick Position */ DLineL_setDelay(&p->combDelay, FL(0.5) * *p->pluckPos * p->lastLength); /* which puts zeroes at pos*length */ p->dampTime = (int32) p->lastLength; /* See tick method below */ p->waveDone = 0; { int relestim = (int)(CS_EKR * FL(0.1)); /* 1/10th second decay extention */ if (relestim > p->h.insdshead->xtratim) p->h.insdshead->xtratim = relestim; } p->kloop = (int)(p->h.insdshead->offtim * CS_EKR); /* ??? */ } return OK; }
int32_t voicformset(CSOUND *csound, VOICF *p) { MYFLT amp = (*p->amp)*AMP_RSCALE; /* Normalise */ int32_t i; if (UNLIKELY(make_SingWave(csound, &p->voiced, p->ifn, p->ivfn)==NOTOK)) return NOTOK; Envelope_setRate(csound, &(p->voiced.envelope), FL(0.001)); Envelope_setTarget(&(p->voiced.envelope), FL(0.0)); make_Noise(p->noise); for (i=0; i<4; i++) { make_FormSwep(&p->filters[i]); FormSwep_setSweepRate(p->filters[i], FL(0.001)); } make_OneZero(&p->onezero); OneZero_setCoeff(&p->onezero, - FL(0.9)); make_OnePole(&p->onepole); OnePole_setPole(&p->onepole, FL(0.9)); make_Envelope(&p->noiseEnv); Envelope_setRate(csound, &p->noiseEnv, FL(0.001)); Envelope_setTarget(&p->noiseEnv, FL(0.0)); p->oldform = *p->formant; p->ph = (int32_t)(FL(0.5)+ *p->phoneme); VoicForm_setPhoneme(csound, p, p->ph, p->oldform); /* Clear */ /* OnePole_clear(&p->onepole); */ /* Included in make */ FormSwep_clear(p->filters[0]); FormSwep_clear(p->filters[1]); FormSwep_clear(p->filters[2]); FormSwep_clear(p->filters[3]); { MYFLT temp, freq = *p->frequency; if ((freq * FL(22.0)) > CS_ESR) { csound->Warning(csound, Str("This note is too high!!\n")); freq = CS_ESR / FL(22.0); } p->basef = freq; temp = FABS(FL(1500.0) - freq) + FL(200.0); p->lastGain = FL(10000.0) / temp / temp; SingWave_setFreq(csound, &p->voiced, freq); } Envelope_setTarget(&(p->voiced.envelope), amp); OnePole_setPole(&p->onepole, FL(0.95) - (amp * FL(0.2))/FL(128.0)); /* voicprint(csound, p); */ return OK; }
/* *********************************************************************** */ int clarinset(CSOUND *csound, CLARIN *p) { FUNC *ftp; if (LIKELY((ftp = csound->FTnp2Find(csound, p->ifn)) != NULL)) p->vibr = ftp; else { /* Expect sine wave */ return csound->InitError(csound, Str("No table for Clarinet")); } if (*p->lowestFreq>=FL(0.0)) { /* Skip initialisation */ if (*p->lowestFreq) p->length = (int32) (CS_ESR / *p->lowestFreq + FL(1.0)); else if (*p->frequency) p->length = (int32) (CS_ESR / *p->frequency + FL(1.0)); else { csound->Warning(csound, Str("No base frequency for clarinet " "-- assuming 50Hz\n")); p->length = (int32) (CS_ESR / FL(50.0) + FL(1.0)); } make_DLineL(csound, &p->delayLine, p->length); p->reedTable.offSet = FL(0.7); p->reedTable.slope = -FL(0.3); make_OneZero(&(p->filter)); make_Envelope(&p->envelope); make_Noise(p->noise); /* p->noiseGain = 0.2f; */ /* Arguemnts; suggested values? */ /* p->vibrGain = 0.1f; */ { int relestim = (int)(CS_EKR * FL(0.1)); /* 1/10th second decay extention */ if (relestim > p->h.insdshead->xtratim) p->h.insdshead->xtratim = relestim; } p->kloop = (int) ((int32) (p->h.insdshead->offtim * CS_EKR) - (int32) (CS_EKR * *p->attack)); #ifdef BETA csound->Message(csound, "offtim=%f kloop=%d\n", p->h.insdshead->offtim, p->kloop); #endif p->envelope.rate = FL(0.0); p->v_time = 0; } return OK; }