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

[FRAGE] PDF vorlesen lassen

dbarthel

Lounge-Member
Hallo,

ich möchte auf meiner Webseite gerne realisieren, das PDF-Dokumente via TTS vorgelesen werden können.

Zum extrahieren des Texts aus dem PDF habe ich https://github.com/hubgit/hubgit.github.com/tree/master/2011/11/pdftotext verwendet und zum vorlesen https://github.com/hiddentao/google-tts.

Soweit klappt das auch, zumindest rein technisch, aber der Text wird einfach hintereinander weg gelesen und noch dazu viel zu schnell.

Meine Frage nun, kann man die Lesegeschwindigkeit irgendwie beeinflussen und kann sich jemand eine Möglichkeit denken, das der Text Satzweise vorgelesen wird und nach jedem Satz eine kurze Pause gemacht wird?

Meine Überlegung war, den extrahierten Test nach Satzzeichen zu filtern und dann jeden Abschnitt, nach einem Timeout, an die TTS-Api zu übergeben, aber ich komme da auf keinen wirklichen Script-Ansatz, da ich hierfür einfach nicht genügend Kenntnisse habe.

Wie könnte da eine Möglichkeit aussehen?
 
Hi,
ich hatte vor einiger Zeit mal ein ähnliches Problem, allerdings mit einem Morse code Generator. Beim Morsen gibt es als Geschwindigkeit WPM (Words per minute) . Sowas muss es auch bei Sprache geben, die Franzosen und Spanier sprechen z.B. schneller als wir deutschen.

in der src
https://github.com/hiddentao/google-tts/blob/master/src/google-tts.js

steht in Zeile 32
/**
* Maximum no. of characters which can be be submitted in a single request.
*
* This value was found through trial-and-error, see https://github.com/hiddentao/google-tts/issues/9
* @type {Number}
*/
var MAX_CHARS_PER_REQUEST = 100;
Ich weiß allerdings nicht genas was die meinen mit " a single request."

Anderseits ist auch auch möglich das, dass schon in der Engine voreingestellt ist je nach Sprache mach so und so schnell.

Also ich würde jetzt erst mal diesen wert wert ändern und hören was passiert.

Vielleicht sind auch die Daten von "pdf to text" nicht in Ordnung.
Ein Leerzeichen wird ja miest mit %20 gegenzeichnet und ein Komma mit %2C. so Zumindest in der URL
https://translate.google.com/#de/en/Hallo google, sprechen sie.
Meine damit es könnte auch an der Zeichenkodierung liegen.

MfG,
Xorg1990
 
Danke für deine Antwort, leider definiert MAX_CHARS_PER_REQUEST lediglich die Anzahl von erlaubten Zeichen pro Anfrage an die Google-API.
Es werden also maximal 100 Zeichen verarbeitet, die Sprechrate beeinflusst das jedoch nicht.

Ich denke auch das es schon ein guter Lösungsansatz wäre, wenn man die Daten von "pdf to text" eben in einzelne Sätze zerlegen könnte, die dann, mit einer Paus an die API übergeben werden, allerdings bekomme ich das nicht hin.

- - - Aktualisiert - - -

in einzelne Sätze zerlegen könnte, die dann, mit einer Paus an die API übergeben werden, allerdings bekomme ich das nicht hin.

Habe mal den Output in einer Variable gespeichert und diese dann mit
Code:
 split("\n")
die einzelnen Zeilen trennen lassen.
Jetzt müsste ich halt auch noch nach Satzzeichen splitten, doch da gibts ja mehr als eines.

Könnte da ein regexp gemacht werden, wass alle Satzzeichen verarbeitet und dann dort trennt?
Ich komme mit regexp nicht klar, könnte mir jemand dabei helfen?
 
dbarthel schrieb:
Danke für deine Antwort, leider definiert MAX_CHARS_PER_REQUEST lediglich die Anzahl von erlaubten Zeichen pro Anfrage an die Google-API.
Asso, das wird nach google gesendet, dass habe ich nicht gewusst.

Jetzt müsste ich halt auch noch nach Satzzeichen splitten, doch da gibts ja mehr als eines.
Naja da du schon nach Zeilen gefiltert hast ist es doch ganz einfach.

