• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] PDF vorlesen lassen

Hmm. Warum das bei mir dann nicht funktioniert, sondern 50% CPU macht?

Muss mir deinen und Minis Vorschlag nochmal genauer anschauen.
 
Das ist Version 33. OS: Windows 8.1 als 64bit Edition. Als Add-On ist da nur dein Canvas-Blocker installiert.

Die Demoseite im Link oben funktioniert;
lade ich aber das Repo von Githup und benutze dessen Code, gibts 50% CPU; dabei besteht der Unterschied nur darin, das hier der Processor als lokale Kopie genutzt wird, während im Link oben der selbe Prozessor, vom gleichen Repro, aus dem Netzt geladen wird...

Verstehe nicht wo das Problem ist.
Was sagt ihr?
 
Also ich habe eben mal deinen Link aus Beitrag #25 auf meiner ollen XP TEST Maschine mit aktualisiertem Firefox probiert und es läuft dort das ohne Problem.
Windows XP Professional Version 2002 Service Pack 3 - Intel Pentium E2200 mit 2.2 GHz - 2 GB RAM
 
Hallo, irgendwie muss in meinem Firefox der Wurm drin gewesen sein, habe ihn jetzt neu installiert und jetzt funktioniert der der link azs Beitrag #25 wieder.

Also habe ich deinen Code aus Beitrag #13 getestet (um trim() erweitert, wie von kkapsner vorgeschlagen), jedoch wird der Text nicht von der TTS vorgelesen!

Vielleicht kannst bitte du (oder jemand anderes) da nochmal drüber schauen.

Ich poste nachher noch den aktuellen Codw (mit pdftotext) den ich verwende
 
Zuletzt bearbeitet:
Hast du den Code aus Beitrag #13 so getestet wie ich geschrieben habe?

ja, aber ich bekomme das im Zusammenspiel mit dem "pdf to text" Teil nicht eingebunden.


Folgender Code habe ich zunächst verwendet:

Code:
<html>
<head>
  <title>Converting PDF To Text using pdf.js</title>
  <style>
  html, body { width: 100%; height: 100%; overflow-y: hidden; padding: 0; margin: 0; }
  body { font: 13px Helvetica,sans-serif; }
  iframe { border: none; width: 100%; height: 100%; }
  #output { padding: 10px; box-shadow: 0 0 5px #777; border-radius: 5px; margin: 10px; display:none;}
  #processor { height: 70px; }
  #error {
            margin: 1em 0;
            color: #f00;
            font-weight: bold;
        }
  </style>
  </head>

<body>
<div id="tts_demo"></div>

<div id="error"></div>

  <div id="pdftotext">
    <!-- embed the pdftotext web app as an iframe -->
    <iframe id="processor" src="../"></iframe>
    
    <!-- a container for the output -->
    <div id="output"></div>
  </div>
  
  <div>
    <!-- the PDF file must be on the same domain as this page -->
    <iframe id="input" src="./Predikt_Daniel_4_Lebenslust.pdf"></iframe>
  </div>
  
    
