Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Android / TextToSpeech: Convierte texto a voz

TextToSpeech: Convierte texto a voz

Autor jc mouse lunes, septiembre 9, 2013

TextToSpeech o TTS, es el sintetizador de voz para android, en los celulares inteligentes viene un motor TTS por defecto que es PICO TTS, es free y viene con varias opciones de voz, ingles, español, chino, etc aunque la voz es muy monótona.

Existen otros motores de voz disponibles aunque la mayoría es de pago, IVONA TTS es una alternativa muy buena que puedes descargarte FREE porque esta en fase beta.

Para ver el motor de voz que tienes en tu smartphone, debes ir a propiedades y buscar “idioma e introducción de texto” o algo parecido, dentro buscas la opción “Síntesis de voz” y tendrás la lista de TTS disponibles.

tts android

Herramientas

– Eclipse Indigo con Android instalado y configurado.

– Motor de voz PICO TTS

Tiempo: 10 minutos

Nivel: Intermedio

Proyecto Eclipse TTS

1.Crea un nuevo Application Android Project con la siguiente configuración:

Application Name: TTS Example

Project Name: TTSExample

Package Name: com.tutorial.ttsexample

Activity: Blank Activity

Activity Name: MainActivity.java

Layout Name: activity_main.xml

2. Nuestro activity_main.xml tendrá el siguiente codigo

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/texto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="4dp"
        android:layout_marginTop="4dp"
        android:ems="10"
        android:inputType="textMultiLine"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/str1" />

    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/str2" />

    <Button
        android:id="@+id/btn3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/str3" />

</LinearLayout>

Debemos editar también el archivo string.xml ubicado en RES/VALUES/

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">TTS Example</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="str1">Hablame</string>
    <string name="str2">Habla rápido</string>
    <string name="str3">Habla como gringo</string>

</resources>

Nuestra interfaz debe tener ahora la siguiente forma:

eclipse tts

3. La clase MainActivity.java tiene por código:

01 package com.bolivia.ttsexample;
02 
03 import java.util.Locale;
04 import android.os.Bundle;
05 import android.app.Activity;
06 import android.speech.tts.TextToSpeech;
07 import android.speech.tts.TextToSpeech.OnInitListener;
08 import android.util.Log;
09 import android.view.Menu;
10 import android.view.View;
11 import android.widget.Button;
12 import android.widget.EditText;
13 
14 public class MainActivity extends Activity implements OnInitListener {
15 
16  //Motor de voz
17  private TextToSpeech tts;
18  //
19  private EditText texto;
20  private Button button1;
21  private Button button2;
22  private Button button3;
23  
24  @Override
25  protected void onCreate(Bundle savedInstanceState) {
26   super.onCreate(savedInstanceState);
27   setContentView(R.layout.activity_main);
28   
29   //===================================================== 
30   tts = new TextToSpeech( this, this );
31   texto = (EditText) findViewById(R.id.texto );
32   button1 = (Button) findViewById(R.id.btn1 );
33   button2 = (Button) findViewById(R.id.btn2 );
34   button3 = (Button) findViewById(R.id.btn3 );
35   
36   // Habla normal
37   button1.setOnClickListener(new View.OnClickListener() {
38 
39    @Override
40    public void onClick(View arg0) {
41     dime_algo( texto.getText().toString() );
42    }
43 
44   });
45   //Habla rapido
46   button2.setOnClickListener(new View.OnClickListener() {
47 
48    @Override
49    public void onClick(View arg0) {
50     tts.setPitch(3); //incrementa velocidad
51     dime_algo( texto.getText().toString() );
52     tts.setPitch(1);//restaura velocidad
53    }
54 
55   });
56   //habla en ingles
57   button3.setOnClickListener(new View.OnClickListener() {
58 
59    @Override
60    public void onClick(View arg0) {
61     tts.setLanguage( Locale.ENGLISH );
62     dime_algo( texto.getText().toString() );
63     tts.setLanguage( Locale.getDefault() );
64    }
65 
66   });
67   //=====================================================
68  }
69 
70  @Override
71  public boolean onCreateOptionsMenu(Menu menu) {
72   // Inflate the menu; this adds items to the action bar if it is present.
73   getMenuInflater().inflate(R.menu.main, menu);
74   return true;
75  }
76 
77  //Inicia TTS
78  @Override
79  public void onInit(int status) {
80   
81   if ( status == TextToSpeech.SUCCESS ) {
82 
83    //coloca lenguaje por defecto en el celular, en nuestro caso el lenguaje es aspañol 😉
84    int result = tts.setLanguage( Locale.getDefault() );
85 
86    if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
87     button1.setEnabled(false);
88     button2.setEnabled(false);
89     button3.setEnabled(false);
90     Log.e("TTS", "This Language is not supported");
91    } else {
92     button1.setEnabled(true);
93     button2.setEnabled(true);
94     button3.setEnabled(true);
95    }
96 
97   } else {
98    Log.e("TTS", "Initilization Failed!");
99   }
100  }
101 
102  /**
103  * metodo para convertir texto a voz
104  * @param String texto
105  * */
106  private void dime_algo( String texto ) {
107   tts.speak( texto, TextToSpeech.QUEUE_FLUSH, null );
108  }
109  
110  //Cuando se cierra la aplicacion se destruye el TTS
111  @Override
112  public void onDestroy() {
113   if (tts != null) {
114    tts.stop();
115    tts.shutdown();
116   }
117   super.onDestroy();
118  }
119  
120 }//-->fin clase

