Text to speech long text V2

Text to speech long text V2

by zachreynolds

JavaScript

var CHARACTER_LIMIT = 200;
var lang = "en";

var text = "Hello, my name is Alpha 53, it is very nice to meet you";

speak(text, lang)

function speak(text, lang) {

  //Support for multipart text (there is a limit on characters)
  var multipartText = [];

  if (text.length > CHARACTER_LIMIT) {

    var tmptxt = text;

    while (tmptxt.length > CHARACTER_LIMIT) {

      //Split by common phrase delimiters
      var p = tmptxt.search(/[:!?.;]+/);
      var part = '';

      //Coludn't split by priority characters, try commas
      if (p == -1 || p >= CHARACTER_LIMIT) {
        p = tmptxt.search(/[,]+/);
      }

      //Couldn't split by normal characters, then we use spaces
      if (p == -1 || p >= CHARACTER_LIMIT) {

        var words = tmptxt.split(' ');

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

          if (part.length + words[i].length + 1 > CHARACTER_LIMIT)
            break;

          part += (i != 0 ? ' ' : '') + words[i];

        }

      } else {

        part = tmptxt.substr(0, p + 1);

      }

      tmptxt = tmptxt.substr(part.length, tmptxt.length - part.length);

      multipartText.push(part);
      //console.log(part.length + " - " + part);

    }

    //Add the remaining text
    if (tmptxt.length > 0) {
      multipartText.push(tmptxt);
    }

  } else {

    //Small text
    multipartText.push(text);
  }


  //Play multipart text
  for (var i = 0; i < multipartText.length; i++) {

    //Use SpeechSynthesis
    //console.log(multipartText[i]);

    //Create msg object
    var msg = new SpeechSynthesisUtterance();
    //msg.voice = profile.systemvoice;
    //msg.voiceURI = profile.systemvoice.voiceURI;
    msg.volume = 0.5; // 0 to 1
    msg.rate = 0.7; // 0.1 to 10
    // msg.rate = usersetting || 1; // 0.1 to 10
    msg.pitch = 1; //0 to 2*/
    msg.text = multipartText[i];
    msg.speak = multipartText;
    msg.lang = lang;
    msg.onend = self.OnFinishedPlaying;
    msg.onerror = function (e) {
      console.log('Error');
     ...