<!-- the scripts -->
 <!-- google tts-script -->
  <!-- jquery einbinden -->
  <script type="text/javascript" src="./jquery-1.9.1.min.js"></script>
  <!-- google-tts einbinden -->
  <script type="text/javascript" src="./src/google-tts.js"></script>
  <!-- soundmanager einbinden -->
  <script type="text/javascript" src="./soundmanager2.js"></script>
  <!-- google-tts- setup -->
  <!-- google-tts- setup -->
  <script type="text/javascript">
    $(document).ready(function(){
        soundManager.setup({
            url: '/',
            preferFlash: false,
            onready: function () {
			    alert('test');
                if (!window.GoogleTTS) {
                    $("#error").text("Sorry, the google-tts script couldn't be loaded.");
                    return;
                } else {
                    var HTML = '\
                    <div> \
                        <label for="demo_language">Language:</label> \
                        <select id="demo_language"> \
                            <option value="" disabled="disabled">(Select language)</option> \
                        </select> \
                    </div> \                    
                    ';
                    $("#tts_demo").html(HTML);
                }

                var googleTTS = new window.GoogleTTS();

                // setup language options
                $.each(googleTTS.languages(), function (key, value) {
                    $('#demo_language').append('<option value="' + key + '">' + value + '</option>');
                });

                // play
                $("#demo_play").click(function () {
                    var currentSentence = '';
                    function playSentence (sentences) {
                        if (sentences.length) {
                            currentSentence = sentences.shift().trim();
                            if (currentSentence.length) {
                                googleTTS.play(currentSentence, $("#demo_language").val(), function (err) {
                                    if (err) {
                                        $("#error").text(err.toString());
                                    } else {
                                        window.setTimeout(playSentence(sentences), 3000);
                                    }
                                });
                            } else {
                                playSentence(sentences);
                            }
                        } else {
                            console.log('Finished playing');
                        }
                    }

                    
                });

                // defaults
                $("#demo_language").val('de');
                
                
                // available player
                googleTTS.getPlayer(function (err, player) {
                    if (err) {
                        return $("#error").text(err.toString());
                    }

                    if (player) {
                        $("#tts_player").text(player.toString());
                    } else {
                        $("#tts_player").text('None available');
                    }
                });
            }
        });
    });
</script>
 <!-- pdf to text - script -->
 <script>
  var input = document.getElementById("input");
  var processor = document.getElementById("processor");
  var output = document.getElementById("output");
    
  window.addEventListener("message", function(event){
    if (event.source != processor.contentWindow) return;
    	
    switch (event.data){
      case "ready":
	    // if ready read the pdf 
        var xhr = new XMLHttpRequest;
        xhr.open('GET', input.getAttribute("src"), true);
        xhr.responseType = "arraybuffer";

        xhr.onload = function(event) {
          processor.contentWindow.postMessage(this.response, "*");
        };

        xhr.send();
		
	 break;
      
      default:
	    // copy content to pdf
	    var status = $("#processor").contents().find("#message").text();
		
		output.textContent = event.data.replace(/\s+/g, " ");
		
		// continuing motification
		if (status == "Done!")
		 {	
	   	  var sentences = $("#output").val().replace(/([.?!]+ )/g, "$1\n").split(/\s*[\n\r]+\s*/);
          	  playSentence(sentences);
		 }
		 else {}
		 
		
      break;
    }
  }, true);   
</script>

--------

Problem 1:

sentences ist hier allerdings leer, was, wenn ich einen alert mache:

Code:
var sentences = $("#output").val().replace(/([.?!]+ )/g, "$1\n").split(/\s*[\n\r]+\s*/);
alert(sentences);

sehr schön deutlich wird.


Problem 2:

das Script für die TTS wird scheinbar gar nicht beachtet, denn nirgendwo im Dokument wird die Auswahlbox für die Spachen angezeigt. (ebensowenig wie der Error), obwohl beides doch hier:

Code:
 if (!window.GoogleTTS) {
                    $("#error").text("Sorry, the google-tts script couldn't be loaded.");
                    return;
                } else {
                    var HTML = '\
                    <div> \
                        <label for="demo_language">Language:</label> \
                        <select id="demo_language"> \
                            <option value="" disabled="disabled">(Select language)</option> \
                        </select> \
                    </div> \                    
                    ';
                    $("#tts_demo").html(HTML);
                }

definiert wird.

Kannst du (oder jemand anderes) also bitte nochmal etwas genauer drüber schauen, was nun das Problem ist!?

- - - Aktualisiert - - -

sentences ist leer, was, wenn ich einen alert mache:
Code:
var sentences = $("#output").val().replace(/([.?!]+ )/g, "$1\n").split(/\s*[\n\r]+\s*/);
alert(sentences);

deutlich wird.

auch ein abändernd des Codes auf:

Code:
var sentences = $("#output").text().replace(/([.?!]+ )/g, "$1\n").split(/\s*[\n\r]+\s*/);
alert(sentences);

bringt nicht den Erfolg, das die Sätze nun einzeln vorliegen, vielmehr wird hier der gesamte Text angezeigt.

