public IDictionary <PortIdentifier, List <LedColor> > GenerateColors(ColorGenerationMethod generationMethod, List <PortIdentifier> ports, ICacheProvider cache, float[] fftBuffer) { var points = CalculateSpectrumPoints(1.0, fftBuffer); var result = new Dictionary <PortIdentifier, List <LedColor> >(); if (generationMethod == ColorGenerationMethod.PerPort) { foreach (var port in ports) { var config = cache.GetPortConfig(port); var colors = GenerateColorSpectrum(cache.GetDeviceConfig(port).LedCount, points); result.Add(port, colors); } return(result); } else if (generationMethod == ColorGenerationMethod.SpanPorts) { var totalLedCount = ports.Select(p => cache.GetDeviceConfig(p).LedCount).Sum(); var colors = GenerateColorSpectrum(totalLedCount, points); var sliceOffset = 0; foreach (var port in ports) { var ledCount = cache.GetDeviceConfig(port).LedCount; result.Add(port, colors.GetRange(sliceOffset, ledCount)); sliceOffset += ledCount; } return(result); } return(null); }
public IDictionary <PortIdentifier, List <LedColor> > GenerateColors(ColorGenerationMethod generationMethod, List <PortIdentifier> ports, ICacheProvider cache, float[] fftBuffer) { if (generationMethod == ColorGenerationMethod.PerPort) { var result = new Dictionary <PortIdentifier, List <LedColor> >(); List <LedColor> colors = null; List <SpectrumPointData> points = null; foreach (var port in ports) { var ledCount = cache.GetDeviceConfig(port).LedCount; if (UpdateFrequencyMappingIfNecessary(ledCount) || points == null) { points = CalculateSpectrumPoints(1.0, fftBuffer); colors = GenerateColors(points); } result.Add(port, colors.ToList()); } return(result); } else if (generationMethod == ColorGenerationMethod.SpanPorts) { var totalLedCount = ports.Select(p => cache.GetDeviceConfig(p).LedCount).Sum(); UpdateFrequencyMappingIfNecessary(totalLedCount); var points = CalculateSpectrumPoints(1.0, fftBuffer); var colors = GenerateColors(points); return(EffectUtils.SplitColorsPerPort(colors, ports, cache)); } return(null); }