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. 43fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak * @deprecated Use {@link #onError(String,int)} instead 44754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath */ 45fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak @Deprecated 46754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath public abstract void onError(String utteranceId); 47754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath 48754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath /** 49fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak * Called when an error has occurred during processing. This can be called 50fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak * at any point in the synthesis process. Note that there might be calls 51fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak * to {@link #onStart(String)} for specified utteranceId but there will never 52fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak * be a call to both {@link #onDone(String)} and {@link #onError(String,int)} for 53fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak * the same utterance. The default implementation calls {@link #onError(String)}. 54fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak * 55fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak * @param utteranceId the utterance ID of the utterance. 56fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak * @param errorCode one of the ERROR_* codes from {@link TextToSpeech} 57fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak */ 58fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak public void onError(String utteranceId, int errorCode) { 59fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak onError(utteranceId); 60fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak } 61fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak 62fc4b2890378eb1b6e0b11d60d703eb6854268064Przemyslaw Szczepaniak /** 63754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * Wraps an old deprecated OnUtteranceCompletedListener with a shiny new 64754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * progress listener. 65754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * 66754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath * @hide 67754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath */ 68754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath static UtteranceProgressListener from( 69754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath final TextToSpeech.OnUtteranceCompletedListener listener) { 70754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath return new UtteranceProgressListener() { 71754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath @Override 72754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath public synchronized void onDone(String utteranceId) { 73754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath listener.onUtteranceCompleted(utteranceId); 74754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath } 75754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath 76754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath @Override 7740f71f0be3cefabde9dc066d7707a1e5ebaec820Narayan Kamath public void onError(String utteranceId) { 7840f71f0be3cefabde9dc066d7707a1e5ebaec820Narayan Kamath listener.onUtteranceCompleted(utteranceId); 7940f71f0be3cefabde9dc066d7707a1e5ebaec820Narayan Kamath } 80754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath 81754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath @Override 8240f71f0be3cefabde9dc066d7707a1e5ebaec820Narayan Kamath public void onStart(String utteranceId) { 8340f71f0be3cefabde9dc066d7707a1e5ebaec820Narayan Kamath // Left unimplemented, has no equivalent in the old 8440f71f0be3cefabde9dc066d7707a1e5ebaec820Narayan Kamath // API. 8540f71f0be3cefabde9dc066d7707a1e5ebaec820Narayan Kamath } 86754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath }; 87754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath } 88754c72ed9e8e83e5a913aa7552fc2e1b1b5277e0Narayan Kamath} 89