- - - Aktualisiert - - -

Zum weiteren Testen habe ich den Code wie folgt geändert:

aktueller Code

Code:
<html>
<head>
  <title>Converting PDF To Text using pdf.js</title>
  <style>
  html, body { width: 100%; height: 100%; overflow-y: hidden; padding: 0; margin: 0; }
  body { font: 13px Helvetica,sans-serif; }
  iframe { border: none; width: 100%; height: 100%; }
  #output { padding: 10px; box-shadow: 0 0 5px #777; border-radius: 5px; margin: 10px; display:none;}
  #processor { height: 70px; }
  #error {
            margin: 1em 0;
            color: #f00;
            font-weight: bold;
        }
  </style>
  </head>

<body>
<div id="tts_demo"></div>

<div id="error"></div>

  <div id="pdftotext">
    <!-- embed the pdftotext web app as an iframe -->
    <iframe id="processor" src="../"></iframe>
    
    <!-- a container for the output -->
    <div id="output"></div>
  </div>
  
  <div>
    <!-- the PDF file must be on the same domain as this page -->
    <iframe id="input" src="Predikt_Daniel_4_Lebenslust.pdf"></iframe>
  </div>
  
    
<!-- the scripts -->
 <!-- google tts-script -->
  <!-- jquery einbinden -->
  <script type="text/javascript" src="./jquery-1.9.1.min.js"></script>
  <!-- google-tts einbinden -->
  <script type="text/javascript" src="./src/google-tts.js"></script>
  <!-- soundmanager einbinden -->
  <script type="text/javascript" src="./soundmanager2.js"></script>
  <!-- google-tts- setup -->
  <!-- google-tts- setup -->
  <script type="text/javascript">
    $(document).ready(function(){
      soundManager.setup({
        url: '/',
        preferFlash: false,
        onready: function() {
          if (!window.GoogleTTS) {
            $("#error").text("Sorry, the google-tts script couldn't be loaded.");
            return;
          } else {
            var HTML = '\
            <div> \
                <label for="demo_language">Language:</label> \
                <select id="demo_language"> \
                    <option value="" disabled="disabled">(Select language)</option> \
                </select> \
            </div> \
            ';
            $("#tts_demo").html(HTML);
          }

          var googleTTS = new window.GoogleTTS();

          // setup language options
          $.each(googleTTS.languages(), function(key, value) {
            $('#demo_language').append('<option value="' + key + '">' + value + '</option>');
          });

          // play
          $("#demo_play").click(function() {
		  function playSentence(sentences) {
		  alert(sentences);
		  if (sentences.length) {
		  currentSentence = sentences.shift().trim();
		  if (currentSentence.length) {
		  googleTTS.play($("#demo_text").val(), $("#demo_language").val(), function(err) {
              if (err) {
                $("#error").text(err.toString());
              }
              else {
                  window.setTimeout(playSentence(sentences), 3000);
                   }
              
            });
		  }
		  else {
		  playSentence(sentences);
		  }		  
		  }
		  else {
		   console.log('Finished playing');
		  }
          }	    
            
          });
          // defaults
          $("#demo_language").val('de');
          //$("#demo_text").val('中文');

          // available player
          googleTTS.getPlayer(function (err, player) {
            if (err) {
              return $("#error").text(err.toString());
            }

            if (player) {
              $("#tts_player").text(player.toString());
            } else {
              $("#tts_player").text('None available');
            }
          });
        }
      });
    });
 </script>
 <!-- pdf to text - script -->
 <script>
   
  var input = document.getElementById("input");
  var processor = document.getElementById("processor");
  var output = document.getElementById("output");
    
  window.addEventListener("message", function(event){
    if (event.source != processor.contentWindow) return;
    	
    switch (event.data){
      case "ready":
	    // if ready read the pdf 
        var xhr = new XMLHttpRequest;
        xhr.open('GET', input.getAttribute("src"), true);
        xhr.responseType = "arraybuffer";

        xhr.onload = function(event) {
          processor.contentWindow.postMessage(this.response, "*");
        };

        xhr.send();
		
	 break;
      
      default:
	    // copy content to pdf
	    var status = $("#processor").contents().find("#message").text();
		
		output.textContent = event.data.replace(/\s+/g, " ");
		
		// continuing motification
		if (status == "Done!")
		 {		
		  var msg = $("#output").text();
		  //var sentences = msg.split(/\!|\?|\.|\r\n|\n|\r/mg);
		  var sentences = msg.replace(/([.?!]+ )/g, "$1\n").split(/\s*[\n\r]+\s*/);
        	  alert('test');
		  playSentence(sentences);		  		  
		 }
		 else {}
		 
		
      break;
    }
  }, true);
  
  
