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 void SingWave_setFreq(CSOUND *csound, SingWave *p, MYFLT aFreq) { MYFLT temp = p->rate; p->rate = (MYFLT)p->wave->flen * aFreq * csound->onedsr; temp -= p->rate; temp = FABS(temp); Envelope_setTarget(&p->pitchEnvelope, p->rate); Envelope_setRate(csound, &p->pitchEnvelope, p->sweepRate * temp); // Envelope_print(csound, &p->pitchEnvelope); }
static void Modal4_strike(CSOUND *csound, Modal4 *m, MYFLT amplitude) { int i; MYFLT temp; Envelope_setRate(csound, &m->envelope, FL(1.0)); Envelope_setTarget(&m->envelope, amplitude); OnePole_setPole(&m->onepole, FL(1.0) - amplitude); Envelope_tick(&m->envelope); m->w_time = FL(0.0); //m->w_lastOutput = FL(0.0); m->w_allDone = 0; /* wave->reset(); */ for (i=0;i<4;i++) { if (m->ratios[i] < 0) temp = - m->ratios[i]; else temp = m->ratios[i] * m->baseFreq; BiQuad_setFreqAndReson(m->filters[i], temp, m->resons[i]); } }
static void VoicForm_quiet(VOICF *p) { Envelope_keyOff(&(p->voiced.envelope)); Envelope_setTarget(&p->noiseEnv, FL(0.0)); }
static void VoicForm_setVoicedUnVoiced(VOICF *p, MYFLT vGain, MYFLT nGain) { Envelope_setTarget(&(p->voiced.envelope), vGain); Envelope_setTarget(&p->noiseEnv, nGain); }