Tôi có trình phát âm thanh sử dụng NAudio và tôi muốn hiển thị cường độ thời gian thực cho mỗi băng tần.Cường độ dải tần số âm thanh
tôi có một sự kiện được kích hoạt cho mỗi khối 1024 mẫu:
public void Update(Complex[] fftResults)
{
// ??
}
gì tôi muốn có là một mảng các số cho thấy cường độ của mỗi băng tần. Cho phép nói rằng tôi muốn chia cửa sổ thành 16 dải.
Ví dụ khi có nhiều nhịp bass nó có thể trông như thế này:
░░░░░░░░░░░░░░░░
▓▓▓░░░░░░░░░░░░░
▓▓▓░░░░░░░░░░░░░
▓▓▓▓░░░░░░░░░░░░
▓▓▓▓▓░░░░░░░░░░░
▓▓▓▓▓▓▓▓░░░▓░░▓░
tôi nên đặt gì vào đó xử lý sự kiện nếu điều này là có thể với dữ liệu đó?
Dữ liệu đến (Phức tạp []) đã được chuyển đổi bằng FFT. Đây là luồng âm thanh nổi.
Trước tiên hãy thử:
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;
}
}
Trên đây là làm cái gì nhưng tôi nghĩ quá nhiều đi vào hai ban nhạc đầu tiên, và tôi đang chơi shakira mà không có nhiều âm bass.
Cảm ơn!
bạn là anh hùng của tôi. lol. –
Đối với cửa sổ tôi thấy rằng BlackmannHarrisWindow được sử dụng. Tuy nhiên tôi đã không thử 10xLog10() được nêu ra, tôi sẽ thấy làm thế nào mà thay đổi đồ thị. Và tôi sẽ tháo thùng DC 0Hz. –
ngay cả sau khi áp dụng một thùng octave để thu thập ban nhạc, tôi vẫn nhận được số lạ, vẫn còn quá nhiều ở phía bên trái ... tôi đã chuyển đổi các số tỷ lệ y thành dBs –