Estoy implementando una aplicación de respuesta de voz interactiva en Android. Me gustaría saber cómo determinar cuándo ha funcionado la función tts.speak()
para que pueda llamar a mi función de reconocimiento de voz.¿Cómo saber cuándo termina el TTS?
Respuesta
public class TTSActivity extends Activity implements OnInitListener, OnUtteranceCompletedListener, ... {
private TextToSpeech mTts;
...........
private void speak(String text) {
if(text != null) {
HashMap<String, String> myHashAlarm = new HashMap<String, String>();
myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_ALARM));
myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "SOME MESSAGE");
mTts.speak(text, TextToSpeech.QUEUE_FLUSH, myHashAlarm);
}
}
// Fired after TTS initialization
public void onInit(int status) {
if(status == TextToSpeech.SUCCESS) {
mTts.setOnUtteranceCompletedListener(this);
}
}
// It's callback
public void onUtteranceCompleted(String utteranceId) {
Log.i(TAG, utteranceId); //utteranceId == "SOME MESSAGE"
}
...........
}
LeerA good tutorial
una pregunta, ¿por qué no ser llamado el método onUtteranceCompleted()? Intento hacerlo y no puedo hacer que me despidan. Gracias. – Felipeap
Este método se activa cuando termina la síntesis de sonido. Este es el método de devolución de llamada. Así que no necesita llamar a este método. Es un oyente – mysuperass
He actualizado mi respuesta. Por favor, lea el tutorial – mysuperass
me di cuenta de que hay personas que tienen problemas en el uso de síntesis de voz para pedir que la solución a que
Cómo saber cuándo está terminado TTS? sin uso setOnUtteranceCompletedListener
public void isTTSSpeaking(){
final Handler h =new Handler();
Runnable r = new Runnable() {
public void run() {
if (!tts.isSpeaking()) {
onTTSSpeechFinished();
}
h.postDelayed(this, 1000);
}
};
h.postDelayed(r, 1000);
}
El setOnUtteranceCompletedListener está obsoleta desde nivel API 15. En lugar de ello, utilizar setOnUtteranceProgressListener.
He encontrado un fragmento de código (here) que hace que sea muy fácil para mí saber cuando se termine de texto a voz:
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
myTTS.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onDone(String utteranceId) {
// Log.d("MainActivity", "TTS finished");
}
@Override
public void onError(String utteranceId) {
}
@Override
public void onStart(String utteranceId) {
}
});
} else {
Log.e("MainActivity", "Initilization Failed!");
}
}
utilizar un SpeakableListener cuándo texto para hablar.
private volatile boolean finished;
private SpeakableListener listener = new SpeakableListener() {
@Override
public void markerReached(SpeakableEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void speakableCancelled(SpeakableEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void speakableEnded(SpeakableEvent arg0) {
TestSpeaker.this.finished = true;
}
@Override
public void speakablePaused(SpeakableEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void speakableResumed(SpeakableEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void speakableStarted(SpeakableEvent arg0) {
TestSpeaker.this.finished = false;
}
@Override
public void topOfQueue(SpeakableEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void wordStarted(SpeakableEvent arg0) {
// TODO Auto-generated method stub
}
};
/** Speak the following string. */
public void sayIt(String str) {
System.out.print(" " + str + " ");
/* The the synthesizer to speak. */
synthesizer.speakPlainText(str, listener);
¿De qué estás hablando? ¿Qué SpeakableListener? –
cómo usar SpeakableListener? –
esto no está disponible en Android – shelll
Pruebe este código siguiente que muestra un brindis después de que se complete TTS. Reemplace la tostada con su propia acción.
public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener{
private boolean initialized;
private String queuedText;
private String TAG = "TTS";
private TextToSpeech tts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tts = new TextToSpeech(this /* context */, this /* listener */);
tts.setOnUtteranceProgressListener(mProgressListener);
speak("hello world");
}
public void speak(String text) {
if (!initialized) {
queuedText = text;
return;
}
queuedText = null;
setTtsListener(); // no longer creates a new UtteranceProgressListener each time
HashMap<String, String> map = new HashMap<String, String>();
map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "MessageId");
tts.speak(text, TextToSpeech.QUEUE_ADD, map);
}
private void setTtsListener() {
}
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
initialized = true;
tts.setLanguage(Locale.ENGLISH);
if (queuedText != null) {
speak(queuedText);
}
}
}
private abstract class runnable implements Runnable {
}
private UtteranceProgressListener mProgressListener = new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
} // Do nothing
@Override
public void onError(String utteranceId) {
} // Do nothing.
@Override
public void onDone(String utteranceId) {
new Thread()
{
public void run()
{
MainActivity.this.runOnUiThread(new runnable()
{
public void run()
{
Toast.makeText(getBaseContext(), "TTS Completed", Toast.LENGTH_SHORT).show();
}
});
}
}.start();
}
}; }
- 1. WCF: ¿Cómo saber cuándo termina una sesión?
- 2. ¿Cómo saber cuándo una actividad termina un pase de disposición?
- 3. ¿Cómo saber cuándo termina un servicio de finalización entregando resultados?
- 4. ¿Cómo saber cuándo se inicia el comando dismissModalViewControllerAnimated y también cuando se termina?
- 5. cómo saber si $ string termina con ','?
- 6. ¿Cómo saber si un motor TTS específico está marcado (habilitado)?
- 7. iOS: ¿Cómo detectar cuándo termina una animación?
- 8. ¿Cómo saber cuándo se ha pausado el MPMoviePlayerController en iPhone?
- 9. saber cuándo llamar persistir
- 10. ¿Cómo saber cuándo Big O es logarítmico?
- 11. ¿Cómo puedo saber cuándo NSTextView pierde foco?
- 12. writeToFile cómo saber cuándo se completó
- 13. Java: Producer = Consumer, ¿cómo saber cuándo parar?
- 14. Cómo saber cuándo Windows está inactivo
- 15. ¿Cómo saber cuándo el dispositivo iOS está enchufado?
- 16. ¿Cómo saber cuándo sale el proceso en Linux?
- 17. wpf ¿cómo saber cuándo ha finalizado el enlace de datos?
- 18. Android - Cómo saber cuándo MediaPlayer está almacenando en el buffer
- 19. Java - ¿Cómo saber cuándo está esperando el hilo?
- 20. ¿Cómo puedo saber cuándo un EditText pierde el foco?
- 21. ¿Cómo puedo saber cuándo ha llegado el último OutputDataReceived?
- 22. Cómo saber cuándo es necesario el escape para MySQL
- 23. AudioTrack: cómo saber cuándo comienza/finaliza un sonido.
- 24. agregar mi motor TTS a Android TTS Serivce como SAPI
- 25. ¿Cómo puedo saber cuándo ha terminado una animación UITableView?
- 26. ¿Cómo saber si la aplicación se termina por el usuario o iOS (después de fondo 10min)
- 27. cómo saber programáticamente si hay algún motor TTS instalado en mi dispositivo o no?
- 28. ¿Hay alguna forma de determinar cuándo termina una cadena .NET?
- 29. lenguas desaparecidas en TTS androide
- 30. Pausa en TTS android
puede comprobar esta respuesta esto está funcionando para mí http://stackoverflow.com/a/17921775/1355195 – Sanath