public override void tick() { SignalBuffer dbFM = getSignalInputBuffer(ioFM); SignalBuffer dbAM = getSignalInputBuffer(ioAM); SignalBuffer dbPWM = getSignalInputBuffer(ioPWM); SignalBuffer dbSync = getSignalInputBuffer(ioSyncIn); SignalBuffer dbout = getSignalOutputBuffer(io0); SignalBuffer dboutninety = getSignalOutputBuffer(io90); SignalBuffer dbtrig = getSignalOutputBuffer(ioSyncOut); if (!_active) { return; } if ((dbout == null) && (dboutninety == null) && (dbtrig == null)) { return; } double dphi0 = genF / owner.sampleRate; double amp = Math.Pow(10.0, genAmp / 20.0); if (!inAmp) { amp *= MathUtils.AmplitudeFromRMS(genWaveForm); } for (int i = 0; i < owner.blockSize; i++) { if (dbSync != null) { if ((dbSync.data[i] >= 0) && (lastSync < 0)) { genPhi = 0; } lastSync = dbSync.data[i]; } else { lastSync = 0; } double zero = 0.0; double ninety = 0.0; double g = amp; if (dbAM != null) { if (AMnoOfs) { g *= dbAM.data[i]; } else { g *= dbAM.data[i] + 1.0; } } double pw = genPWM; if (dbPWM != null) { pw += dbPWM.data[i]; } MathUtils.waveForm(genWaveForm, ref zero, ref ninety, genPhi, pw); if (dbout != null) { dbout.data[i] = g * zero; } if (dboutninety != null) { dboutninety.data[i] = g * ninety; } if (dbtrig != null) { dbtrig.data[i] = MathUtils.trig(genPhi); } double dphi = dphi0; if (dbFM != null) { if (FMlog) { dphi *= Math.Pow(2, dbFM.data[i]); } else { dphi *= (1 + dbFM.data[i]); } } genPhi += dphi; if ((genPhi < 0) || (genPhi >= 1)) { genPhi -= Math.Floor(genPhi); } } }