Du machst ne Schleife durch jeden charakter:
Code:
var Orginal = "Dies ist ein Text. Dies ist ein Text mit? Dies ist ein Text mit!";
var string = "";

for (var member in Orginal) {
    var char = Orginal[member];
    string+= char;
    if (char == "." || char == "?" || char =="!") {
        string+= "   ";
    }
}

Habe hier drei Leerzeichen am Satzende angefügt da ich gedacht hatte die API macht da eine Pause... hat nix gebracht genau so wenig wie Punkte.

dbarthel schrieb:
komme mit regexp nicht klar
Ich genau so wenig.
 
Hi,

vielleicht hilft dir folgendes Konstrukt weiter:
Code:
"Palim palam! Dies ist ein Text. Dies ist ein Text mit? Dies ist ein Text mit!".split(/\.|\?|!/)

Ciao
Quaese
 
So, ich habe mal folgenden Code gebastelt:

Code:
<textarea id="testtext" cols="25" rows="5">
Palim palam! Nur ein. Dies ist ein Text mit? ein anderer Text mit! 
Neue Zeile 
Zweite Runde mit! Oder. Ob das auch funktioniert? Mal sehen!
</textarea>

<script>
var txt = document.getElementById("testtext").value;

var myArray = txt.split(/\!|\?+|\.|"\\n"+/g);

for(var i=0;i<myArray.length;i++)
 {

// jedes element ausgeben
alert(myArray[i]);
}  
</script>

die Trennung an "!" "?" und "." klappt soweit, allerdings verschwindet das Satzzeichen bei der Aktion,was es eigentlich nicht soll,
da Google-TTS Fragesätze, also "?" anders ausspricht, als Aussagesätze!

Außerdem klappt die Trennung am Zeilenumbruch hier nicht, es wird "Neue Zeile Zweite Runde mit" ausgegeben.

Jemand eine Idee, worin die Probleme bestehen und wie man sie lösen kann?

- - - Aktualisiert - - -

Habe nochmal etwas am Code geschliffen, allerdings wird am Zeileumbruch immer noch nicht getrennt.

Code:
<textarea id="testtext" cols="25" rows="5" wrap="physical">
Palim palam! Nur ein. Dies ist ein Text mit? ein anderer Text mit! 
Neue Zeile 
Zweite Runde mit! Oder. Ob das auch funktioniert? Mal sehen!
</textarea>

<script>
var txt = document.getElementById("testtext").value;

var myArray = txt.split(/\!|\?|\.|\\n$/g);

for(var i=0;i<myArray.length;i++)
 {

// jedes element ausgeben

alert(myArray[i]);
}  
</script>
 
Hi,

die Trennung mit Satzzeichen könntest du wie nachstehend realisieren:
Code:
var arr = [],
    str = "Palim palam! Dies ist ein Text. Dies ist ein Text mit? Dies ist ein Text mit!",
    regExp = /!|\.|\?/g,
    sentences = str.split(regExp);

str.replace(regExp, function(){ 
  arr.push(sentences.splice(0, 1)[0] + arguments[0]);
});
In arr sollten die Teilsätze stehen.

Ciao
Quaese
 
Mist bist mal 1h abgelenkt und schon funkt Quaese dazwischen. Jetzt ändere ich mein Content wieder ab:uncomfortableness:

Habe das so nun gelöst
Code:
<textarea id="testtext" cols="25" rows="5" wrap="physical">
Palim palam! Nur ein. Dies ist ein Text mit? ein anderer Text mit!




Zweite Runde mit! Oder. Ob das auch funktioniert? Mal sehen!
</textarea>
<script>
var txt = document.getElementById("testtext").value;
txt = txt.replace(/(\r\n|\n|\r)/gm,""); //entferne alle Zeilenumbrüche 
var string = "";

function pause(ms) {
ms += new Date().getTime();
while (new Date() < ms){}
} 


for (var entry in txt) {
        var char = txt[entry];
        string+= char;
        if (char == "." || char == "?" || char =="!") {
            //anGoogleSenden(string);
            console.log(string);
            string= "";//string leeren
            pause(1000);//pause 1sec
        }
    
    }
