2013-01-09 19 views
11

クロマカナリアのhttp://code.google.com/p/chromium/issues/detail?id=112367に対応するマイク入力を妨げるバグが修正されました。この部分は機能しているようです。私はマイク入力をオーディオ要素に割り当て、その結果をスピーカーから聞くことができます。WebオーディオAPIアナライザノードがマイク入力で動作しない

しかし、私は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を書き込み、その後、FFTを行うためにdsp.jsか何かを使用することが可能であるかもしれないと想像が、私はその道を行く前に私が最初にチェックしたい。

+0

FFTData配列全体を検査しましたか?私はあなたがただのコンソールであることに気づいた。 AnalyserNodeはマイク入力で動作するはずです... –

+0

処理機能はさらにキャンバスビジュアライザに渡します。値はすべて-100です。私は変数スコープのようなものをチェックしていて、すぐにMacでそれを試してみようとしています。本当に何が起こっているのか分からない。 – Newmu

答えて

7

2つ目の例では、マイクをローカルに定義し、別の関数でアナライザでストリームにアクセスしようとしていましたが、すべてのWeb Audio APIノードをグローバルにして安心しました。アナライザノードが-100以外の値を報告するのに数秒かかります。興味のある作業コード:

// Globals 
var aCtx; 
var analyser; 
var microphone; 
if (navigator.getUserMedia) { 
    navigator.getUserMedia({audio: true}, function(stream) { 
     aCtx = new webkitAudioContext(); 
     analyser = aCtx.createAnalyser(); 
     microphone = aCtx.createMediaStreamSource(stream); 
     microphone.connect(analyser); 
     // analyser.connect(aCtx.destination); 
     process(); 
    }); 
}; 
function process(){ 
    setInterval(function(){ 
     FFTData = new Float32Array(analyser.frequencyBinCount); 
     analyser.getFloatFrequencyData(FFTData); 
     console.log(FFTData[0]); 
    },10); 
} 

ライブオーディオを聞きたい場合は、上記のようにアナライザーを接続先(スピーカー)に接続することができます。しかし、いくつかの素敵なフィードバックに注意してください!

+0

これは常に-100を超える値を与えます。あなたは何が問題だったのか覚えていますか?ありがとう! – jbartolome

+0

ここでのポイントは、マイクが 'aCtx.createMediaStreamSource(stream);'として作成されていることです。 'audio.src = URL.createObjectURL(stream);'のようなオーディオノードで作成すると、オーディオアナライザの値が返されません。 –

+0

こんにちは!私はすべての負の周波数を得ていますが、-100はありません。正の値もないはずですか? – monisha

関連する問題