javascript - MediaStreamRecorder och TypeScript Oavbruten TypeError
Jag utvecklar för närvarande en ljudinspelare som använder användarens PC-mikrofon, vilket fungerar bra. Men när jag vill spela in ljudet får jag detta typfel:
audioHandler.ts:45 Oupptagen TypeError: MediaStreamRecorder är inte en funktion
Det här är koden:
/// <reference path="../references.d.ts" />
//This component handles all things audio related
export = Scaut.AudioHandler;
module Scaut.AudioHandler {
var n = <any>navigator;
var stream = <any>"";
var stopRecording = <any>"";
var mediaRecorder = <any>"";
//var MediaStreamRecorder = <any>"";
//Check if microphone is ok
export function hasGetUserMedia() {
n.getUserMedia = n.getUserMedia ||
n.webkitGetUserMedia ||
n.mozGetUserMedia;
if (n.getUserMedia) {
n.getUserMedia({ audio: true},
function (stream) {
var audio = <any>"";
audio = document.getElementById('audioRecord');
audio.src = window.URL.createObjectURL(stream);
audio.onloadedmetadata = function (e) {
audio.play();
};
},
function (err) {
alert("The following error occured: " + err.name);
}
);
} else {
alert("getUserMedia not supported");
}
recordAudio(stream);
}
//Record audio
export function recordAudio(stream) {
mediaRecorder = new MediaStreamRecorder(stream);
console.log("Stream: "+stream)
mediaRecorder.mimeType = 'audio/ogg';
mediaRecorder.audioChannels = 1;
mediaRecorder.ondataavailable = function (blob) {
// POST/PUT "Blob" using FormData/XHR2
var blobURL = URL.createObjectURL(blob);
//document.write('<a href="' + blobURL + '">' + blobURL + '</a>');
console.log("Blob: "+blob)
console.log("BlobUrl: "+blobURL)
};
mediaRecorder.start(3000);
}
Kan någon visa mig åt rätt håll?
Svar #1
Det ser ut som att ditt fel är vid kompileringstid (eftersom felmeddelandet pekar på din .ts-fil).
Felet betyder att kompileringen inte känner till typen MediaStreamRecorder, vilket jag antar att du importerar från ett JavaScript-bibliotek.
För att rensa felet kan du göra en enkel typdefinition för det med följande kodrad...
declare var MediaStreamRecorder: any;
Detta kommer att rensa felet, men kommer inte att ge dig någon ytterligare typkontroll eller automatisk komplettering för typen. Du kan lägga till mer detaljer i din typdefinition för att förbättra denna situation om du behöver.
