#javascript #html #html5-audio #microphone #web-audio-api
#javascript #HTML #html5-аудио #микрофон #веб-аудио-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);
});
};
Но Chrome (и Opera) говорят
Uncaught TypeError: Failed to execute 'webkitGetUserMedia' on 'Navigator': 3 arguments required, but only 2 present.
Зачем ему нужны дополнительные аргументы?
Кто-нибудь может, пожалуйста, помочь мне с javascript для этого?
Спасибо.
Комментарии:
1. ошибка обратного вызова, если я прав.
Selecting a media source
@ ~50%: html5rocks.com/en/tutorials/getusermedia/intro2. Google
MDN getUserMedia
->navigator.getUserMedia ( constraints, successCallback, errorCallback );
Ответ №1:
API для getUserMedia требует 3 аргумента.
Пусть ограничения будут первым аргументом метода.
Пусть successCallback — это обратный вызов, указанный вторым аргументом метода.
Пусть errorCallback будет обратным вызовом, указанным третьим аргументом метода.
Обратитесь к спецификации mediacapture-stream
Итак, все, что вам нужно сделать, это добавить 3-й аргумент, который является обратным вызовом с ошибкой. Что-то вроде этого сработало бы.
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")});
};
Вы можете посмотреть на этот фрагмент кода, который делает что-то подобное для справки.