http://code.google.com/p/chromium/issues/detail?id=112367で Chrome Canary のマイク入力を妨げていたバグが修正されました。この部分は機能しているようです。マイク入力をオーディオ要素に割り当てて、結果をスピーカーから聞くことができます。
しかし、FFT を実行するためにアナライザー ノードを接続したいと考えています。オーディオ ソースをローカル ファイルに設定すると、アナライザー ノードは正常に動作します。問題は、マイク オーディオ ストリームに接続されている場合、アナライザー ノードが、オーディオ ストリームがまったくないかのようにベース値を返すことです。(興味があれば、何度でも -100 です。)
何が起きているか知っている人はいますか?まだ実装されていませんか?これはクロムのバグですか?私は Windows 7 で 26.0.1377.0 を実行しており、getUserMedia フラグを有効にしており、Python の simpleHTTPServer 経由で localhost を介してサービスを提供しているため、アクセス許可を要求できます。
コード:
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();
});
繰り返しますが、audio.src をコメント付きのバージョンに設定すると機能しますが、マイクでは機能しません。プロセスには以下が含まれます:
FFTData = new Float32Array(analyser.frequencyBinCount);
analyser.getFloatFrequencyData(FFTData);
console.log(FFTData[0]);
また、createMediaStreamSource を使用してオーディオ要素をバイパスしようとしました - 例 4 - https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/webrtc-integration.html。こちらも失敗。:(
if (navigator.getUserMedia) {
navigator.getUserMedia({audio: true}, function(stream) {
var microphone = context.createMediaStreamSource(stream);
microphone.connect(analyser);
analyser.connect(aCtx.destination);
process();
}
mediasteam をバッファに書き込んでから、dsp.js などを使用して fft を実行することは可能かもしれないと思いますが、その道を進む前に最初に確認したかったのです。