</script>
  
  
</body>
</html>

jetzt wird zwar die TTS-Engime geladen, doch jetzt wird NICHT in die Funktion playSentence() gesprungen!

das Script kommt bis zum alert('test') und danach passiert scheinbar nichts mehr, denn dass hier:

Code:
function playSentence(sentences) {
		  alert(sentences);

wird nicht aufgerufen!

- - - Aktualisiert - - -

Habe gerade bemerkt das der Code aus dem Google-TTs-Repo nur offline geht und pdf-to-txt jedoch nur online, daher habe ich auf die Schnelle folgenden Code gebaut:

Code:
<html>
<head>
  <title>Converting PDF To Text using pdf.js</title>
  <style>
  html, body { width: 100%; height: 100%; overflow-y: hidden; padding: 0; margin: 0; }
  body { font: 13px Helvetica,sans-serif; }
  iframe { border: none; width: 100%; height: 100%; }
  #output { padding: 10px; box-shadow: 0 0 5px #777; border-radius: 5px; margin: 10px; display:none;}
  #processor { height: 70px; }
  #error {
            margin: 1em 0;
            color: #f00;
            font-weight: bold;
        }
  </style>
  </head>

<body>
<div id="tts_demo"></div>

<div id="error"></div>

  <div id="pdftotext">
    <!-- embed the pdftotext web app as an iframe -->
    <iframe id="processor" src="../"></iframe>
    
    <!-- a container for the output -->
    <div id="output"></div>
  </div>
  
  <div>
    <!-- the PDF file must be on the same domain as this page -->
    <iframe id="input" src="./Predikt_Daniel_4_Lebenslust.pdf"></iframe>
  </div>
  

  
    
<!-- the scripts -->
 
  <!-- jquery einbinden -->
  <script type="text/javascript" src="./jquery-1.9.1.min.js"></script>

  
 <!-- pdf to text - script -->
 <script>
  // modification
  var zaehler = 0;
  // continuing original
  var input = document.getElementById("input");
  var processor = document.getElementById("processor");
  var output = document.getElementById("output");
    
  window.addEventListener("message", function(event){
    if (event.source != processor.contentWindow) return;
    	
    switch (event.data){
      case "ready":
	    // if ready read the pdf 
        var xhr = new XMLHttpRequest;
        xhr.open('GET', input.getAttribute("src"), true);
        xhr.responseType = "arraybuffer";

        xhr.onload = function(event) {
          processor.contentWindow.postMessage(this.response, "*");
        };

        xhr.send();
		
	 break;
      
      default:
	    // copy content to pdf
	    var status = $("#processor").contents().find("#message").text();
		
		output.textContent = event.data.replace(/\s+/g, " ");
		
		// continuing motification
		if (status == "Done!")
		 {		
		  var msg = $("#output").text();
		  var myArray = msg.split(/\!|\?|\.|\,|\:|\;|\r\n|\n|\r/mg);
		  
		  var txtSize = myArray.length;
		
		  for(var i=0;i<myArray.length;i++)
          {
		    //alert(myArray[i]);
			
            // jedes element als key-var in localstorage speichern
			localStorage.setItem(i, myArray[i]);              
          
          }
		  		  
		  textlesen(txtSize);
		 }
		 else {}
		 
		
      break;
    }
  }, true);
  
  
  // added as modification to play text direct after reed  
  function textlesen(anzahl)
  {
  $("#tts_demo").html("");
  var soundurl="",soundStr="";
  
  //alert('zahler: ' + zaehler + '\n anzahl: '+ anzahl);
  
  if (zaehler >= anzahl)
   {
    console.log('Finished playing');
	zahler = 0;
   }
  else {
       var currentsentence = localStorage.getItem(zaehler);	   
       
	   soundurl = 'http://translate.google.com/translate_tts?ie=utf-8&tl=de&q='+currentsentence+'';
       
	   soundStr = '<audio controls autoplay><source src="'+soundurl+'" ></audio>';
	   alert(soundStr);
	   $("#tts_demo").html(soundStr); 
	   	   
	   zaehler = zaehler + 1;
	   
	   
	   
	   var myVar=setTimeout(function () {textlesen(anzahl)}, 3000);	  
	  	   }
  }
  
  
