示例#1
0
        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);
        }
示例#2
0
        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);
        }