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.
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:
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
Descargate la aplicación completa en este michi enlace
enjoy!!! 🙂
El CRC o Verificación de Redundancia Cíclica o Comprobación de redundancia cíclica es una técnica utilizada para detect[...]
Una procedimiento almacenado es un conjunto de sentencias de SQL que se pueden almacenar en el servidor, de esta forma n[...]
LibGDX nos permite hacer uso de archivos de sonido muy fácilmente, cuenta con dos tipos de manejo de archivos, estos son[...]
Muchas de las innovaciones computacionales de la NASA se desarrollaron para ayudar a explorar el espacio, pero ahora la[...]
Continuación del tutorial «Utiliza 2 bases de datos diferentes en una aplicación» La Interfaz frmSelected.java: Haciendo[...]
Servicio Web Un servicio web (en inglés, Web Service o Web services) es una tecnología que utiliza un conjunto de protoc[...]