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