Skip to content

Commit 62e493b

Browse files
author
Tim Su
committed
Localize VoiceRecognizer API
1 parent b5b5297 commit 62e493b

File tree

2 files changed

+53
-41
lines changed

2 files changed

+53
-41
lines changed

android-aac-enc/src/com/todoroo/aacenc/RecognizerApi.java

+36-38
Original file line numberDiff line numberDiff line change
@@ -5,58 +5,55 @@
55
import java.io.IOException;
66
import java.util.ArrayList;
77

8+
import android.annotation.TargetApi;
89
import android.app.Activity;
910
import android.app.ProgressDialog;
1011
import android.content.Context;
1112
import android.content.DialogInterface;
1213
import android.content.DialogInterface.OnCancelListener;
1314
import android.content.Intent;
1415
import android.media.MediaPlayer;
15-
import android.net.Uri;
1616
import android.os.Bundle;
1717
import android.speech.RecognitionListener;
1818
import android.speech.RecognizerIntent;
1919
import android.speech.SpeechRecognizer;
2020
import android.util.Log;
21-
import android.view.View;
22-
import android.view.View.OnClickListener;
23-
import android.widget.TextView;
24-
import android.widget.Toast;
2521

22+
@TargetApi(8)
2623
public class RecognizerApi implements RecognitionListener {
2724

2825
public static interface PlaybackExceptionHandler {
2926
public void playbackFailed(String file);
3027
}
31-
28+
3229
private String aacFile;
3330

3431
private Context context;
35-
32+
3633
public static interface RecognizerApiListener {
3734
public void onSpeechResult(String result);
3835
public void onSpeechError(int error);
3936
}
40-
37+
4138
private RecognizerApiListener mListener;
42-
39+
4340
public RecognizerApi(Context context) {
4441
this.context = context;
4542

4643
File dir = context.getFilesDir();
4744
aacFile = dir.toString() + "/audio.aac";
48-
45+
4946
sr = SpeechRecognizer.createSpeechRecognizer(context);
5047
}
51-
48+
5249
public void setTemporaryFile(String fileName) {
5350
aacFile = context.getFilesDir().toString() + "/" + fileName;
5451
}
55-
52+
5653
public String getTemporaryFile() {
5754
return aacFile;
5855
}
59-
56+
6057
public void setListener(RecognizerApiListener listener) {
6158
this.mListener = listener;
6259
}
@@ -78,20 +75,28 @@ public static void play(Activity activity, String file, PlaybackExceptionHandler
7875
private SpeechRecognizer sr;
7976
private ProgressDialog speakPd;
8077
private ProgressDialog processingPd;
81-
82-
public void start() {
78+
private String processingMessage;
79+
80+
/**
81+
* Start speech recognition
82+
*
83+
* @param callingPackage e.g. com.myapp.example
84+
* @param speakNowMessage e.g. "Speak now!"
85+
* @param processingMessage e.g. "Processing..."
86+
*/
87+
public void start(String callingPackage, String speakNowMessage, String processingMessage) {
8388
sr.setRecognitionListener(this);
8489

8590
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
8691
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
8792
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
88-
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.domain.app");
93+
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, callingPackage);
8994

9095
speechStarted = 0;
9196
baos.reset();
9297

9398
speakPd = new ProgressDialog(context);
94-
speakPd.setMessage("Speak now...");
99+
speakPd.setMessage(speakNowMessage);
95100
speakPd.setIndeterminate(true);
96101
speakPd.setCancelable(true);
97102
speakPd.setOnCancelListener(new OnCancelListener() {
@@ -108,34 +113,31 @@ public void onCancel(DialogInterface dialog) {
108113
speechStarted = System.currentTimeMillis();
109114
}
110115

111-
public void convert(String toFile) {
112-
try {
113-
new AACToM4A().convert(context, aacFile, toFile);
114-
115-
Toast.makeText(context, "File Saved!", Toast.LENGTH_LONG).show();
116-
} catch (IOException e) {
117-
Toast.makeText(context, "Error :(", Toast.LENGTH_LONG).show();
118-
Log.e("ERROR", "error converting", e);
119-
}
116+
/**
117+
* Convert AAC file to M4A
118+
*
119+
* @param toFile
120+
* @throws IOException
121+
*/
122+
public void convert(String toFile) throws IOException {
123+
new AACToM4A().convert(context, aacFile, toFile);
120124
}
121125

122126
public void cancel() {
123127
sr.cancel();
124128
}
125-
129+
126130
public void destroy() {
127131
sr.setRecognitionListener(null);
128132
sr.destroy();
129133
}
130-
134+
131135
// --- RecognitionListener methods --- //
132-
136+
133137
private ByteArrayOutputStream baos = new ByteArrayOutputStream();
134138

135139
@Override
136140
public void onBeginningOfSpeech() {
137-
System.err.println("beginning");
138-
139141
}
140142

141143
@Override
@@ -155,9 +157,9 @@ public void onEndOfSpeech() {
155157

156158
if(speechStarted == 0)
157159
return;
158-
160+
159161
processingPd = new ProgressDialog(context);
160-
processingPd.setMessage("Processing...");
162+
processingPd.setMessage(processingMessage);
161163
processingPd.setIndeterminate(true);
162164
processingPd.setCancelable(true);
163165
processingPd.setOnCancelListener(new OnCancelListener() {
@@ -174,14 +176,10 @@ public void onCancel(DialogInterface dialog) {
174176
sampleRate = 8000; // THIS IS A MAGIC NUMBER@?!!?!?!
175177
// can i has calculate?
176178

177-
System.err.println("computed sample rate: " + sampleRate);
178-
179179
encoder.init(64000, 1, sampleRate, 16, aacFile);
180180

181181
encoder.encode(baos.toByteArray());
182182

183-
System.err.println("end");
184-
185183
encoder.uninit();
186184
}
187185

@@ -217,5 +215,5 @@ public void onResults(Bundle results) {
217215
@Override
218216
public void onRmsChanged(float arg0) {
219217
}
220-
218+
221219
}

astrid/src/com/todoroo/astrid/voice/VoiceRecognizer.java

+17-3
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
*/
66
package com.todoroo.astrid.voice;
77

8+
import java.io.IOException;
89
import java.util.List;
910

11+
import android.annotation.TargetApi;
1012
import android.content.Context;
1113
import android.content.Intent;
1214
import android.content.pm.PackageManager;
@@ -16,14 +18,18 @@
1618
import android.support.v4.app.Fragment;
1719
import android.widget.EditText;
1820
import android.widget.ImageButton;
21+
import android.widget.Toast;
1922

2023
import com.timsu.astrid.R;
24+
import com.todoroo.aacenc.ContextManager;
2125
import com.todoroo.aacenc.RecognizerApi;
2226
import com.todoroo.aacenc.RecognizerApi.RecognizerApiListener;
2327
import com.todoroo.andlib.utility.AndroidUtilities;
2428
import com.todoroo.andlib.utility.Preferences;
2529
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
30+
import com.todoroo.astrid.utility.Constants;
2631

32+
@TargetApi(8)
2733
public class VoiceRecognizer {
2834

2935
protected RecognizerApi recognizerApi;
@@ -79,7 +85,9 @@ public static VoiceRecognizer instantiateVoiceRecognizer(Context context, Recogn
7985
public void startVoiceRecognition(Context context, String currentVoiceFile) {
8086
if (speechRecordingAvailable(context) && recognizerApi != null) {
8187
recognizerApi.setTemporaryFile(currentVoiceFile);
82-
recognizerApi.start();
88+
recognizerApi.start(Constants.PACKAGE,
89+
context.getString(R.string.audio_speak_now),
90+
context.getString(R.string.audio_encoding));
8391
} else {
8492
int prompt = R.string.voice_edit_title_prompt;
8593
if (Preferences.getBoolean(R.string.p_voiceInputCreatesTask, false))
@@ -107,7 +115,13 @@ public void cancel() {
107115
}
108116

109117
public void convert(String filePath) {
110-
if (instance != null && instance.recognizerApi != null)
111-
instance.recognizerApi.convert(filePath);
118+
if (instance != null && instance.recognizerApi != null) {
119+
try {
120+
instance.recognizerApi.convert(filePath);
121+
} catch (IOException e) {
122+
Toast.makeText(ContextManager.getContext(), R.string.audio_err_encoding,
123+
Toast.LENGTH_LONG).show();
124+
}
125+
}
112126
}
113127
}

0 commit comments

Comments
 (0)