PDA

Ver la Versión Completa : [ CONSULTA ] Probema con TextToSpeech heredado


LEAJIM_454
03/04/15, 05:00:03
Hola, amigos una duda de nuevo.
Mi problema recide en que no puedo crear una clase heredada, si es que esta bien dicho. es que uso la clase textToSpeech demasiadas veces y traté de ponerlo en una clase pero siempre me da un error en una linea les dejo el codigo, gracias de antemano

package com.Ena.Education.c;

import android.content.Context;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;

public class TextToSpeechEnuma extends TextToSpeech{

public TextToSpeechEnuma(Context context, OnInitListener listener) {
super(context, listener);
// TODO Auto-generated constructor stub
}
public TextToSpeech TTS;

public void Habla(String str) {
TTS.speak( str, TextToSpeech.QUEUE_FLUSH, null ); // esta linea es la que me da el error
TTS.setSpeechRate( -2.0f );
TTS.setPitch( 0.0f );
}

}

TextToSpeechEnuma TTS = new TextToSpeechEnuma(getActivity(), new OnInitListener() { //tambien esta linea me da error

override
public void onInit(int status) {
// TODO Auto-generated method stub

}
});
TTS.Habla("Prueba");

mocelet
03/04/15, 12:14:18
Te da error porque la variable TTS de la clase TexToSpeechEnuma es null ya que nunca le has asignado valor, ni al declararla, ni en el constructor ni antes de usarla en Habla.

Por otro lado, la iniciliaización del TextToSpeech y la asignación de parámetros deberías hacerla solo una vez porque es un proceso lento, no cada vez que quieras decir algo. Vamos, que tampoco te hace falta heredar nada (no estás extendiendo la funcionalidad de la clase), simplemente tener un método que inicialice y establezca el speechRate y el pitch. Como solo hay que hacerlo una vez, te basta con llamar al método desde el onCreate.

Luego cuando quieras decir algo solo tienes que hacer una llamada al método speak.

kriogeN
03/04/15, 15:39:26
Exacto, es lo que dice mocelet, estás heredando TextToSpeech para luego usar a TextToSpeech como cliente.

Si realmente quieres usar la herencia lo que tienes que hacer es quitar la variable TTS y los métodos que usas sobre TTS usarlos sobre this, ya que tu propia clase es una clase TextToSpeech.

Como también ha dicho mocelet setSpeechRate y setPitch sólo necesitas ejecutarlos 1 vez, por tanto puedes ponerlos a continuación de la llamada "super" en el constructor. Y también haciéndolo sobre this.

LEAJIM_454
03/04/15, 22:05:55
Te da error porque la variable TTS de la clase TexToSpeechEnuma es null ya que nunca le has asignado valor, ni al declararla, ni en el constructor ni antes de usarla en Habla. Por otro lado, la iniciliaización del TextToSpeech y la asignación de parámetros deberías hacerla solo una vez porque es un proceso lento, no cada vez que quieras decir algo. Vamos, que tampoco te hace falta heredar nada (no estás extendiendo la funcionalidad de la clase), simplemente tener un método que inicialice y establezca el speechRate y el pitch. Como solo hay que hacerlo una vez, te basta con llamar al método desde el onCreate. Luego cuando quieras decir algo solo tienes que hacer una llamada al método speak.

Perdón pero no entiendo mucho de lo que dice, como es que tengo que declarar un valor al TTS, ¿Que es exactamente lo que estoy haciendo mal?

Exacto, es lo que dice mocelet, estás heredando TextToSpeech para luego usar a TextToSpeech como cliente. Si realmente quieres usar la herencia lo que tienes que hacer es quitar la variable TTS y los métodos que usas sobre TTS usarlos sobre this, ya que tu propia clase es una clase TextToSpeech. Como también ha dicho mocelet setSpeechRate y setPitch sólo necesitas ejecutarlos 1 vez, por tanto puedes ponerlos a continuación de la llamada "super" en el constructor. Y también haciéndolo sobre this.