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!!! 🙂
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! :)
AssertJ Swing es una biblioteca para Java que proporciona una interfaz fluida para la realización automatizada de prueba...
Crear una librería swing para java utilizando Netbeans no es nada del otro mundo y la cantidad de código que vayamos a e...
En este post realizaremos una aplicación que pueda capturar nuestra voz y convertir en texto Pasar voz a texto con Andro...
En este post aprenderemos los pasos básicos para construir una aplicación android con soporte multilenguaje, utilizaremo...
En este tutorial veremos un poco lo que es el diseño de interfaces en android, en lugar de colocar el ejemplo de uso de...
Utilizando pygame para hacer gráficos en python, se muestra a continuación un sencillo ejemplo de cómo utilizar esta lib...
Los comentarios estan cerrados
El archuivo helpers.php en Laravel contiene funciones globales de PHP los cuales se pueden utilizar en cualquier parte d...
El gigante tecnologico de Google ingresa a la competencia de los ChatBot con Inteligencia Artificial a traves de Bard. B...
uiverse.io es u sitio web para desarrolladores que contiene miles de elementos de interfaz de usuario HTML/CSS creados y...
¿Estas buscando fondos animados para tus sitios web? Animated BG es un sitio web donde puedes encontrar cientos de fondo...
Muy buen material, la verdad que te pasaste, otros estarían cobrando para que pudieramos tener accesos. Sos un groso, sabelo. Saludos desde Uruguay.
yo cobro pero nadie paga :/
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.
podrías asignar un tamaño fijo al JFrame, antes de mostrar el jframe obtienes el tamaño de pantalla y asignas al jframe
me enacanto esa animacion me dio muchas ideas gracias por el aporte suerte..
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?
hola….necesito una ayuda .necesito saber como hacer que la pelota salte y tenga un efecto de gravedad. porfa porfa
Muchisimas gracias tu si sabes!!!
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)
Buenas tardes;
El material aportado esta bueno pero seria mejor si tuvieras un tutorial de como realizarlo.
Gracias.