Visualizzazione post con etichetta TTS. Mostra tutti i post
Visualizzazione post con etichetta TTS. Mostra tutti i post

mercoledì 24 dicembre 2014

TextToSpeech su Browser

Per una installazione didattica avevo bisogno di un lettore per un testo su una pagina web. Non considerando l'ipotesi di un lettore umano ho voluto provare i sistemi (sperimentali) di TextToSpeech che prendono un generico testo ed inviano l'audio di quanto letto in automatico


Il codice per generare e' il seguente (Il testo e' tratto dall'introduzione dalle Lecture on Physics di Feynman)

---------------------------------------------
<html>
<head>
  <title>TTS</title>
  <script  src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

  <script>
     $(document).ready(function() {
      var u1 = new SpeechSynthesisUtterance();
  u1.text = $('div').html();
  u1.lang = 'en-US';
          u1.pitch = 2;
          u1.rate = 0.5;
          u1.voiceURI = 'native';
          u1.volume = 0.5;
          speechSynthesis.speak(u1);
    });
  </script>
  <div id="demo_div">
This two-year course in physics is presented from the point of view that you, the reader, are going to be a physicist. This is not necessarily the case of course, but that is what every professor in every subject assumes! If you are going to be a physicist, you will have a lot to study: two hundred years of the most rapidly developing field of knowledge that there is. So much knowledge, in fact, that you might think that you cannot learn all of it in four years, and truly you cannot; you will have to go to graduate school too!

  </div>
---------------------------------------------

e di seguito il video del risultato


con Chrome la lettura e' molto buona ma viene troncata a circa meta' testo (tutto il lavoro e' fatto in remoto dai server di Google che leggono il testo, lo processano e mandano indietro un file audio....ad occhio c'e' impostato un tempo limite) mentre in Safari e' decisamente ridicola

Un'altra soluzione, costosa ma non poi cosi' tanto visti i risultati, e' data da GSpeech, un plugin per Joomla e Wordpress che surclassa decisamente le Api di TTS con un testo senza limiti di tempo e con una intonazione non piatta ma basata sulla punteggiatura (atttenzione audio basso)



martedì 18 dicembre 2012

Pico TTS vs Ivona TTS

Il motore Text To Speech di default per Android e' Pico ma esistono molte soluzioni alternative; particolarmente interessante e' Ivona TTS che ha una qualita' del parlato nettamente superiore e meno metalliche di Pico.

Il motore Ivona puo' essere scaricato gratuitamente da Google Play ed ha come unico difetto una occupazione di circa 10 volte superiore rispetto a quella di Pico

Di seguito due esempi in italiano

Ivona TTS



giovedì 6 dicembre 2012

Text to Speech (TTS) con Pico

Una delle funzioni meno utilizzate (ma anche delle piu' interessanti) e' quella di poter utilizzare delle API per poter enunciare una stringa

Il motore di TTS di default su Android e' Pico e non sempre ci sono tutti i linguaggi installati ..quindi se si vuole che il telefono parli in inglese non ci sono problemi ma se si vuole una lingua un po' piu' esotica va scaricata a parte

Gli esempi su come usare Pico sono gia' inclusi negli esempi dei developer di Android quindi non c'e' molto da fare se non usare il sistema


La voce e' piuttosto metallica e robotica rispetto ad altri motori TTS ma c'e' da dire che i file sono estremamente compatti

un primo metodo per testare TTS e' il seguente ma di fatto non e' utile in casi reali di programmazione
---------------------------------------------------------------

package com.example.tts;
import android.os.Bundle;
import android.app.Activity;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;


public class MainActivity extends Activity implements OnInitListener{

private TextToSpeech talker;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
talker = new TextToSpeech(this, this);
say("Luca Innocenti");
}

public void say(String text2say){
    talker.speak(text2say, TextToSpeech.QUEUE_FLUSH, null);
   }

public void onInit(int status) {
//say("Luca Innocenti");
}

@Override
public void onDestroy() {
if (talker != null) {
talker.stop();
talker.shutdown();
}
super.onDestroy();
}
}
---------------------------------------------------------------

Il secondo metodo e' decisamente piu' interattivo
---------------------------------------------------------------

package com.example.tts2;

import java.util.Locale;

import android.os.Bundle;
import android.app.Activity;
import android.speech.tts.TextToSpeech;
//import android.speech.tts.TextToSpeech.OnInitListener;
import android.util.Log;
import android.view.Menu;
import android.widget.Button;
import android.widget.EditText;
import android.view.View;

public class MainActivity extends Activity implements TextToSpeech.OnInitListener {

private Button pulsante;
private EditText txtv;
private TextToSpeech tts;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

pulsante = (Button) findViewById(R.id.button1);
txtv = (EditText) findViewById(R.id.editText1);

tts = new TextToSpeech(this, this);

pulsante.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View arg0) {
                speakOut();
            }

        });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

@Override
public void onInit(int status) {
// TODO Auto-generated method stub
if (status == TextToSpeech.SUCCESS) {
 
            int result = tts.setLanguage(Locale.US);

            if (result == TextToSpeech.LANG_MISSING_DATA
                    || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                Log.e("TTS", "This Language is not supported");
            } else {
                pulsante.setEnabled(true);
                speakOut();
            }

        } else {
            Log.e("TTS", "Initilization Failed!");
        }

}

private void speakOut() {
// TODO Auto-generated method stub
String text = txtv.getText().toString();
 
        tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);

}

}
--------------------------------------------------------

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_marginBottom="66dp"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/editText1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="46dp"
        android:text="Button" />

</RelativeLayout>

Geologi

  E so anche espatriare senza praticamente toccare strada asfaltata