Es posible que en alguna aplicación que se desarrolle, se necesite que un texto sea leído con voz alta por la aplicación. Esto, que puede parecer complicado, ya está implementado en Android, por lo que simplemente habrá que llamar a los métodos adecuados para que el usuario oiga por el altavoz de su dispositivo la lectura del texto que se desee.
La clase encargada de esto es TextToSpeech (http://developer.android.com/reference/android/speech/tts/TextToSpeech.html). Mediante el método llamado speak, el sistema leerá la cadena que se le pase.
Lo primero será importar la clase TextToSpeech, donde se encuentran todos los métodos para hacer un texto leído con voz en Android.
import android.speech.tts.TextToSpeech;
A continuación, se declara la variable donde se instanciará la clase.
TextToSpeech ttobj;
Lo siguiente, será crear la instancia e inicializar el objeto. Un buen lugar para hacerlo sería en onCreate, donde a parte de crearlo, habrá que sobreescribir el método onInit. En onInit se debe indicar el idioma en el cual se va a leer.
ttobj=new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { if(status != TextToSpeech.ERROR){ Locale loc = new Locale ("spa", "ESP"); ttobj.setLanguage(loc); } } });
Hay que tener en cuenta que en el caso del castellano, se debe crear un nuevo objeto de tipo Locale, ya que no está definido por defecto como sí que lo están otros como el inglés de Reino Unido, donde con pasar como parámetro Locale.UK valdría. Cuidado con el código del idioma, ya que para castellano es «spa» y la tendencia sería escribir «es», lo cual no funcionará.
Como el objeto se queda inicializado en memoria, sería interesante liberar los recursos cuando la vista no esté activa. Esto se hará, como siempre, sobreescribiendo el onPause.
@Override public void onPause(){ if(ttobj !=null){ ttobj.stop(); ttobj.shutdown(); } super.onPause(); }
Con todo esto, ya está listo para leer el texto que se le pase, simplemente llamando al método speak donde se necesite pasar texto a voz en Android.
ttobj.speak("Texto a leer", TextToSpeech.QUEUE_FLUSH, null);
Con QUEUE_FLUSH, el texto se lee en voz alta de forma inmediata, mientras que si se especificara QUEUE_ADD, éste se pondría a la cola en caso de haber otras cadenas reproduciéndose o a la espera para hacerlo.