blob: 67697947396dc02a1b311af2e14ba21ee5af8b7c [file] [log] [blame]
// Copyright 2011 Google Inc. All Rights Reserved.
package android.speech.tts;
/**
* Listener for events relating to the progress of an utterance through
* the synthesis queue. Each utterance is associated with a call to
* {@link TextToSpeech#speak} or {@link TextToSpeech#synthesizeToFile} with an
* associated utterance identifier, as per {@link TextToSpeech.Engine#KEY_PARAM_UTTERANCE_ID}.
*
* The callbacks specified in this method can be called from multiple threads.
*/
public abstract class UtteranceProgressListener {
/**
* Called when an utterance "starts" as perceived by the caller. This will
* be soon before audio is played back in the case of a {@link TextToSpeech#speak}
* or before the first bytes of a file are written to storage in the case
* of {@link TextToSpeech#synthesizeToFile}.
*
* @param utteranceId the utterance ID of the utterance.
*/
public abstract void onStart(String utteranceId);
/**
* Called when an utterance has successfully completed processing.
* All audio will have been played back by this point for audible output, and all
* output will have been written to disk for file synthesis requests.
*
* This request is guaranteed to be called after {@link #onStart(String)}.
*
* @param utteranceId the utterance ID of the utterance.
*/
public abstract void onDone(String utteranceId);
/**
* Called when an error has occurred during processing. This can be called
* at any point in the synthesis process. Note that there might be calls
* to {@link #onStart(String)} for specified utteranceId but there will never
* be a call to both {@link #onDone(String)} and {@link #onError(String)} for
* the same utterance.
*
* @param utteranceId the utterance ID of the utterance.
* @deprecated Use {@link #onError(String,int)} instead
*/
@Deprecated
public abstract void onError(String utteranceId);
/**
* Called when an error has occurred during processing. This can be called
* at any point in the synthesis process. Note that there might be calls
* to {@link #onStart(String)} for specified utteranceId but there will never
* be a call to both {@link #onDone(String)} and {@link #onError(String,int)} for
* the same utterance. The default implementation calls {@link #onError(String)}.
*
* @param utteranceId the utterance ID of the utterance.
* @param errorCode one of the ERROR_* codes from {@link TextToSpeech}
*/
public void onError(String utteranceId, int errorCode) {
onError(utteranceId);
}
/**
* Wraps an old deprecated OnUtteranceCompletedListener with a shiny new
* progress listener.
*
* @hide
*/
static UtteranceProgressListener from(
final TextToSpeech.OnUtteranceCompletedListener listener) {
return new UtteranceProgressListener() {
@Override
public synchronized void onDone(String utteranceId) {
listener.onUtteranceCompleted(utteranceId);
}
@Override
public void onError(String utteranceId) {
listener.onUtteranceCompleted(utteranceId);
}
@Override
public void onStart(String utteranceId) {
// Left unimplemented, has no equivalent in the old
// API.
}
};
}
}