protected virtual void UpdateFrequencyMapping() { _maximumFrequencyIndex = Math.Min(AudioDelegations.FftInxAcquired(MaximumFrequency) + 1, _maxFftIndex); _minimumFrequencyIndex = Math.Min(AudioDelegations.FftInxAcquired(MinimumFrequency), _maxFftIndex); int actualResolution = SpectrumResolution; int indexCount = _maximumFrequencyIndex - _minimumFrequencyIndex; double linearIndexBucketSize = Math.Round(indexCount / (double)actualResolution, 3); _spectrumIndexMax = _spectrumIndexMax.CheckBuffer(actualResolution, true); _spectrumLogScaleIndexMax = _spectrumLogScaleIndexMax.CheckBuffer(actualResolution, true); double maxLog = Math.Log(actualResolution, actualResolution); for (int i = 1; i < actualResolution; i++) { int logIndex = (int)((maxLog - Math.Log((actualResolution + 1) - i, (actualResolution + 1))) * indexCount) + _minimumFrequencyIndex; _spectrumIndexMax[i - 1] = _minimumFrequencyIndex + (int)(i * linearIndexBucketSize); _spectrumLogScaleIndexMax[i - 1] = logIndex; } if (actualResolution > 0) { _spectrumIndexMax[_spectrumIndexMax.Length - 1] = _spectrumLogScaleIndexMax[_spectrumLogScaleIndexMax.Length - 1] = _maximumFrequencyIndex; } }
public IEnumerable <Point3D> CreateWave() { //UpdateFrequencyMapping(); float[] fftBuffer = new float[(int)FftSize]; fftBuffer = AudioDelegations.FftAcquired(); //get the fft result from the spectrum provider SpectrumPointData[] spectrumPoints = CalculateSpectrumPoints(MaxOffset, fftBuffer); return(GeneratePoints(spectrumPoints, MaxHeight)); }