que tiene un reproductor de audio utilizando NAudio y me gustaría mostrar una intensidad en tiempo real para cada banda de frecuencia.frecuencia NAudio intensidad de la banda
tengo un evento disparado por cada bloque de 1024 muestras:
public void Update(Complex[] fftResults)
{
// ??
}
lo que me gustaría tener es una serie de números que indican la intensidad de cada banda de frecuencia. Digamos que me gustaría dividir la ventana en 16 bandas.
Por ejemplo, cuando hay más frecuencias bajas que podría tener este aspecto:
░░░░░░░░░░░░░░░░
▓▓▓░░░░░░░░░░░░░
▓▓▓░░░░░░░░░░░░░
▓▓▓▓░░░░░░░░░░░░
▓▓▓▓▓░░░░░░░░░░░
▓▓▓▓▓▓▓▓░░░▓░░▓░
¿Qué debo poner en ese controlador de eventos si esto es posible con esos datos?
datos que vienen (Complejo []) ya ha sido transformada con la FFT. Es una transmisión estéreo.
primer intento:
double[] bandIntensity = new double[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
public void Update(Complex[] fftResults)
{
// using half fftResults because the others are just mirrored
int band = 0;
for (int n = 0; n < fftResults.Length/2; n++)
{
band = (int)((double)n/(fftResults.Length/2) * bandIntensity.Length);
bandIntensity[band] += Math.Sqrt(fftResults[n].X * fftResults[n].X + fftResults[n].Y * fftResults[n].Y);
bandIntensity[band] /= 2;
}
}
Lo anterior se hace algo, pero pienso demasiado entra en las dos primeras bandas, y yo estoy jugando shakira que no tiene que muchos bajos.
Gracias!
eres mi héroe. lol. –
Para la ventana, veo que se utiliza BlackmannHarrisWindow. Sin embargo, no probé el 10xLog10() aún, veré cómo eso cambia el gráfico. Y eliminaré el bin DC de 0Hz. –
incluso después de aplicar un bin de octava a la colección de bandas, todavía obtengo números extraños, demasiado en el lado izquierdo ... he convertido los números de la escala y a dBs –