コード例 #1
0
    public float GetSpectrumData(AudioVisualizationStrategy strategy, int index = 0)
    {
        float spectrumData = 0.0f;

        switch (strategy)
        {
        case AudioVisualizationStrategy.Raw:
            spectrumData = SpectrumData[index];
            break;

        case AudioVisualizationStrategy.PostScaled:
            spectrumData = PostScaledSpectrumData[index];
            break;

        case AudioVisualizationStrategy.PostScaledMinMax:
            spectrumData = PostScaledMinMaxSpectrumData[index];
            break;

        case AudioVisualizationStrategy.PostScaledMax:
            spectrumData = PostScaledMax;
            break;

        case AudioVisualizationStrategy.PostScaledEnergy:
            spectrumData = PostScaledEnergy;
            break;
        }

        return(spectrumData);
    }
コード例 #2
0
        public float[] GetAllSpectrumData(AudioVisualizationStrategy strategy)
        {
            float[] spectrumData;

            switch (strategy)
            {
            case AudioVisualizationStrategy.Raw:
                spectrumData = SpectrumData;
                break;

            case AudioVisualizationStrategy.PostScaled:
                spectrumData = PostScaledSpectrumData;
                break;

            case AudioVisualizationStrategy.Smoothed:
                spectrumData = SmoothedSpectrumData;
                break;

            case AudioVisualizationStrategy.PostScaledMinMax:
                spectrumData = PostScaledMinMaxSpectrumData;
                break;

            default:
                throw new InvalidOperationException(string.Format("Invalid for GetAllSpectrumData: {0}", strategy));
            }

            return(spectrumData);
        }
コード例 #3
0
        public float[] GetSpectrumData(AudioVisualizationStrategy strategy, bool smoothed, AudioVisualizationProfile profile)
        {
            var scaledSpectrumData       = new float[SpectrumSize];
            var scaledMinMaxSpectrumData = new float[SpectrumSize];

            // Apply AudioVisualizationProfile
            var scaledMax     = 0.0f;
            var scaledAverage = 0.0f;
            var scaledTotal   = 0.0f;
            var scaleStep     = 1.0f / SpectrumSize;

            // 2: Scaled. Scales against animation curve
            for (int i = 0; i < SpectrumSize; i++)
            {
                var scaledValue = profile.ScaleCurve.Evaluate(scaleStep * i) * _spectrumData[i];
                scaledSpectrumData[i] = scaledValue;

                if (scaledSpectrumData[i] > scaledMax)
                {
                    scaledMax = scaledSpectrumData[i];
                }

                scaledTotal += scaledValue;
            }

            // 3: MinMax
            scaledAverage = scaledTotal / SpectrumSize;
            for (int i = 0; i < SpectrumSize; i++)
            {
                var scaledValue = scaledSpectrumData[i];
                var cutoff      = scaledAverage * profile.MinMaxThreshold;

                if (scaledValue <= cutoff)
                {
                    scaledValue *= profile.MinScale;
                }
                else if (scaledValue >= cutoff)
                {
                    scaledValue *= profile.MaxScale;
                }

                scaledMinMaxSpectrumData[i] = scaledValue;
            }

            // 4: Smoothed

            // We need a smoother for each combination of SpectrumSize/Iteration/Strategy
            var smootherId = $"{SpectrumSize}-{profile.AudioSmoothingIterations}-{strategy}";

            if (!_spectrumSmoothers.ContainsKey(smootherId))
            {
                _spectrumSmoothers.Add(smootherId, new SpectrumSmoother(SpectrumSize, profile.AudioSmoothingIterations));
            }

            var smoother = _spectrumSmoothers[smootherId];

            switch (strategy)
            {
            case AudioVisualizationStrategy.Raw:
                if (smoothed)
                {
                    return(smoother.GetSpectrumData(_spectrumData));
                }
                return(_spectrumData);

            case AudioVisualizationStrategy.Scaled:
                if (smoothed)
                {
                    return(smoother.GetSpectrumData(scaledSpectrumData));
                }
                return(scaledSpectrumData);

            case AudioVisualizationStrategy.ScaledMinMax:
                if (smoothed)
                {
                    return(smoother.GetSpectrumData(scaledMinMaxSpectrumData));
                }
                return(scaledMinMaxSpectrumData);

            default:
                throw new InvalidOperationException($"Invalid strategy: {strategy}");
            }
        }
コード例 #4
0
 protected float GetAudioData(AudioVisualizationStrategy audioVisualizationStrategy, int index)
 {
     // Get audio data
     return(_loopbackAudio.GetSpectrumData(audioVisualizationStrategy, index));
 }