NAudio를 사용하는 오디오 플레이어가 있고 각 주파수 대역에 대해 실시간 강도를 표시하고 싶습니다.NAudio 주파수 대역 강도
I 이벤트가 1024 개 샘플의 각각의 블록에 대해 실행 된 경우 :
public void Update(Complex[] fftResults)
{
// ??
}
것은 무엇 제가하고 싶은 것은, 각 주파수 대역의 강도를 나타내는 수치의 배열이다. 창을 16 개의 밴드로 나누고 싶습니다. 예를 들어
는 다음과 같이 수 많은베이스 주파수가 :
이 데이터와 가능하다면 내가 그 이벤트 처리기에 투입해야합니까░░░░░░░░░░░░░░░░
▓▓▓░░░░░░░░░░░░░
▓▓▓░░░░░░░░░░░░░
▓▓▓▓░░░░░░░░░░░░
▓▓▓▓▓░░░░░░░░░░░
▓▓▓▓▓▓▓▓░░░▓░░▓░
?
오는 데이터 (Complex [])는 이미 FFT로 변환되었습니다. 스테레오 스트림입니다.
첫 번째 시도 :
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;
}
}
위하고있다 뭔가하지만 난 너무 많은 처음 두 밴드로 간다 생각하고, 내가 그 많은 저음이없는 샤키라를 연주하고있다.
감사합니다.
당신은 내 영웅입니다. 롤. –
윈도우의 경우 BlackmannHarrisWindow가 사용 된 것을 볼 수 있습니다. 그러나 나는 10xLog10()을 아직 시도하지 않았지만 그래프가 어떻게 바뀌는 지 보게됩니다. 그리고 0Hz DC bin을 제거합니다. –
옥타브 빈을 콜렉션에 적용한 후에도 여전히 왼쪽에 너무 많은 별난 숫자가 있습니다 ... 나는 y 스케일을 dB로 변환했습니다. –