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; }
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; }