public Led[] DoFrame() // TODO: Latency issues... { leds.FadeToBlackAllLeds(0.3f); // 0.3f * delta que es 20 ms se supone if (!newAudioAvailable) { return(this.leds); } newAudioAvailable = false; var y_in = FFTUtil.ProcessAudio(audio); if (y_in.Length < this.lastIndex) { return(this.leds); } var y = new double[this.lastIndex]; Array.Copy(y_in, 0, y, 0, this.lastIndex); y = y.Select(x => x < 0 ? 0 : x).ToArray(); double[] y_scaled = new double[this.lastIndex]; for (int i = 0; i < this.lastIndex; i++) { var freq = FFTUtil.GetFreqForIndex(i, FFT_SPACING_HZ); var val = y[i]; double scaled; if (freq <= BASS_MAX_FREQ) { scaled = Utils.Scale(val, 0, BASS_TOP_LIMIT, 0, 1); } else { scaled = Utils.Scale(val, 0, MID_TOP_LIMIT, 0, 1); } y_scaled[i] = scaled; } HSVColor[] yColors = new HSVColor[this.lastIndex]; for (int i = 0; i < this.lastIndex; i++) { yColors[i] = UtilsLED.ValueToHSV(this.ledCount / 2, this.freqArray[i], y_scaled[i]); } for (int i = 0; i < this.lastIndex; i++) { if (this.freqArray[i] == this.ledCount / 2) { break; } leds.AddSymmetricColorAroundLeds(this.freqArray[i], yColors[i]); } return(this.leds); }
public void Initialize(int ledCount) { audio = new AudioEngine(); audio.Start(); audio.NewData += OnNewAudioData; this.ledCount = ledCount; FFT_SPACING_HZ = FFT_MAXFREQ / ledCount; this.lastIndex = (int)(2500 / FFT_SPACING_HZ); this.freqArray = new int[this.lastIndex]; for (int i = 0; i < freqArray.Length; i++) { this.freqArray[i] = (int)Math.Floor(Utils.Scale(FFTUtil.GetFreqForIndex(i, FFT_SPACING_HZ), 0, 2500, 0, this.ledCount / 2 + 1)); } leds = new Led[ledCount]; for (int i = 0; i < ledCount; i++) { leds[i] = new Led(); } }