donde:

#14 la clase implementa la interface OnInitListener que nos permite definir la inicializacion del TTS

#17 Declaramos también una variable de tipo TextToSpeech

#30 Creamos una nueva instancia TextToSpeech

#37,#46,#57 Para cada button, se implementa un OnClickListener para manejar el evento onClick

#79 En el método onInit debemos cargar la configuración del motor TTS como el lenguaje, si este es incorrecto o no existe, des habilitamos todos los botones, así también, si se produce algún error en el motor avisamos mediante el LOG.

#84 Para asignar el lenguaje, hacemos uso de setLanguage y con Locale podremos asignar uno de los lenguajes disponibles.

#106 Declaramos un método para convertir el texto en voz

#112 Cuando la aplicación android se destruya, debemos también detener y destruir el TTS para liberar recursos

Finalmente ejecutamos la aplicación

android bolivia

Descargate la aplicación completa en este michi enlace

enjoy!!! 🙂

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

BootChess – Ajedrez en 487 bytes

BootChess – Ajedrez en 487 bytes

Desde que se crearon los videojuegos para computadora, el espacio de almacenamiento y memoria han sido siempre un proble...

Decompilar archivos APK

Decompilar archivos APK

Las aplicaciones para celulares inteligentes con sistema operativo Android, se distribuyen en archivos *.APK, si como pr...

JavaScript: Script y Web para generar banderas ondeando

JavaScript: Script y Web para generar banderas ondeando

Online Flag Waver es una páginas web con la que podemos generar banderas ondeando con la textura que elijamos ya sea des...

HSQLDB: Gestor de bases de datos libre en java

HSQLDB: Gestor de bases de datos libre en java

HyperSQL DataBase (HSQLDB) es un moderno administrador de bases de datos relacionales, es portátil e implementado en jav...

Compresión y descompresión de archivos con GZIP

Compresión y descompresión de archivos con GZIP

En este post veremos un ejemplo de como comprimir y descomprimir archivos con el método de compresión GZIP  y el paquete...

Crea tu blog con el patrón MVC y php

Crea tu blog con el patrón MVC y php

En post anteriores se vio algunos conceptos y ejemplos de lo que es el patrón MVC,  dando un paso más adelante ahora con...

10 comentarios en “TextToSpeech: Convierte texto a voz”

  1. alepinato dice:

    Muy buen material, la verdad que te pasaste, otros estarían cobrando para que pudieramos tener accesos. Sos un groso, sabelo. Saludos desde Uruguay.

    1. Mouse dice:

      yo cobro pero nadie paga :/

  2. Jose Cardona dice:

    Hola gracias por tus articulos y proyectos tan útiles, googleando encontré este artículo ‘Bloquear pantalla cliente’, necesito hacer algo similar, que un JFrame siempre esté maximizado, le puesto las propiedades para que se ejecute maximizado y que no permita cambiar el tamaño, y en efecto funciona, pero al dar doble clic en la barra de título se restaura a su tamaño inicial, que sugerencia me puedes dar para que el JFrame siempre esté maximizado, he pensado en lo que haces en este ejemplo de tener un proceso corriendo y me maximice la ventana.

    1. Mouse dice:

      podrías asignar un tamaño fijo al JFrame, antes de mostrar el jframe obtienes el tamaño de pantalla y asignas al jframe

  3. lady dice:

    me enacanto esa animacion me dio muchas ideas gracias por el aporte suerte..

  4. Rockselys dice:

    Muy buen material, logré que la pelota se moviera a cierta distancia, pero quisiera saber como podría mover dos imagenes paraleras al mismo tiempo ¿Sabrás algo de eso?

  5. brandon dice:

    hola….necesito una ayuda .necesito saber como hacer que la pelota salte y tenga un efecto de gravedad. porfa porfa

  6. Gabi dice:

    Muchisimas gracias tu si sabes!!!

  7. gerardo dice:

    Muchísimas gracias compañero, yo tenia que hacer un pacman, y me sirvió muchísimo para los fantasmas aleatorios T,T de verdad éxitos siempre (Y)

  8. Junior dice:

    Buenas tardes;
    El material aportado esta bueno pero seria mejor si tuvieras un tutorial de como realizarlo.

    Gracias.

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

Se define como Transacción en base de datos a una “unidad lógica de trabajo” compuesta por un conjunto de op...

Si te gusta realizar tus propios memes o foto montajes pero tienes poca o nula experiencia en editores gráficos como Pho...

Los procedimientos almacenados no solo pueden retornar valores como números, cadenas, etc, sino también datos como los R...

XAMPP es un software para la gestión de base de datos, servidor web apache e interprete para lenguajes como php o perl....

Android Bolivia

MAUS