2015-09-28 127 views
1

我目前正在開發一種使用用戶PC麥克風的錄音機,它工作正常。然而,當我要錄製的聲音,我得到這種類型的錯誤:MediaStreamRecorder和TypeScript未捕獲TypeError

audioHandler.ts:45 Uncaught TypeError: MediaStreamRecorder is not a function

這是代碼:

/// <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); 
    } 

任何人都可以點我在正確的方向?

+0

您是否在您的文件中導入了https://github.com/streamproc/MediaStreamRecorder? – Overmachine

回答

0

它看起來像你的錯誤是在編譯時(因爲錯誤信息指向你的.ts文件)。

該錯誤意味着編譯不知道MediaStreamRecorder類型,我假設您從JavaScript庫導入。

要清除錯誤,你可以使用像下面的代碼做它一個簡單的類型定義...

declare var MediaStreamRecorder: any; 

這將清除錯誤,但不會給你任何進一步的類型檢查或類型的自動完成。 You can add more detail to your type definition如果需要,可以改善這種情況。

+1

謝謝芬頓!那正是我所期待的。其實,我剛剛買了你的書Pro TypeScript,今天收到它,期待着深入。 –

+0

不客氣 - 並感謝您購買我的書:) – Fenton

相關問題