</script>
  
  
</body>
</html>

allerdings wird dabei nur der erste Satz wiedergegeben, die anderen nicht!

Woran liegt das und wie könnte ich erreichen, das ALLE Sätze wiedergegeben werden?

Bitte helft mir!
 
Zuletzt bearbeitet:
So, nach einigem Testen und einigen Mühen, habe ich inzwischen nun folgenden Code gebaut:

Code:
// play
  $("#demo_play").click(function () {
  var currentSentence = '', sentenceParts = '', currentPart = '',
  sentences = $("#output").text().replace(/([.?!]+ )/g, "$1\n").split(/\s*[\n\r]+\s*/); // splits the txt into sentences

  function playSentence () {
   if (sentences.length) {
     currentSentence = sentences.shift().trim(); // gets the currentSentence for each time the playSentence-function is called
	 	 
	 if (currentSentence.length) {
	   // playing currentSentence would start here normally, but we need to check if currentSentence is too big
	   	   
	     if (currentSentence.length >= 100) {	      
	     sentenceParts = currentSentence.split(/\,/mg); //splits the currentSentence into parts
	   
	     function playSplitSentence ()  {
	     if (sentenceParts.length) {
		   currentPart = sentenceParts.shift().trim(); // gets the currentPart for each time the playSplitSentence-function is called
		   if (currentPart.length) {
		     alert('currentPart:' + currentPart);
			 
		     // playing currentPart will start here
			 var partaudio = new Audio(); //setup new audio
			 partaudio.src = 'http://translate.google.com/translate_tts?ie=utf-8&tl=de&q=' + currentPart;
			 partaudio.preload = "auto";
			 partaudio.play(); 			    
			 //audio function start
			 //partaudio.addEventListener('canplaythrough', true, false);
			 
			 partaudio.addEventListener('ended',function(){
             //partaudio.src = "";
             partaudio.pause();
             partaudio.load();
             //set shorter pause and recall playSplitSentence-Function to get next Part
			 window.setTimeout(playSplitSentence, 1000);
             });
			 //audio function end
			   //set shorter pause and recall playSplitSentence-Function to get next Part
			   //window.setTimeout(playSplitSentence, 1000);
		   // currentPart have been played so recall the function to play next Part
		   } else {
		         playSplitSentence();
		          }
		   
		 }
		 // all Parts have been  played
		 else {
		     //set pause and recall playSentence-Function to get next Sentence
		     window.setTimeout(playSentence, 3000);
			  }		 
	     }
		 // call the playSplitSentence-function to start playing all parts of currentSentence
         playSplitSentence();
		 	   
	     // ended new splitting continuing normal playing
	     } else {
		       alert(currentSentence);
			   
	           //play currentSentence
			   var sentenceaudio = new Audio(); //setup new audio
			   sentenceaudio.src = 'http://translate.google.com/translate_tts?ie=utf-8&tl=de&q=' + currentSentence;
			   sentenceaudio.preload = "auto";
			   sentenceaudio.play();
			   //audio function start
			   //sentenceaudio.addEventListener('canplaythrough', true, false);
			   
			   sentenceaudio.addEventListener('ended',function(){
               //sentenceaudio.src = "";
               sentenceaudio.pause();
               sentenceaudio.load();
               //set pause and recall playSentence-Function to get next Sentence
			   window.setTimeout(playSentence, 3000);
               });
			   //audio function ende
	             
			     //set pause and recall playSentence-Function to get next Sentence
			     //window.setTimeout(playSentence, 3000);
			    }			  
			  
	 // currentSentence have been played so recall the function playSentence to play next Sentece		  
     } else {
           playSentence();
            }
   // all Sentences have been  played			
   } else {
         console.log('Finished playing text');
          }
  }
  // call the playSentence-function to start playing all sentences of txt
  playSentence();
  });
  
