2014-04-10 7 views
7

I audiocontext erstellt und mit meinem Mikrofon Analysator:Frequenz Musiknote in Web Audio API

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

Dann habe ich einige Arrays mit Frequenzen:

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

Ich möchte ein paar Noten spielen vor dem Mikrofon und dann zeigen, welche Note es ist. Wie kann ich die Frequenz der Musiknote bekommen? Zum Beispiel A1 = 440,00 Hz, F # 3 = 1480,00 Hz.

Vielen Dank!

+1

FFT ist nicht genug dafür, aber es ist ein Schritt in die richtige Richtung. Hier ist ein Code, der zeigt, wie man es in Coffeescript macht: https://github.com/phenomnomnominal/tuner.coffee – Brad

Antwort

7

Laut Brad Kommentar - Sie wahrscheinlich nicht Realtime Analyzer dafür verwenden möchten. Sie können auch https://github.com/cwilso/PitchDetect auschecken - für die genaue Frage, die Sie gefragt haben, wird die "noteFromPitch" -Methode, um Linie 194 von https://github.com/cwilso/PitchDetect/blob/master/js/pitchdetect.js, dies tun.

+0

Ich weiß, wie man von der Frequenz Notiz bekommt, aber ich weiß nicht, wie ich den genauen Wert der Frequenz bekommen kann . 440 Hz oder 1480 Hz und andere. –

+0

Sie meinen, Sie wissen nicht, wie Sie den genauen Wert der Häufigkeit erhalten, die in einem Bucket im getByteFrequencyData-Array dargestellt wird? – cwilso

+0

Ja, das meine ich –

Verwandte Themen