1754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath// Copyright 2011 Google Inc. All Rights Reserved. 2754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath 3754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamathpackage android.speech.tts; 4754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath 5754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath/** 6754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * Listener for events relating to the progress of an utterance through 7754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * the synthesis queue. Each utterance is associated with a call to 8754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * {@link TextToSpeech#speak} or {@link TextToSpeech#synthesizeToFile} with an 9754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * associated utterance identifier, as per {@link TextToSpeech.Engine#KEY_PARAM_UTTERANCE_ID}. 10754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * 11754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * The callbacks specified in this method can be called from multiple threads. 12754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath */ 13754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamathpublic abstract class UtteranceProgressListener { 14754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath /** 15754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * Called when an utterance "starts" as perceived by the caller. This will 16754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * be soon before audio is played back in the case of a {@link TextToSpeech#speak} 17754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * or before the first bytes of a file are written to storage in the case 18754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * of {@link TextToSpeech#synthesizeToFile}. 19754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * 20754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * @param utteranceId the utterance ID of the utterance. 21754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath */ 22754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath public abstract void onStart(String utteranceId); 23754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath 24754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath /** 25754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * Called when an utterance has successfully completed processing. 26754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * All audio will have been played back by this point for audible output, and all 27754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * output will have been written to disk for file synthesis requests. 28754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * 29754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * This request is guaranteed to be called after {@link #onStart(String)}. 30754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * 31754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * @param utteranceId the utterance ID of the utterance. 32754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath */ 33754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath public abstract void onDone(String utteranceId); 34754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath 35754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath /** 36754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * Called when an error has occurred during processing. This can be called 37754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * at any point in the synthesis process. Note that there might be calls 38754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * to {@link #onStart(String)} for specified utteranceId but there will never 39754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * be a call to both {@link #onDone(String)} and {@link #onError(String)} for 40754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * the same utterance. 41754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * 42754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * @param utteranceId the utterance ID of the utterance. 43754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath */ 44754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath public abstract void onError(String utteranceId); 45754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath 46754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath /** 47754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * Wraps an old deprecated OnUtteranceCompletedListener with a shiny new 48754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * progress listener. 49754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * 50754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * @hide 51754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath */ 52754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath static UtteranceProgressListener from( 53754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath final TextToSpeech.OnUtteranceCompletedListener listener) { 54754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath return new UtteranceProgressListener() { 55754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath @Override 56754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath public synchronized void onDone(String utteranceId) { 57754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath listener.onUtteranceCompleted(utteranceId); 58754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath } 59754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath 60754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath @Override 6140f71f0be3cefabde9dc066d7707a1e5ebaec820Narayan Kamath public void onError(String utteranceId) { 6240f71f0be3cefabde9dc066d7707a1e5ebaec820Narayan Kamath listener.onUtteranceCompleted(utteranceId); 6340f71f0be3cefabde9dc066d7707a1e5ebaec820Narayan Kamath } 64754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath 65754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath @Override 6640f71f0be3cefabde9dc066d7707a1e5ebaec820Narayan Kamath public void onStart(String utteranceId) { 6740f71f0be3cefabde9dc066d7707a1e5ebaec820Narayan Kamath // Left unimplemented, has no equivalent in the old 6840f71f0be3cefabde9dc066d7707a1e5ebaec820Narayan Kamath // API. 6940f71f0be3cefabde9dc066d7707a1e5ebaec820Narayan Kamath } 70754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath }; 71754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath } 72754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath} 73