Der Fehler verhindert Mikrofoneingang für Chrome Canary pro http://code.google.com/p/chromium/issues/detail?id=112367 bekommen ist nun behoben. Dieser Teil scheint zu funktionieren. Ich kann den Mikrofoneingang einem Audioelement zuweisen und die Ergebnisse über den Lautsprecher hören.Web Audio API Analyzer Knoten funktioniert nicht mit Mikrofon-Eingang
Aber ich möchte einen Analysator Knoten verbinden, um FFT zu tun. Der Analyseknoten funktioniert einwandfrei, wenn ich die Audioquelle auf eine lokale Datei einstelle. Das Problem besteht darin, dass der Analyseknoten, wenn er mit dem Mikrofon-Audiostream verbunden ist, nur den Basiswert zurückgibt, als ob er überhaupt keinen Audiostream hätte. (Es ist -100 immer und immer wieder, wenn Sie neugierig sind.)
Wer weiß, was ist los? Ist es noch nicht implementiert? Ist das ein Chrom Bug? Ich verwende 26.0.1377.0 unter Windows 7 und habe das getUserMedia-Flag aktiviert und über localhost über python's simpleHTTPServer bedient, so dass es Berechtigungen anfordern kann.
Code:
var aCtx = new webkitAudioContext();
var analyser = aCtx.createAnalyser();
if (navigator.getUserMedia) {
navigator.getUserMedia({audio: true}, function(stream) {
// audio.src = "stupid.wav"
audio.src = window.URL.createObjectURL(stream);
}, onFailure);
}
$('#audio').on("loadeddata",function(){
source = aCtx.createMediaElementSource(audio);
source.connect(analyser);
analyser.connect(aCtx.destination);
process();
});
Noch einmal, wenn ich auf die kommentierte Version gesetzt audio.src, es funktioniert, aber mit Mikrofon ist es nicht. Verfahren enthält:
FFTData = new Float32Array(analyser.frequencyBinCount);
analyser.getFloatFrequencyData(FFTData);
console.log(FFTData[0]);
ich auch die createMediaStreamSource habe versucht, mit und unter Umgehung des Audio-Element - Beispiel 4-https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/webrtc-integration.html. Auch nicht erfolgreich. :(
if (navigator.getUserMedia) {
navigator.getUserMedia({audio: true}, function(stream) {
var microphone = context.createMediaStreamSource(stream);
microphone.connect(analyser);
analyser.connect(aCtx.destination);
process();
}
Ich stelle mir es möglich sein könnte, die mediasteam in einen Puffer zu schreiben und dann dsp.js oder etwas verwenden fft zu tun, aber ich wollte zuerst überprüfen, bevor ich diesen Weg gehen.
Haben inspiziert Sie die gesamte FFTData Array? Ich habe bemerkt, dass du nur console.logging das erste Element. Der AnalyserNode sollte mit Mikrofoneingang arbeiten ... –
Die Prozessfunktion übergibt ihn weiter an einen Canvas-Visualizer, alle Werte sind -100. Ich überprüfe Dinge wie variable Scoping und werde es bald auf einem Mac versuchen. Ich weiß wirklich nicht, was passiert. – Newmu