private void Timer_Tick(object sender, EventArgs e) { if (!ready) { return; } if (waterfallSpectrum == null) { return; } if (waterfallSpectrum.owner == null) { return; } int ipfill = input.fill(); while (ipfill >= _blockSize) { if ((inputData == null) || (inputData.Length != _blockSize)) { inputData = new double[_blockSize]; } input.retrieve(ref inputData); if (run) { WaterfallLine l = waterfallLines.NewforWrite(); l.setSize(_blockSize / 2, waterfallSpectrum.owner.sampleRate / 2); fftProcessor.runFFTdBFS(ref inputData, ref l.data); } ipfill -= _blockSize; } if (waterfallLines.missingLines > 0) { waterfallLines.updateBitmap(waterfallSpectrumScreen.colorTable, waterfallSpectrumScreen.gridF, waterfallSpectrumScreen.gridY, waterfallSpectrumScreen.gridCol); waterfallSpectrumScreen.Invalidate(); } }