0

私は JavaScript を初めて使用し、getUserMedia API を使用してオンライン オーディオ レコーダーを作成しようとしています。私が抱えている問題は、navigator.getUserMedia を呼び出そうとするたびに、成功コールバック関数が定義されていないため、関数ではないというエラーが発生することです。コールバックの後にかっこを追加すると機能しますが、createMediaStreamSource を呼び出すと無効な MediaStream ソースに関するエラーが発生します。

getUserMedia をオンラインで使用する例をいくつか見つけましたが、オンラインで明らかに動作しているにもかかわらず、コンピューターから実行しようとすると同じ問題が発生します。

以下は私のコードです。ありがとう!

window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new AudioContext();


//tests if browser is compatible with getUserMedia API
function hasGetUserMedia()
{
return !!(navigator.getUserMedia || navigator.webkitGetUserMedia ||      navigator.mozGetUserMedia || navigator.msGetUserMedia);
}

//successful callback for getUserMedia
function gotStream(stream)
{    
console.log('Compatible')

//set up microphone input to Web Audio API
var mic = context.createMediaStreamSource(stream);
var filter = context.createBiquadFilter();

//connect
mic.connect(filter);
filter.connect(context.destination);

console.log('Here')
}

//error Callback for getUserMedia
function errorCallback()
{
alert('Error capturing audio');
}

//initial function
function testGetUserMedia()
{
if (!hasGetUserMedia())
{
    alert("getUserMedia() is not supported in your browser");
    window.close();
}

//if Compatible
getUserMedia({audio:true}, gotStream, errorCallback);

}

window.addEventListener('load', testGetUserMedia);
4

1 に答える 1

1

まず、指定したコードではgetUserMedia、ナビゲーター コンテキスト ( navigator.getUserMedia) ではなく、コンテキストで呼び出していthisます。navigator.getUserMedia第二に、ブラウザ固有ではないため、呼び出しだけでは不十分です。ブール値を返すのではなく、実際のgetUserMedia関数を返すことをお勧めします。hasGetUserMedia

ただし、これら 2 つの問題を修正したところ、コードに問題はありませんでした。それはうまくいきました。簡単なテストとして、次のように変更しました。

getUserMedia({audio:true}, gotStream, errorCallback);

navigator.webkitGetUserMedia({audio:true}, gotStream, errorCallback);

:: Chrome 37 で動作

于 2014-10-08T21:35:36.937 に答える