2014-04-10 7 views
7

ho creato audiocontext e collegato il mio microfono per analizzatore:frequenza di nota musicale in Web API Audio

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

poi ho avuto alcuni array con frequenze:

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

voglio giocare alcune note musicali prima del microfono e poi mostra quale nota è. Come posso ottenere la frequenza della nota musicale? Ad esempio, A1 = 440,00 Hz, F # 3 = 1480,00 Hz.

Grazie!

+1

FFT non è sufficiente per questo, ma è un passo nella giusta direzione. Ecco un codice che mostra come farlo in Coffeescript: https://github.com/phenomnomnominal/tuner.coffee – Brad

risposta

7

Come da commento di Brad, probabilmente non si desidera utilizzare Realtime Analyzer per questo. Puoi anche dare un'occhiata a https://github.com/cwilso/PitchDetect - per la domanda esatta che hai chiesto, il metodo "noteFromPitch", attorno alla linea 194 di https://github.com/cwilso/PitchDetect/blob/master/js/pitchdetect.js, lo farà.

+0

So come ottenere note dalla frequenza, ma non so come posso ottenere il valore esatto della frequenza . 440 hz o 1480 hz e altro. –

+0

Vuoi dire che non sai come ottenere il valore esatto della frequenza rappresentata in un bucket nell'array getByteFrequencyData? – cwilso

+0

Sì, intendo lo –

Problemi correlati