void Loop() { float phase = GetLocalTime(); int samples = 2048; int hz = 44100; var duration = Math.Round((double)samples / hz, 4); float[] X = new float[samples]; step++; for (int s = 0; s < samples; s++) { var f = Random.Next() % hz; var ampl = Math.Sin(f * 2d * Math.PI * s * (1d / hz) + phase); // ampl += // Math.Sin(120 * 43.06640625 * 2d * Math.PI * s * (1d / hz) + phase); // ampl += // Math.Sin(240 * Math.PI * s * (1d / hz) + phase); // ampl += // Math.Sin(880 * Math.PI * s * (1d / hz) + phase); // ampl += // Math.Sin(1350 * Math.PI * s * (1d / hz) + phase); // ampl += // Math.Sin(7252 * Math.PI * s * (1d / hz) + phase); // ampl /= 7; X[s] = (float)ampl; } var fft = Complex.FFT(X); // Print.Dump(fft, Stream.Hz); if (step >= 450) { for (int s = 0; s < samples; s++) { fft[s].Scale(1f); } double h = hz / (double)samples; for (int s = 0; s < samples / 2; s++) { var f = h * 0.5 + (s * h); var dB = System.Audio.dB.FromAmplitude(2 * fft[s].Magnitude); bool filterOut = !Ranges.IsInRange(f, dB); if (filterOut) { var n = samples - s; fft[s].Scale(0f); if (s > 0 && n > s && n >= 0 && n < samples) { fft[n].Scale(0f); } } } } Stream.Push(fft); }