2013-01-12 68 views
1

我的想法是創建一個使用Google「TTS Api」動態播放任何文本的JS作爲音頻文件。這裏是我的JS代碼的一部分,這是我在Chrome中執行文件時得到的錯誤。不知何故,我無法訪問我的陣列中的for-Loop中的一些音頻對象。TTS HTML5 Audio EventListener

數組text_part包含我想要使用的文本。 陣列audioElementListe包含不同的音頻對象。

的錯誤,我得到: 遺漏的類型錯誤:無法調用未定義

BTW英語不是我的母語方法「玩」,我是一個總的JS-初學者;)

audioElementListe = new Array(3); 
function start() 
{ 
    text_part = new Array(3); 
    text_part[0]='Hallo'; 
    text_part[1]='Florian'; 
    text_part[2]='Haha'; 

    for(var i = 0; i < text_part.length; i++) 
    { 
     audioElementListe[i] = new Audio(""); 
    } 

    for(var i = 0; i < text_part.length; i++) 
    { 
      var help = 0; 
      var url = "http://translate.google.com/translate_tts?tl=de&q="+text_part[i]; 
      audioElementListe[i] = new Audio(""); 
      document.body.appendChild(audioElementListe[i]); 
      audioElementListe[i].src=url; 
      audioElementListe[i].addEventListener('canPlay', function()     
      {audioElementListe[i].play();}, false); 

      //Error seems to be right here 
      audioElementListe[i].addEventListener('ended', function() 
      {audioElementListe[i++].play();}, false); 
    } 
    audioElementListe[0].play(); 
} 

編輯:通過不創建新的音頻對象,但改變它的來源,做了一個「解決方法」。

<html> 
<head> 
</head> 

<body> 

<script type="text/javascript"> 

var audioElement; 
var i; 
function start() 
{ 
     i=0; 
     text_part = new Array(3); 
     text_part[0]='Hallo'; 
     text_part[1]='Florian'; 
     text_part[2]='Haha'; 

     var url = "http://translate.google.com/translate_tts?tl=de&q="+text_part[i]; 
     audioElement = new Audio(""); 
     document.body.appendChild(audioElement); 
     audioElement.src=url; 
     audioElement.addEventListener('canPlay', function() {audioElement.play();}, false); 
     audioElement.addEventListener('ended', function() 
     { 

       i++; 
       if(i<text_part.length) 
      { 
       var url = "http://translate.google.com/translate_tts?tl=de&q="+text_part[i]; 
       audioElement.src=url; 
       audioElement.addEventListener('canPlay', function() {audioElement.play();}, false); 
       audioElement.play(); 
      } 

;}, false); 
     audioElement.play(); 
    } 

回答