</script>

welcher Syntaktisch soweit funktioniert.

Allerdings bricht die TTS -Wiedergabe nach dem ersten Satz ab und ich erhalte in der Konsole die Meldung:

HTTP-Laden ist mit dem Status 404 fehlgeschlagen. Laden der Medienressource http://translate.google.com/translate_tts?ie=utf-8&tl=de&q=testtext ist fehlgeschlagen.


ruft man dieser URL aber normal im Browser auf, funktioniert es;
Ebenso funktioniert es im Script, nachdem jede URL einmal geladen wurde im zweiten Durchlauf.


Wie könnte ich die URLs nun also vorladen?


Wie ihr seht, habe ich da an der stelle
Code:
//partaudio.addEventListener('canplaythrough', true, false);

schon was versucht, dies aber auskommentieren müssen, da ich mit diesem canplaythrough nichts recht anzufangen weiß.

Kann mir bitte jemand helfen!?

- - - Aktualisiert - - -

auch ein abändern auf

Code:
// playing currentPart will start here
			 var partaudio = new Audio(); //setup new audio
			 partaudio.src = 'http://translate.google.com/translate_tts?ie=utf-8&tl=de&q=' + currentPart;
			 partaudio.preload = "auto";
			 
			 partaudio.oncanplaythrough = function() {
             partaudio.play(); 
             };			 
			   //partaudio.play(); 
			   
			 //audio function start			 		 
			 partaudio.addEventListener('ended',function(){
             //partaudio.src = "";
             partaudio.pause();
             partaudio.load();
             //set shorter pause and recall playSplitSentence-Function to get next Part
			 window.setTimeout(playSplitSentence, 1000);
             });
			 //audio function end

löst das Problem mit dem Fehler "HTTP-Laden ist mit dem Status 404 fehlgeschlagen. Laden der Medienressource http://translate.google.com/translate_tts?ie=utf-8&tl=de&q=testtext ist fehlgeschlagen." nicht.

Hat jemand eine Idee für eine Lösung?
 
Als Add-On ist da nur dein Canvas-Blocker installiert.
Hoffentlich die aktuellste Version. Die davor hat ein sehr seltsamen Memory leak...
Hat jemand eine Idee für eine Lösung?
Du könntest per <iframe> das vorladen, aber wirklich sauber sieht mir das nicht aus.

Kannst du eigentich einen Testlink machen, wo wir das laufen lassen können - ich hab' z.B. keine Zeit, das bei mir aufzusetzen.
 
Du könntest per <iframe> das vorladen, aber wirklich sauber sieht mir das nicht aus.

Kannst du eigentich einen Testlink machen, wo wir das laufen lassen können

Testlink kann ich einen bauen, kommt heute noch rein.

Was meinst du mit "aber wirklich sauber sieht mir das nicht aus"?
Meinst du den Workaround mit dem Iframe oder das Script?

- - - Aktualisiert - - -

Testlink kann ich einen bauen, kommt heute noch rein.

Hier bitte, der Testlink: TESTLINK

aktuell hört man da im Netz zwar auch keinen Text, aber offline hat es funktioniert.

