TTS(Text To Speech) mediante Xamarin.Android



Hola que tal hoy les traigo un ejemplo basico de dictado para Xamarin.Android muy util para darle un plus a nuestras aplicaciones.

Iniciaremos creando nuestra interfaz Layout con el siguiente codigo:
 
<linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">
    <textview android:gravity="center" android:id="@+id/textView1" android:layout_height="wrap_content" android:layout_width="match_parent" android:text="TTS Demo" android:textappearance="?android:attr/textAppearanceLarge" />
    <edittext android:id="@+id/Texto" android:layout_height="wrap_content" android:layout_width="match_parent" />
    <button android:id="@+id/Button1" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="Magic" />
</linearlayout>
Enseguida crearemos nuestro codigo que es demasiado sencillo e intuitivo:

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
//Importaremos la librearia necesaria para el uso del TTS "Android.Speech.Tts"
using Android.Speech.Tts;
//Importaremos la libreria para el uso de colecciones "System.Collections.Generic"
using System.Collections.Generic;
namespace TTSDemo
{
    //Implementaremos el tipo TextToSpeech.IOnInitListener para poder activar nuestro TTS al iniciar nuestra app
    [Activity (Label = "TTSDemo", MainLauncher = true)]
    public class MainActivity : Activity, TextToSpeech.IOnInitListener
    {
        //Declararemos nuestra variable del tipo TextToSpeech
        private TextToSpeech tts;
        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);
            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);
            //Inicializaremos nuestra variable principal que nos pide dos parametros nuestro contexto y una clase
            //tipo TextToSpeech.IOnInitListener la cual heredamos mediante la implementacion de la clase
            tts = new TextToSpeech (this, this);
            Button button = FindViewById<Button> (Resource.Id.Button1);
            EditText caja = FindViewById<EditText> (Resource.Id.Texto);
            button.Click += delegate {
                //Verificamos que nuestra variable tipo TextToSpeech sea diferente de null
                if (tts!=null) {
                    //En una variable tipo string depositamos el contenido de nuestro textbox
                    String text = caja.Text;
                    //Verificamos que nuestra variable de texto no sea nula para evitar una excepcion
                    if (text!=null) {
                        //Verificamos que nuestro telefono no este usando la funcion de dictado
                        if (!tts.IsSpeaking) {
                            //mandamos a llamar la funcion de dictado que nos pedida tres parametros
                            //1 Texto a dictar
                            //2 Modo
                            //3 Diccionario de parametros el cual ira vacio en esta ocacion
                            tts.Speak(text, QueueMode.Flush, new Dictionary());
                        }
                    }
                }
            };
        }
        //Nuestro metodo importante en el cual nos devolvera al momento de inicializar nuestro TTS
        public void OnInit (OperationResult status)
        {
            //Verificamos que nuestra variable haya sido inicializada correctamente
            if (status.Equals (OperationResult.Success)) {
                //Asignamos el idima a utlizar en este caso seleccionamos el idioma por default del sistema
                tts.SetLanguage (Java.Util.Locale.Default);
                //Enviamos una notificacion de que se activo nuestro TTS correctamente
                Toast.MakeText (this, "TTS Activado Correctamente", ToastLength.Long).Show ();
            }
            else {
                //Enviamos una notificacion si no se activo nuestro TTS correctamente
                Toast.MakeText (this, "Error al activar TTS", ToastLength.Long).Show ();
            }
        }
        //En nuestro metodo de destruccion paramos y apagamos el dictado
        protected override void OnDestroy ()
        {
            if (tts!=null) {
                tts.Stop ();
                tts.Shutdown();
            }
            base.OnDestroy ();
        }
    }
} 
 Listo con unas cuantas lineas de codigo ahora nuestras apps estaran mas vivas que nunca ahora veremos nuestros resultados:



Pueden bajar el ejemplo completo desde aqui:

https://github.com/AlejandroRuiz/Mono/tree/master/TTSDemo

Espero que les sea de utilidad sin antes ponerme a sus ordenes para cualquier comentario o duda mediante este blog o cualquiera de mis redes sociales:
Facebook: https://www.facebook.com/alexrhack
Twitter: https://twitter.com/alejandroruizva

Les dejo la documentación oficial de android acerca de esta libreria:
http://developer.android.com/reference/android/speech/tts/TextToSpeech.html

y como ya es costumbre les dejo algo de musica para que se relajen:


Comentarios

Entradas populares de este blog

Bluetooth Arduino + Xamarin.Android

Simple ListView with Xamarin.Forms

Xamarin.Forms: Get native image from ImageSource