</script>
Ich habe versucht in der for schleife ein setTimeout zu machen, das scheint aber nicht zu gehen(wird ignoriert).
Die While Situation funktioniert zwar aber mach halt 'ne menge cpu load. Was besseres fällt mir auf die schnelle nicht ein.

Ps.: Ich weiß nicht ob eine Nummerische for Schleife bei dieser Situation so gut ist. Nehmen wir mal an du hast ein string mit 20 Buchstaben, dann geht ja i nur von 0 bis 19. oder von 1-20, je nach Schreibweise i++ oder ++i. Deswegen habe ich ein "for in" gewählt.
Pss: Statt ner" for in" konnte man es mal mit einer forEach Schleife probieren, eventuell geht das ja da mit dem setTimeout.
 
Zuletzt bearbeitet:
So ihr lieben habe jetzt mal allen Code zusammen geschrieben:

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; }
  body > div { width: 48%; height: 100%; overflow-y: auto; display: inline-block; vertical-align: top; }
  iframe { border: none; width: 100%; height: 100%; }
  #output { padding: 10px; box-shadow: 0 0 5px #777; border-radius: 5px; margin: 10px; }
  #processor { height: 70px; }
  #error {
            margin: 1em 0;
            color: #f00;
            font-weight: bold;
        }
  </style>
</head>

<body>

<div>
    <!-- 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="journal.pone.0026738.pdf"></iframe>
  </div>
  
  <div id="tts_demo"></div>

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


  <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":
        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:
        output.textContent = event.data.replace(/\s+/g, " ");
		var msg = $("#output").text();
		var myArray = msg.split(/\!|\?|\.|\r\n|\n|\r/mg);
   
        maxTxt = myArray.length;
	   
       for(var i=0;i<myArray.length;i++)
        {
            // jedes element als key-var in localstorage speichern
			localStorage.setItem(i, myArray[i]);                 
            
        }
		
      break;
    }
		
  oundManager.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> \
            <div> \
            </div> \
            <button id="demo_play">Play!</button> \
            ';
            $("#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>');
          });
          var i =0;
          // play
          $("#demo_play").click(function() {
		    playloop();
              
			 
			  

              console.log('Playing loop');
			  
            });
          });
		  
		 function playloop()
		  {
		  googleTTS.play(localStorage.getItem(i), $("#demo_language").val(), function(err) {
              if (err) {
                $("#error").text(err.toString());
              }
		console.log('Finished playing text ' +i);
		
	    i++;
		
		if (i > maxTxt)
		  {
		 timeout = setTimeout('playloop', 3000);
         clearTimeout(timeout);
		  }
		 else {i = 0;}
		 }

          // defaults
          $("#demo_language").val('de-DE');
          

          // char count
          $("#demo_text").keyup(function() {
            console.log('test');
            var chars = $("#demo_text").val();
            $("label[for=demo_text]").text("Text: (" + chars.length + "):");
          });

          // 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');
            }
          });
        }
      });
    }, true);
  </script>
  
  
</body>
</html>

Leider funktioniert das ganze nicht, denn es wird gar nichts gemacht!

Hab ich da irgendwo einen offensichtlichen Fehler drin?

Bitte, ich brauche dringend Hilfe!
 
Zuletzt bearbeitet:
Um die Sätze zu trennen, würde ich sowas machen:
Code:
var sentences = "Das ist ein Satz. Was auch immer? \n Neue Zeile\n und noch ein Satz! hui".replace(/([.?!]+)/g, "$1\n").split(/\s*[\n\r]+\s*/)

Um die dann hintereinander mit Zeitversatz vorlesen zu lassen, muss man in einem Callback (ich denke mal, der von .play() - bin mir aber nicht sicher, wann der genau ausgeführt wird) den nächsten Satz vorlesen lassen. Ich denke mal, dass das in etwa so aussehen könnte:
Code:
function playSentence(){
	if (sentences.length){
		var currentSentence = sentences.shift();
		googleTTS.play(currentSentence, "de-DE", function(err){
			if (err){
				// ...
			}
			else {
				window.setTimeout(playSentence, 1000);
			}
		});
	}
}

PS: @dbarthel: räum' doch deinen Code mal etwas auf - der sieht ziemlich unordentlich aus. Und sowas
Code:
		 timeout = setTimeout('playloop', 3000);
         clearTimeout(timeout);
