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 
17 package com.example.android.apis.app;
18 
19 import android.app.Activity;
20 import android.os.Bundle;
21 import android.speech.tts.TextToSpeech;
22 import android.util.Log;
23 import android.view.View;
24 import android.widget.Button;
25 
26 import com.example.android.apis.R;
27 
28 import java.util.Locale;
29 import 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  */
47 public 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
onCreate(Bundle savedInstanceState)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
onDestroy()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.
onInit(int status)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 
sayHello()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