static int32_t make_SingWave(CSOUND *csound, SingWave *p, MYFLT *ifn, MYFLT *ivfn) { FUNC *ftp; if (LIKELY((ftp = csound->FTnp2Find(csound,ifn)) != NULL)) p->wave = ftp; else { return csound->InitError(csound, Str("No table for Singwave")); } p->mytime = FL(0.0); p->rate = FL(1.0); p->sweepRate = FL(0.001); if (UNLIKELY(make_Modulatr(csound, &p->modulator, ivfn))) return NOTOK; Modulatr_setVibFreq(p->modulator, FL(6.0)); Modulatr_setVibAmt(p->modulator, FL(0.04)); make_Envelope(&p->envelope); // printf("Singwave envelope=%p\n", &p->envelope); /* Envelope_setTarget(&p->envelope, FL(1.0)); */ /* Envelope_setRate(csound, &p->envelope, FL(0.1)); */ make_Envelope(&p->pitchEnvelope); // printf("Singwave pitchenvelope=%p\n", &p->pitchEnvelope); SingWave_setFreq(csound, p, FL(75.0)); Envelope_setRate(csound, &p->pitchEnvelope, FL(1.0)); /* SingWave_print(csound, p); */ SingWave_tick(csound, p); SingWave_tick(csound, p); Envelope_setRate(csound, &p->pitchEnvelope, p->sweepRate * p->rate); /* Envelope_print(&p->pitchEnvelope); */ return OK; }
void make_ADSR(ADSR *a) { make_Envelope((Envelope*)a); a->target = FL(0.0); a->value = FL(0.0); a->attackRate = FL(0.001); a->decayRate = FL(0.001); a->sustainLevel = FL(0.5); a->releaseRate = FL(0.01); a->state = ATTACK; }
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; }
static int make_Modal4(CSOUND *csound, Modal4 *m, MYFLT *ifn, MYFLT vgain, MYFLT vrate) { FUNC *ftp; if (LIKELY((ftp = csound->FTnp2Find(csound,ifn)) != NULL)) m->vibr = ftp; else { /* Expect sine wave */ csound->ErrorMsg(csound, Str("No table for Modal4 case")); return NOTOK; } make_Envelope(&m->envelope); /* We do not make the excitation wave here yet, */ /* because we do not know what it's going to be. */ make_BiQuad(&m->filters[0]); make_BiQuad(&m->filters[1]); make_BiQuad(&m->filters[2]); make_BiQuad(&m->filters[3]); make_OnePole(&m->onepole); m->v_rate = vrate; /* 6.0; */ m->vibrGain = vgain; /* 0.05; */ /* m->directGain = 0.0; */ m->masterGain = FL(1.0); /* m->baseFreq = 440.0; */ /* Modal4_setRatioAndReson(m, 0, 1.00, 0.9997); */ /* Set some */ /* Modal4_setRatioAndReson(m, 1, 1.30, 0.9997); */ /* silly */ /* Modal4_setRatioAndReson(m, 2, 1.77, 0.9997); */ /* default */ /* Modal4_setRatioAndReson(m, 3, 2.37, 0.9997); */ /* values here */ /* Modal4_setFiltGain(m, 0, 0.01); */ /* Modal4_setFiltGain(m, 1, 0.01); */ /* Modal4_setFiltGain(m, 2, 0.01); */ /* Modal4_setFiltGain(m, 3, 0.01); */ /* OnePole_clear(&m->onepole); */ BiQuad_clear(&m->filters[0]); BiQuad_clear(&m->filters[1]); BiQuad_clear(&m->filters[2]); BiQuad_clear(&m->filters[3]); BiQuad_setEqualGainZeroes(m->filters[0]); BiQuad_setEqualGainZeroes(m->filters[1]); BiQuad_setEqualGainZeroes(m->filters[2]); BiQuad_setEqualGainZeroes(m->filters[3]); /* stickHardness = 0.5; */ /* strikePosition = 0.561; */ 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; }