Репозиторий NAudio github содержит проект NAudioWpfDemo
, который также включает в себя реализацию анализатора спектра.Я пытаюсь объяснить наиболее важные части ниже.Я вставляю соответствующий код в этот ответ, но вам нужно взглянуть на исходный код, чтобы понять его полностью.
Демонстрационный проект использует элемент WPF Polyline
(см. SpectrumAnalyser.xaml ) для визуализации данных БПФ.
<UserControl x:Class="NAudioWpfDemo.SpectrumAnalyser">
<Canvas Background="Black">
<Polyline x:Name="polyline1" Stroke="Yellow" StrokeThickness="1"/>
</Canvas>
</UserControl>
В SpectrumAnalyser.xaml.cs вы найдете код, который обновляет элемент Polyline
.Метод Update(Complex[] fftResults)
получает данные FFT и затем проходит по всем точкам данных в данных FFT (массив fftResults
) ...
for (int n = 0; n < fftResults.Length / 2; n+= binsPerPoint)
{
// averaging out bins
double yPos = 0;
for (int b = 0; b < binsPerPoint; b++)
{
yPos += GetYPosLog(fftResults[n+b]);
}
AddResult(n / binsPerPoint, yPos / binsPerPoint);
}
... для вызова GetYPosLog(Complex c)
для вычислениязначение дБ каждой точки данных FFT ...
double intensityDB = 10 * Math.Log10(Math.Sqrt(c.X * c.X + c.Y * c.Y));
... и добавление преобразованной точки данных к элементу polyline1
в методе AddResult(int index, double power)
Point p = new Point(CalculateXPos(index), power);
polyline1.Points.Add(p);