(Hier nochmal der Code:
Code:
<html>
<head>
  <title>Converting PDF To Text using pdf.js</title>
  <style>
  html, body { width: 100%; height: 100%; overflow-y: hidden; padding: 0; margin: 0; }
  body { font: 13px Helvetica,sans-serif; }
  iframe { border: none; width: 100%; height: 100%; }
  #output { padding: 10px; box-shadow: 0 0 5px #777; border-radius: 5px; margin: 10px; display:none;}
  #processor { height: 70px; }
  #error {
            margin: 1em 0;
            color: #f00;
            font-weight: bold;
        }
  #player{display:block;}
  #playlist{ overflow:none; display:block;}
  #demo_play{display:none;}
  
  </style>
  
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
  <script src="./audiojs/audio.min.js"></script>

  </head>

<body>
<button id="demo_play"></button>

<div id="error"></div>

<div id="tts_player"></div>

  <div id="pdftotext">
    <!-- embed the pdftotext web app as an iframe -->
    <iframe id="processor" src="../"></iframe>
    
    <!-- a container for the output -->
    <div id="output"></div>
  </div>
  
  <div>
    <!-- the PDF file must be on the same domain as this page -->
    <iframe id="input" src="./Predikt_Daniel_4_Lebenslust.pdf"></iframe>
  </div>
   
  
 <script>
  <!-- pdfto text setup modded  -->
  <!-- original -->
  var input = document.getElementById("input");
  var processor = document.getElementById("processor");
  var output = document.getElementById("output");
  var currentSentence = '';
    
  window.addEventListener("message", function(event){
    if (event.source != processor.contentWindow) return;
    	
    switch (event.data){
      case "ready":
	    // if ready read the pdf 
        var xhr = new XMLHttpRequest;
        xhr.open('GET', input.getAttribute("src"), true);
        xhr.responseType = "arraybuffer";

        xhr.onload = function(event) {
          processor.contentWindow.postMessage(this.response, "*");
        };

        xhr.send();
		
	 break;
      
      default:
	    // copy content to pdf
	    		
		output.textContent = event.data.replace(/\s+/g, " ");
        
        // modd		
		// get the status
		var status = $("#processor").contents().find("#message").text(); 
		
		if (status == "Done!")
		 {
		  // start the reading
		  $("#demo_play").click();		  
		 }	 
		else {		}
		
      break;
    }
  }, true);
  
    
  // play
  $("#demo_play").click(function () {
  var currentSentence = '', sentenceParts = '', currentPart = '',
  sentences = $("#output").text().replace(/([.?!]+ )/g, "$1\n").split(/\s*[\n\r]+\s*/); // splits the txt into sentences

  function playSentence () {
   if (sentences.length) {
     currentSentence = sentences.shift().trim(); // gets the currentSentence for each time the playSentence-function is called
	 	 
	 if (currentSentence.length) {
	   // playing currentSentence would start here normally, but we need to check if currentSentence is too big
	   	   
	     if (currentSentence.length >= 100) {	      
	     sentenceParts = currentSentence.split(/\,/mg); //splits the currentSentence into parts
	   
	     function playSplitSentence ()  {
	     if (sentenceParts.length) {
		   currentPart = sentenceParts.shift().trim(); // gets the currentPart for each time the playSplitSentence-function is called
		   if (currentPart.length) {
		     alert('currentPart:' + currentPart);
			 
		     // playing currentPart will start here
			 var partaudio = new Audio(); //setup new audio
			 partaudio.preload = "auto";
			 
			 partaudio.src = 'http://translate.google.com/translate_tts?ie=utf-8&tl=de&q=' + currentPart;
			   
			 partaudio.play();			 		 
			   
			 //audio function start	              		 
			 partaudio.addEventListener('ended',function(){
             //partaudio.src = "";
             partaudio.pause();
             partaudio.load();
             //set shorter pause and recall playSplitSentence-Function to get next Part
			 window.setTimeout(playSplitSentence, 1000);
             });			
			 //audio function end
			   //set shorter pause and recall playSplitSentence-Function to get next Part
			   //window.setTimeout(playSplitSentence, 1000);
		   // currentPart have been played so recall the function to play next Part
		   } else {
		         playSplitSentence();
		          }
		   
		 }
		 // all Parts have been  played
		 else {
		     //set pause and recall playSentence-Function to get next Sentence
		     window.setTimeout(playSentence, 3000);
			  }		 
	     }
		 // call the playSplitSentence-function to start playing all parts of currentSentence
         playSplitSentence();
		 	   
	     // ended new splitting continuing normal playing
	     } else {
		       			   
	           //play currentSentence
			   var sentenceaudio = new Audio(); //setup new audio
			   sentenceaudio.preload = "auto";
			   
			   sentenceaudio.src = 'http://translate.google.com/translate_tts?ie=utf-8&tl=de&q=' + currentSentence;
			   			   	               
			   sentenceaudio.play();
			   			   			   				 
			   //audio function start                			  
			   sentenceaudio.addEventListener('ended',function(){
               //sentenceaudio.src = "";
               sentenceaudio.pause();
               sentenceaudio.load();
               //set pause and recall playSentence-Function to get next Sentence
			   window.setTimeout(playSentence, 3000);
               });  			   
			   //audio function ende
	             
			     //set pause and recall playSentence-Function to get next Sentence
			     //window.setTimeout(playSentence, 3000);
			    }			  
			  
	 // currentSentence have been played so recall the function playSentence to play next Sentece		  
     } else {
           playSentence();
            }
   // all Sentences have been  played			
   } else {
         console.log('Finished playing text');
          }
  }
  // call the playSentence-function to start playing all sentences of txt
  playSentence();
  });
  