ergibt einfach gar keinen Sinn... außerdem sollte man window.setTimeout() keinen String als Parameter übergeben.
 
@kkapsner: Das trennen der Sätze kann nicht, wie von dir geschrieben, funktionieren, da der Text keine solchen Formatierungen hat und auch nicht bekommen kann.

Wie in Beitrag 1 genannt, wird der Text vom Script "pdftotext" aus einem PDF generiert und in den div "Output" geschrieben.

Dort soll er nun ausgelesen, in Sätze getrennt und diese an das Script "google tts" übergeben werden.

-----------

@all:
Das mit dem Callback funktioniert leider so nicht.

Könntet ihr euch bitte die Scripte "pdftotext" und "google tts" ansehen und mir dann beim zusammenbau der beiden, nochmal helfen? Ich komme, fürchte ich, allein da nicht so recht weiter.
 
Zuletzt bearbeitet:
Das Beispiel aus Beitrag #10 sieht ja so ähnlich aus, wie die Beispiel-index.html die im Google TTS Downloadpaket enthalten ist.
Habe nun mal dieses Google TTS Downloadpaket von GitHub heruntergeladen und eben diese index.html mal abgeändert.
Habe dazu mal kkapsners Vorschlag aus Beitrag #11 implementiert:
HTML:
<!DOCTYPE html>
<html>
<head>
    <title>Google Text-to-Speech API demo</title>

    <meta charset="utf-8" />

    <style type="text/css">
        #error {
            margin: 1em 0;
            color: #f00;
            font-weight: bold;
        }
        footer {
            margin-top: 5em;
        }
        textarea {
          display: block;
        }
    </style>
</head>

<body>

<h1>Demo of Google Text-to-Speech API</h1>

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

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

<p><strong>Player: </strong><span id="tts_player"></span></p>

<script type="text/javascript" src="./jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="./src/google-tts.js"></script>
<script type="text/javascript" src="./soundmanager2.js"></script>
<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> \
                    <div> \
                        <label for="demo_text">Text:</label> \
                        <textarea rows="5" cols="60" id="demo_text" /> \
                    </div> \
                    <button id="demo_play">Play!</button> \
                    ';
                    $("#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 = '',
                        sentences = $("#demo_text").val().replace(/([.?!]+ )/g, "$1\n").split(/\s*[\n\r]+\s*/);

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

                    playSentence();
                });

                // defaults
                $("#demo_language").val('de');
                $("#demo_text").val('Palim palam! Nur ein. Dies ist ein Text mit? ein anderer Text mit!\n' +
                    'Neue Zeile\n' +
                    'Zweite Runde mit! Oder. Ob das auch funktioniert? Mal sehen!');

                // char count
                $("#demo_text").keyup(function () {
                    console.log('test');
                    var chars = $("#demo_text").val();
                    $("label[for=demo_text]").text("Text: (" + chars.length + "):");
                });

                // 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>


</body>
</html>

Also einfach dieses HTML als index_2.html in dem Google TTS Downloadpaket erstellen und mal testen...
 
