1 /*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.example.android.apis.app;
18
19import android.app.Activity;
20import android.os.Bundle;
21import android.speech.tts.TextToSpeech;
22import android.util.Log;
23import android.view.View;
24import android.widget.Button;
25
26import com.example.android.apis.R;
27
28import java.util.Locale;
29import java.util.Random;
30
31/**
32 * <p>Demonstrates text-to-speech (TTS). Please note the following steps:</p>
33 *
34 * <ol>
35 * <li>Construct the TextToSpeech object.</li>
36 * <li>Handle initialization callback in the onInit method.
37 * The activity implements TextToSpeech.OnInitListener for this purpose.</li>
38 * <li>Call TextToSpeech.speak to synthesize speech.</li>
39 * <li>Shutdown TextToSpeech in onDestroy.</li>
40 * </ol>
41 *
42 * <p>Documentation:
43 * http://developer.android.com/reference/android/speech/tts/package-summary.html
44 * </p>
45 * <ul>
46 */
47public class TextToSpeechActivity extends Activity implements TextToSpeech.OnInitListener {
48
49    private static final String TAG = "TextToSpeechDemo";
50
51    private TextToSpeech mTts;
52    private Button mAgainButton;
53
54    @Override
55    public void onCreate(Bundle savedInstanceState) {
56        super.onCreate(savedInstanceState);
57        setContentView(R.layout.text_to_speech);
58
59        // Initialize text-to-speech. This is an asynchronous operation.
60        // The OnInitListener (second argument) is called after initialization completes.
61        mTts = new TextToSpeech(this,
62            this  // TextToSpeech.OnInitListener
63            );
64
65        // The button is disabled in the layout.
66        // It will be enabled upon initialization of the TTS engine.
67        mAgainButton = (Button) findViewById(R.id.again_button);
68
69        mAgainButton.setOnClickListener(new View.OnClickListener() {
70            public void onClick(View v) {
71                sayHello();
72            }
73        });
74    }
75
76    @Override
77    public void onDestroy() {
78        // Don't forget to shutdown!
79        if (mTts != null) {
80            mTts.stop();
81            mTts.shutdown();
82        }
83
84        super.onDestroy();
85    }
86
87    // Implements TextToSpeech.OnInitListener.
88    public void onInit(int status) {
89        // status can be either TextToSpeech.SUCCESS or TextToSpeech.ERROR.
90        if (status == TextToSpeech.SUCCESS) {
91            // Set preferred language to US english.
92            // Note that a language may not be available, and the result will indicate this.
93            int result = mTts.setLanguage(Locale.US);
94            // Try this someday for some interesting results.
95            // int result mTts.setLanguage(Locale.FRANCE);
96            if (result == TextToSpeech.LANG_MISSING_DATA ||
97                result == TextToSpeech.LANG_NOT_SUPPORTED) {
98               // Lanuage data is missing or the language is not supported.
99                Log.e(TAG, "Language is not available.");
100            } else {
101                // Check the documentation for other possible result codes.
102                // For example, the language may be available for the locale,
103                // but not for the specified country and variant.
104
105                // The TTS engine has been successfully initialized.
106                // Allow the user to press the button for the app to speak again.
107                mAgainButton.setEnabled(true);
108                // Greet the user.
109                sayHello();
110            }
111        } else {
112            // Initialization failed.
113            Log.e(TAG, "Could not initialize TextToSpeech.");
114        }
115    }
116
117    private static final Random RANDOM = new Random();
118    private static final String[] HELLOS = {
119      "Hello",
120      "Salutations",
121      "Greetings",
122      "Howdy",
123      "What's crack-a-lackin?",
124      "That explains the stench!"
125    };
126
127    private void sayHello() {
128        // Select a random hello.
129        int helloLength = HELLOS.length;
130        String hello = HELLOS[RANDOM.nextInt(helloLength)];
131        mTts.speak(hello,
132            TextToSpeech.QUEUE_FLUSH,  // Drop all pending entries in the playback queue.
133            null);
134    }
135
136}
137