</script> 
  
  
</body>
</html>
)

Auf jeden Fall könnt ihr euch das dort mal ansehen und ich hoffe, das ihr mir weiterhelfen könnt, so das das mit dem Vorlesen doch noch klappt!

Bin für alle konstruktiven Vorschläge offen, ohne Hilfe komme ich nicht weiter!
 
Zuletzt bearbeitet:
So ich wollte nur sagen, ich habe das Problem in der Zwischenzeit mit folgendem Code, und einer anderen API gelöst.

Code:
// play
$("#demo_play").click(function () {
var currentSentence = '', zaehler = 0,
sentences = $("#output").text().replace(/([.?!]+ )/g, "$1\n").split(/\s*[\n\r]+\s*/); // splits the txt into sentences
$("#processor").contents().find("#message").text("Text is prepared for TTS...");


function playSentence () {
if (sentences.length) {
 currentSentence = sentences.shift().trim();
							
if (currentSentence.length) {
$.getJSON('https://www.yakitome.com/api/call/json/tts?api_key=my_api_key&voice=Klara&speed=4&text='+currentSentence, function(data) {
var servicestatus = data.status;
var bookid = data.book_id;
if (servicestatus == "TTS RUNNING") {
 function TTSloader() {
 zaehler = zaehler + 1;
 if (zaehler <= 6) {
   $.getJSON('https://www.yakitome.com/api/call/json/cdl?api_key=my_api_key&book_id='+bookid, function(ndata) {
   var ttsstatus = ndata.status;
   var frameurl = ndata.iframe;
   if (ttsstatus == "TTS DONE") {
     $('#tts_player').attr('src', frameurl);
     $("#processor").contents().find("#message").text("TTS is running");
     $('#tts_player').load(function(){
     console.log('laoded the iframe');
    window.setTimeout(playSentence, 5000);             
    });
  } else {
         $("#processor").contents().find("#message").text("Text is processed by TTS-Api. This process may take some time! Please wait ...");
	 window.setTimeout(TTSloader, 10000);
          } 							
 });	
} else {
var wnmsg="Attention!\n\nThe process of TTS-processing takes a long time already, there may be an error.\nYou can continue to wait for the processing or abort.\nIf you want to continue to wait, please click 'OK'!\n";
if(confirm(wnmsg))window.setTimeout(TTSloader, 10000);										
}
}
								
TTSloader();	
} else {
	$("#error").text(servicestatus);
	 }
 });  
 //audio function end  
} else {
        playSentence();
         }
} else {
         console.log('Finished playing');
         }
}

playSentence();
});
 
Zurück
Oben