CWToneGen newCWToneGen ( REAL gain, // dB REAL freq, // ms REAL rise, // ms REAL fall, // ms int size, // samples REAL samplerate) // samples/sec { CWToneGen cwt = (CWToneGen) safealloc (1, sizeof (CWToneGenDesc), "CWToneGenDesc"); setCWToneGenVals (cwt, gain, freq, rise, fall); cwt->size = size; cwt->sr = samplerate; cwt->osc.gen = newOSC (cwt->size, ComplexTone, (double) cwt->osc.freq, 0.0, cwt->sr, "CWTone osc"); // overload oscillator buf cwt->buf = newCXB (cwt->size, OSCCbase (cwt->osc.gen), "CWToneGen buf"); return cwt; }
DttSP_EXP void SetKeyerRamp (REAL newramp) { EnterCriticalSection(update_ok); ramp = newramp; setCWToneGenVals (gen, gain, freq, ramp, ramp); LeaveCriticalSection(update_ok); }
DttSP_EXP void SetKeyerFreq (REAL newfreq) { EnterCriticalSection(update_ok); freq = -newfreq; setCWToneGenVals (gen, gain, freq, ramp, ramp); LeaveCriticalSection(update_ok); }
DttSP_EXP void SetKeyerGain (REAL newgain) { if ((newgain >= 0.0) && (newgain <= 1.0)) { EnterCriticalSection(update_ok); gain = (REAL) (20.0 * log10 (newgain)); setCWToneGenVals (gen, gain, freq, ramp, ramp); LeaveCriticalSection(update_ok); } }