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.