2014-04-10 17 views
7

Tôi tạo ra audiocontext và kết nối micro của tôi để phân tích:Frequency để nốt nhạc trong API Web âm thanh

context = new AudioContext(); 
microphone = context.createMediaStreamSource(stream); 
analyser = context.createAnalyser(); 
analyser.fftSize = 2048; 
microphone.connect(analyser); 

Sau đó, tôi có một số mảng với tần số:

fFrequencyData = new Uint8Array(analyser.frequencyBinCount); 
analyser.getByteFrequencyData(fFrequencyData); 

tôi muốn chơi một số nốt nhạc trước micrô và sau đó hiển thị ghi chú đó là gì. Tôi có thể nhận được tần suất nốt nhạc như thế nào? Ví dụ: A1 = 440,00 Hz, F # 3 = 1480,00 Hz.

Cảm ơn bạn!

+1

FFT không đủ cho điều này, nhưng đó là một bước đi đúng hướng. Dưới đây là một số mã cho thấy làm thế nào để làm điều đó trong Coffeescript: https://github.com/phenomnomnominal/tuner.coffee – Brad

Trả lời

7

Theo nhận xét của Brad - có thể bạn không muốn sử dụng Trình phân tích thời gian thực cho việc này. Bạn cũng có thể xem https://github.com/cwilso/PitchDetect - đối với câu hỏi chính xác bạn đã hỏi, phương thức "noteFromPitch", xung quanh dòng 194 của https://github.com/cwilso/PitchDetect/blob/master/js/pitchdetect.js, sẽ thực hiện việc này.

+0

Tôi biết làm thế nào để có được lưu ý từ tần số, nhưng tôi không biết làm thế nào tôi có thể nhận được giá trị chính xác của tần số . 440 hz hoặc 1480 hz và khác. –

+0

Bạn có nghĩa là bạn không biết cách lấy giá trị chính xác của tần số được biểu thị trong một nhóm trong mảng getByteFrequencyData? – cwilso

+0

Vâng, ý tôi là –

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