2014-04-10 7 views
7

utworzonego audiocontext i podłączony mikrofon do analizatora:częstotliwości do nuta w Web Audio API

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

Potem dostałem kilka tablic z częstotliwością:

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

chcę zagrać kilka nut przed mikrofonem, a następnie pokaż, co to jest. Jak mogę uzyskać częstotliwość nuty? Na przykład A1 = 440,00 Hz, F # 3 = 1480,00 Hz.

Dziękujemy!

+1

FFT to za mało, ale jest to krok we właściwym kierunku. Oto kod pokazujący, jak to zrobić w Coffeescript: https://github.com/phenomnomnominal/tuner.coffee – Brad

Odpowiedz

7

Jak na komentarz Brada - prawdopodobnie nie chcesz używać do tego Realtime Analyzer. Możesz również sprawdzić, https://github.com/cwilso/PitchDetect - dokładne pytanie, które zadałeś, metoda "noteFromPitch", około linii 194 z https://github.com/cwilso/PitchDetect/blob/master/js/pitchdetect.js, zrobi to.

+0

Wiem, jak uzyskać notatkę z częstotliwości, ale nie wiem, jak mogę uzyskać dokładną wartość częstotliwości . 440 Hz lub 1480 Hz i inne. –

+0

Masz na myśli, że nie wiesz, jak uzyskać dokładną wartość częstotliwości reprezentowanej w wiadrze w tablicy getByteFrequencyData? – cwilso

+0

Tak, mam na myśli –