2013-02-09 23 views
25

Tôi đã sử dụng các dữ liệu FFT từ nút Analyzer sử dụng phương pháp getByteFrequencyData trong API Web âm thanh để tạo ra một visualizer phổ như hình dưới đây:Dữ liệu FFT trong API âm thanh web tương ứng với những gì?

Spectrum Visualizer

Trong trường hợp này tôi có 256 thùng của dữ liệu. Chính xác những con số này tương ứng với cái gì? Là mức decibel của mỗi thành phần tần số. Nếu vậy làm thế nào để tôi biết giá trị của tần số của mỗi thùng tương ứng với?

Tôi muốn biết vì vậy tôi có thể thử nghiệm trong việc xây dựng một eq đồ họa và vì vậy muốn biết tại điểm nào để chỉ ra các dải bộ lọc. Lý tưởng nhất là tôi muốn đại diện cho tần số từ 20Hz đến 20kHz và khoảng thời gian giữa các giá trị đó cho phù hợp.

Cảm ơn bạn đã được trợ giúp.

Trả lời

27

có, getByteFrequencyData kết quả trong một mảng chuẩn hóa giá trị từ 0 đến 255. (nó sao chép dữ liệu vào mảng được truyền vào).

các băng tần được chia đều, vì vậy mỗi phần tử N của mảng của bạn tương ứng với:

N * samplerate/fftSize 

vậy, bin đầu tiên là 0.
và, giả sử một samplerate của 44100 và một <analyzerNode>.fftSize 512 thứ hai sẽ là: 86,13 Hz, và vân vân ...

bạn sẽ tìm thấy hai câu hỏi này và câu trả lời hữu ích, trên dsp và trên SO:

Lưu ý rằng độ dài mẫu thử của bạn bằng một nửa số <analyzerNode>.fftSize, giới hạn hiệu quả dải tần số xuống một nửa so với mẫu thử.

+0

getByteFrequencyData không trả về bất kỳ thứ gì; thay vào đó, nó sao chép các giá trị dữ liệu tần số (0-255) _into_ mảng unsigned (Uint8Array() trong javascript) mà bạn chuyển vào phương thức như một tham số. [Bản nháp W3C - API âm thanh web - getByteFrequencyData] (https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AnalyserNode). Chỉ trong trường hợp bất cứ ai bị bắt gặp cố gắng sử dụng một số hình thức trả về giá trị từ phương thức này gọi ... –

+0

@fettereddingoskidney, cảm ơn, cập nhật. – kr1

+0

rock on! Không cố gắng chọn lựa quá mức:] –

5

Với 256 thùng, mỗi thùng sẽ cách nhau ~ 86 Hz (tỷ lệ mẫu 44100 kHz/fftSize, trong đó fftSize gấp đôi số thùng). Vì vậy, bạn bắt đầu ở số không và tăng lên ở bước tăng 86 Hz từ đó.

Giá trị thực tế trong các thùng chỉ là đại diện cho tần suất của mỗi tần số trong tín hiệu (tức là tần số "lớn").

+0

api âm thanh trên web trả về một số thùng bằng một nửa kích thước fftSize. vì vậy, IMHO bạn nên chia cho 'bins.length * 2' hoặc tốt hơn bằng cách sử dụng' fftSize' trực tiếp, xem thêm câu trả lời của tôi. – kr1

Các vấn đề liên quan