麦克风到扬声器流(JS)

eds*_*999 2 javascript html5 microphone html5-audio web-audio-api

我一直在玩HTML5,但我无法完成以下任务.javascript必须要求获得访问麦克风的权限,然后必须将麦克风输入流式传输到计算机扬声器.这是我的javascript:

navigator.getUserMedia = ( navigator.getUserMedia    || navigator.webkitGetUserMedia ||
                           navigator.mozGetUserMedia ||navigator.msGetUserMedia);
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);
    });
};
Run Code Online (Sandbox Code Playgroud)

但Chrome(和Opera)说

Uncaught TypeError: Failed to execute 'webkitGetUserMedia' on 'Navigator': 3 arguments required, but only 2 present. 
Run Code Online (Sandbox Code Playgroud)

为什么需要更多的论点?任何人都可以帮我解决这个问题吗?

谢谢.

not*_*tup 8

getUserMedia的API需要3个参数.

让约束成为方法的第一个参数.

让successCallback成为方法第二个参数指示的回调.

让errorCallback成为方法第三个参数指示的回调.

请参阅mediacapture-stream规范

所以你需要做的就是添加一个第三个参数,这是一个错误回调.像这样的东西会起作用.

navigator.getUserMedia = ( navigator.getUserMedia    || navigator.webkitGetUserMedia ||
                       navigator.mozGetUserMedia ||navigator.msGetUserMedia);
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);
    }, function (){console.warn("Error getting audio stream from getUserMedia")});
};
Run Code Online (Sandbox Code Playgroud)

您可以查看这段代码,它们做了类似事情以供参考.