Zuletzt bearbeitet:
Habe den Code jetzt wie folgt modifiziert:

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() {
            googleTTS.play($("#demo_text").val(), $("#demo_language").val(), function(err) {
              if (err) {
                $("#error").text(err.toString());
              }

              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>
  // 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)
  {
   if (zaehler >= anzahl)
   {
    console.log('Finished playing');
	zahler = 0;
   }
  else {
       var currentsentence = localStorage.getItem(zaehler);	   
  
       googleTTS.play(currentsentence, $("#demo_language").val(), function(err) 
		{
        if (err) {
                $("#error").text(err.toString());
                 }

        console.log('playing of text ' +zaehler+ 'ended');
        });
		
	    
	  zaehler = zaehler + 1;
	  var myVar=setTimeout(function () {textlesen(anzahl)}, 3000);
	  	   }
  }
</script>
  
  
</body>
</html>

allerdings klappt das vorlesen via TTS damit immer noch nicht!


Mache ich:

Code:
var currentsentence = localStorage.getItem(zaehler);	
alert(currentsentence);

wird dort aber der korrekte Satz angezeigt.


Warum also klappt die Wiedergabe von TTS nicht?

- - - Aktualisiert - - -

Auch klappt das nur in Chrome, der FF friert mit 50% Cpu-Last beim rendern ein.

Kennt jemand ein Script, das Text aus einer Pdft extrahiert und auch in FF funktioniert?

Ps: mini, habe deinen Beitrag erst gesehen, nachdem ich obigen Code geposted habe.

Ich denke das Problem mit der Cpu kommt vom "pdf to text" so das ich dafür auch einen Vorschlag brauchen kann.
Ich hoffe mal es kennt wer ein Script, das text azs pdf ausliest und auch im FF funktioniert.
 
Zuletzt bearbeitet:
da der Text keine solchen Formatierungen hat und auch nicht bekommen kann
Das verstehe ich nicht. Welche Formatierung meinst du?

Hab' gerade gesehen, dass noch ein trim() vor dem Vorlesen sinnvoll wäre:
Code:
                    function playSentence () {
                        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, 600);
                                    }
                                });
                            } else {
                                playSentence();
                            }
                        } else {
                            console.log('Finished playing');
                        }
                    }

                    playSentence();
 
Das verstehe ich nicht. Welche Formatierung meinst du?

Ich meine dieses:

Code:
var sentences="Dies ist ein Test\n usw. usf. \n";

dort "\n".


Bei euch beiden wird der Text als String in einer Variablen vordefiniert.

Ich möchte jedoch den Output von dem Script "pdf to text" dynamisch als wiederzugebenden Text verwenden (nachdem dieser in einzelne Sätze zerlegt wurde).

Ihr geht leider nicht auf die Verwendung von "pdf to text" ein, dabei ist gerade dieses das eigentliche Problem.:

Aktuell habe ich bemerkt, das beim Rendering des PDF-Files durch das Script "pdf to text" alle Browser, mit Ausnahme von Chrone und Safari, festfrieren und eine CPU-Last von 50% verursacht wird; dies ist auch der Fall, wenn die TTS-Engime nicht eingebunden wird.


Daher auch noch mal meine Frage nach einem (alternativem) Script, welches den Text aus einem PDF-File ausliest UND mind. auch im FF funktioniert.


Den Rest eurer Vorschläge muss ich mir am Montag nochmal ansehen, aber ohne Lösungsvorschlag für die Extraktion von Text aus einem PDF, ohne CPU-Last, nutzen die nur bedingt.
 
Zum Thema: HubLog: Extracting Text From A PDF Using Only Javascript

Ansonsten wollte ich noch anmerken:
Ich weiß nicht ob eine Nummerische for Schleife bei dieser Situation so gut ist. Nehmen wir mal an du hast ein string mit 20 Buchstaben, dann geht ja i nur von 0 bis 19. oder von 1-20, je nach Schreibweise i++ oder ++i.
Ähm... Eine Schleife ist viel, viel, viel flexibler - es können völlig beliebige Start- und Endbedingungen sowie pro Durchlauf auszuführende Anweisungen definiert werden; i hat damit erst mal gar nix zu tun...

PS: nach PS kommt PPS ;)
 
j-l-n schrieb:
Ähm... Eine Schleife ist viel, viel, viel flexibler - es können völlig beliebige Start- und Endbedingungen sowie pro Durchlauf auszuführende Anweisungen definiert werden; i hat damit erst mal gar nix zu tun...
Ja stimmt hast recht, ich war irritiert weil ja die schleife bei 0 anfängt zu zählen. Ich hatte in Kopf bei 1 angefangen und dacht, "Moment hier stimm was nicht", deswegen hatte ich zur for in gegriffen, die geht ja auch.


j-l-n schrieb:
PS: nach PS kommt PPS
Rasiert ;) Sowas kommt davon wenn man 4:50U Uhr aufsteht und bis 18 Uhr arbeiten ist und dann absends noch in JS Forum rumstöbert.:horror:


dbarthel schrieb:
Ist doch das selbe Script wie bei "pdf to text", ergo wird es wohl auch nicht im FF funktionieren.
Also bei mir geht das in FF einwandfrei, nur hören tue ich auch nix.
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben