Skip to content

Commit c8852e7

Browse files
committed
Extracting to BaseSpeechRecognizer.java
1 parent 3ffe08f commit c8852e7

File tree

10 files changed

+213
-236
lines changed

10 files changed

+213
-236
lines changed

sdk-addon-android-speech/src/main/java/com/chattylabs/sdk/android/voice/AndroidSpeechRecognizer.java

Lines changed: 81 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,8 @@ public final class AndroidSpeechRecognizer implements ConversationalFlowComponen
4040

4141
// Resources
4242
private final Application application;
43-
private final ComponentConfig config;
4443
private final AndroidHandler mainHandler;
45-
private final AndroidAudioHandler audioHandler;
44+
private final AndroidAudioManager audioManager;
4645
private final BluetoothSco bluetoothSco;
4746
private final Intent speechRecognizerIntent;
4847
private final SpeechRecognizerCreator<android.speech.SpeechRecognizer> recognizerCreator;
@@ -101,7 +100,7 @@ private void cleanup() {
101100
@Override
102101
public void reset() {
103102
releaseTimeout();
104-
audioHandler.abandonAudioFocus();
103+
audioManager.abandonAudioFocus();
105104
cleanup();
106105
super.setTryAgain(false);
107106
setOnError(null);
@@ -115,7 +114,7 @@ public void reset() {
115114
@Override
116115
public void onReadyForSpeech(Bundle params) {
117116
if (!bluetoothSco.isBluetoothScoOn()) {
118-
audioHandler.requestAudioFocus(config.isAudioExclusiveRequiredForRecognizer());
117+
audioManager.requestAudioFocus(configuration.isAudioExclusiveRequiredForRecognizer());
119118
}
120119
//resetVolumeForBeep();
121120
super.onReadyForSpeech(params);
@@ -215,15 +214,16 @@ private boolean needRetry(int error) {
215214
}
216215
};
217216

218-
// Log stuff
219-
private ILogger logger;
220-
221-
AndroidSpeechRecognizer(Application application, ComponentConfig configuration,
222-
AndroidAudioHandler audioHandler, BluetoothSco bluetoothSco,
223-
SpeechRecognizerCreator recognizerCreator, ILogger logger) {
217+
AndroidSpeechRecognizer(Application application,
218+
ComponentConfig configuration,
219+
AndroidAudioManager audioManager,
220+
BluetoothSco bluetoothSco,
221+
SpeechRecognizerCreator<android.speech.SpeechRecognizer>
222+
recognizerCreator,
223+
ILogger logger) {
224224
this.application = application;
225-
this.config = configuration;
226-
this.audioHandler = audioHandler;
225+
this.configuration = configuration;
226+
this.audioManager = audioManager;
227227
this.bluetoothSco = bluetoothSco;
228228
this.logger = logger;
229229
this.executorService = Executors.newSingleThreadExecutor();
@@ -237,6 +237,75 @@ private boolean needRetry(int error) {
237237
this.recognizerCreator = recognizerCreator;
238238
}
239239

240+
private void startListening() {
241+
executorService.submit(() -> {
242+
lock.lock();
243+
try {
244+
mainHandler.post(() -> {
245+
if (speechRecognizer == null) {
246+
speechRecognizer = recognizerCreator.create();
247+
logger.v(TAG, "ANDROID VOICE - created");
248+
}
249+
recognitionListener.startTimeout();
250+
recognitionListener.setRmsDebug(rmsDebug);
251+
if (noSoundThreshold > 0) recognitionListener.setNoSoundThreshold(noSoundThreshold);
252+
if (lowSoundThreshold > 0) recognitionListener.setLowSoundThreshold(lowSoundThreshold);
253+
logger.i(TAG, "ANDROID VOICE - start listening");
254+
speechRecognizer.setRecognitionListener(recognitionListener);
255+
//adjustVolumeForBeep();
256+
speechRecognizer.startListening(speechRecognizerIntent);
257+
executorService.submit(lock::unlock);
258+
});
259+
} catch (Exception e) {
260+
logger.logException(e);
261+
lock.unlock();
262+
}
263+
});
264+
}
265+
266+
private void handleListeners(RecognizerListener... listeners) {
267+
recognitionListener.reset();
268+
if (listeners != null && listeners.length > 0) {
269+
for (RecognizerListener item : listeners) {
270+
if (item instanceof OnRecognizerReady) {
271+
recognitionListener.setOnReady((OnRecognizerReady) item);
272+
}
273+
else if (item instanceof OnRecognizerResults) {
274+
recognitionListener.setOnResults((OnRecognizerResults) item);
275+
}
276+
else if (item instanceof OnRecognizerMostConfidentResult) {
277+
recognitionListener.setOnMostConfidentResult((OnRecognizerMostConfidentResult) item);
278+
}
279+
else if (item instanceof OnRecognizerPartialResults) {
280+
recognitionListener.setOnPartialResults((OnRecognizerPartialResults) item);
281+
}
282+
else if (item instanceof OnRecognizerError) {
283+
recognitionListener.setOnError((OnRecognizerError) item);
284+
}
285+
}
286+
}
287+
}
288+
289+
public void setTryAgain(boolean tryAgain) {
290+
this.recognitionListener.setTryAgain(tryAgain);
291+
}
292+
293+
public void setPartialResults(boolean partial) {
294+
this.speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, partial);
295+
}
296+
297+
public void setRmsDebug(boolean rmsDebug) {
298+
this.rmsDebug = rmsDebug;
299+
}
300+
301+
public void setNoSoundThreshold(float maxValue) {
302+
this.noSoundThreshold = maxValue;
303+
}
304+
305+
public void setLowSoundThreshold(float maxValue) {
306+
this.lowSoundThreshold = maxValue;
307+
}
308+
240309
@Override
241310
public void release() {
242311
if (mainHandler != null) {
@@ -313,110 +382,6 @@ public void shutdown() {
313382
});
314383
}
315384

316-
@Override
317-
public void listen(RecognizerListener... listeners) {
318-
logger.i(TAG, "ANDROID VOICE - start listening");
319-
handleListeners(listeners);
320-
// Check whether Sco is connected or required
321-
logger.i(TAG, "ANDROID VOICE - is bluetooth Sco required: " +
322-
Boolean.toString(config.isBluetoothScoRequired()));
323-
if (config.isBluetoothScoRequired() && !bluetoothSco.isBluetoothScoOn()) {
324-
// Sco Listener
325-
BluetoothScoListener listener = new BluetoothScoListener() {
326-
@Override
327-
public void onConnected() {
328-
logger.w(TAG, "ANDROID VOICE - Sco onConnected");
329-
startListening();
330-
}
331-
332-
@Override
333-
public void onDisconnected() {
334-
logger.w(TAG, "ANDROID VOICE - Sco onDisconnected");
335-
if (bluetoothSco.isBluetoothScoOn()) {
336-
logger.w(TAG, "ANDROID VOICE - shutdown from Sco");
337-
shutdown();
338-
}
339-
}
340-
};
341-
// Start Bluetooth Sco
342-
bluetoothSco.startSco(listener);
343-
logger.v(TAG, "ANDROID VOICE - waiting for bluetooth sco connection");
344-
}
345-
else {
346-
logger.v(TAG, "ANDROID VOICE - bluetooth sco is: " + (bluetoothSco.isBluetoothScoOn() ? "on" : "off"));
347-
startListening();
348-
}
349-
}
350-
351-
private void startListening() {
352-
executorService.submit(() -> {
353-
lock.lock();
354-
try {
355-
mainHandler.post(() -> {
356-
if (speechRecognizer == null) {
357-
speechRecognizer = recognizerCreator.create();
358-
logger.v(TAG, "ANDROID VOICE - created");
359-
}
360-
recognitionListener.startTimeout();
361-
recognitionListener.setRmsDebug(rmsDebug);
362-
if (noSoundThreshold > 0) recognitionListener.setNoSoundThreshold(noSoundThreshold);
363-
if (lowSoundThreshold > 0) recognitionListener.setLowSoundThreshold(lowSoundThreshold);
364-
logger.i(TAG, "ANDROID VOICE - start listening");
365-
speechRecognizer.setRecognitionListener(recognitionListener);
366-
//adjustVolumeForBeep();
367-
speechRecognizer.startListening(speechRecognizerIntent);
368-
executorService.submit(lock::unlock);
369-
});
370-
} catch (Exception e) {
371-
logger.logException(e);
372-
lock.unlock();
373-
}
374-
});
375-
}
376-
377-
private void handleListeners(RecognizerListener... listeners) {
378-
recognitionListener.reset();
379-
if (listeners != null && listeners.length > 0) {
380-
for (RecognizerListener item : listeners) {
381-
if (item instanceof OnRecognizerReady) {
382-
recognitionListener.setOnReady((OnRecognizerReady) item);
383-
}
384-
else if (item instanceof OnRecognizerResults) {
385-
recognitionListener.setOnResults((OnRecognizerResults) item);
386-
}
387-
else if (item instanceof OnRecognizerMostConfidentResult) {
388-
recognitionListener.setOnMostConfidentResult((OnRecognizerMostConfidentResult) item);
389-
}
390-
else if (item instanceof OnRecognizerPartialResults) {
391-
recognitionListener.setOnPartialResults((OnRecognizerPartialResults) item);
392-
}
393-
else if (item instanceof OnRecognizerError) {
394-
recognitionListener.setOnError((OnRecognizerError) item);
395-
}
396-
}
397-
}
398-
}
399-
400-
public void setTryAgain(boolean tryAgain) {
401-
this.recognitionListener.setTryAgain(tryAgain);
402-
}
403-
404-
public void setPartialResults(boolean partial) {
405-
this.speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, partial);
406-
}
407-
408-
public void setRmsDebug(boolean rmsDebug) {
409-
this.rmsDebug = rmsDebug;
410-
}
411-
412-
public void setNoSoundThreshold(float maxValue) {
413-
this.noSoundThreshold = maxValue;
414-
}
415-
416-
public void setLowSoundThreshold(float maxValue) {
417-
this.lowSoundThreshold = maxValue;
418-
}
419-
420385
public static String getErrorType(int error) {
421386
switch (error) {
422387
case android.speech.SpeechRecognizer.ERROR_AUDIO:

sdk-addon-android-speech/src/main/java/com/chattylabs/sdk/android/voice/AndroidSpeechSynthesizer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@ public final class AndroidSpeechSynthesizer extends BaseSpeechSynthesizer {
4545

4646
AndroidSpeechSynthesizer(Application application,
4747
ComponentConfig configuration,
48-
AndroidAudioHandler audioHandler,
48+
AndroidAudioManager audioManager,
4949
BluetoothSco bluetoothSco,
5050
ILogger logger) {
51-
super(configuration, audioHandler, bluetoothSco, logger);
51+
super(configuration, audioManager, bluetoothSco, logger);
5252
this.application = application;
5353
this.release();
5454
}

sdk-addon-google-speech/src/main/java/com/chattylabs/sdk/android/voice/GoogleSpeechRecognizer.java

Lines changed: 9 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,9 @@ public class GoogleSpeechRecognizer implements ConversationalFlowComponent.Speec
4343

4444
// Resources
4545
private final Application application;
46-
private final ComponentConfig config;
47-
private final AndroidAudioHandler audioHandler;
46+
private final AndroidAudioManager audioManager;
4847
private final BluetoothSco bluetoothSco;
4948
private final ExecutorService executorService;
50-
51-
// Log stuff
52-
private ILogger logger;
53-
5449
private AudioRecorder mAudioRecorder;
5550
private SpeechClient speech;
5651

@@ -172,7 +167,7 @@ private void cleanup() {
172167
@Override
173168
public void reset() {
174169
releaseTimeout();
175-
audioHandler.abandonAudioFocus();
170+
audioManager.abandonAudioFocus();
176171
cleanup();
177172
//super.setTryAgain(false);
178173
setOnError(null);
@@ -186,7 +181,7 @@ public void reset() {
186181
@Override
187182
public void onReadyForSpeech(Bundle params) {
188183
if (!bluetoothSco.isBluetoothScoOn()) {
189-
audioHandler.requestAudioFocus(config.isAudioExclusiveRequiredForRecognizer());
184+
audioManager.requestAudioFocus(configuration.isAudioExclusiveRequiredForRecognizer());
190185
}
191186
//beep();
192187
super.onReadyForSpeech(params);
@@ -276,24 +271,17 @@ public void onPartialResults(Bundle partialResults) {
276271

277272
GoogleSpeechRecognizer(Application application,
278273
ComponentConfig configuration,
279-
AndroidAudioHandler audioHandler,
280-
BluetoothSco bluetoothSco, ILogger logger) {
274+
AndroidAudioManager audioManager,
275+
BluetoothSco bluetoothSco,
276+
ILogger logger) {
281277
this.application = application;
282-
this.config = configuration;
283-
this.audioHandler = audioHandler;
278+
this.configuration = configuration;
279+
this.audioManager = audioManager;
284280
this.bluetoothSco = bluetoothSco;
285281
this.logger = logger;
286282
this.executorService = Executors.newSingleThreadExecutor();
287283
}
288284

289-
@Override
290-
public <T extends RecognizerListener> void listen(
291-
T... listeners) {
292-
logger.i(TAG, "GOOGLE VOICE - start listening");
293-
handleListeners(listeners);
294-
checkForBluetoothScoRequired(this::startListening);
295-
}
296-
297285
private String getDefaultLanguageCode() {
298286
final Locale locale = Locale.getDefault();
299287
final StringBuilder language = new StringBuilder(locale.getLanguage());
@@ -305,37 +293,6 @@ private String getDefaultLanguageCode() {
305293
return language.toString();
306294
}
307295

308-
private void checkForBluetoothScoRequired(Runnable starter) {
309-
logger.i(TAG, "GOOGLE VOICE - is bluetooth Sco required: " +
310-
Boolean.toString(config.isBluetoothScoRequired()));
311-
if (config.isBluetoothScoRequired() && !bluetoothSco.isBluetoothScoOn()) {
312-
// Sco Listener
313-
BluetoothScoListener listener = new BluetoothScoListener() {
314-
@Override
315-
public void onConnected() {
316-
logger.w(TAG, "GOOGLE VOICE - Sco onConnected");
317-
starter.run();
318-
}
319-
320-
@Override
321-
public void onDisconnected() {
322-
logger.w(TAG, "GOOGLE VOICE - Sco onDisconnected");
323-
if (bluetoothSco.isBluetoothScoOn()) {
324-
logger.w(TAG, "GOOGLE VOICE - shutdown from Sco");
325-
shutdown();
326-
}
327-
}
328-
};
329-
// Start Bluetooth Sco
330-
bluetoothSco.startSco(listener);
331-
logger.v(TAG, "GOOGLE VOICE - waiting for bluetooth sco connection");
332-
}
333-
else {
334-
logger.v(TAG, "GOOGLE VOICE - bluetooth sco is: " + (bluetoothSco.isBluetoothScoOn() ? "on" : "off"));
335-
starter.run();
336-
}
337-
}
338-
339296
private void startListening() {
340297
executorService.submit(() -> {
341298
lock.lock();
@@ -351,7 +308,7 @@ private void startListening() {
351308
if (this.speech == null) {
352309
try (SpeechClient speechClient = generateFromRawFile(
353310
application,
354-
config.getGoogleCredentialsResourceFile())) {
311+
configuration.getGoogleCredentialsResourceFile())) {
355312
this.speech = speechClient;
356313
}
357314
}

sdk-addon-google-speech/src/main/java/com/chattylabs/sdk/android/voice/GoogleSpeechSynthesizer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,10 @@ public final class GoogleSpeechSynthesizer extends BaseSpeechSynthesizer {
6767

6868
GoogleSpeechSynthesizer(Application application,
6969
ComponentConfig configuration,
70-
AndroidAudioHandler audioHandler,
70+
AndroidAudioManager audioManager,
7171
BluetoothSco bluetoothSco,
7272
ILogger logger) {
73-
super(configuration, audioHandler, bluetoothSco, logger);
73+
super(configuration, audioManager, bluetoothSco, logger);
7474
this.application = application;
7575
this.release();
7676
}

sdk-conversational-flow-core/src/main/java/com/chattylabs/sdk/android/voice/AndroidAudioHandler.java renamed to sdk-conversational-flow-core/src/main/java/com/chattylabs/sdk/android/voice/AndroidAudioManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import com.chattylabs.sdk.android.common.Tag;
99
import com.chattylabs.sdk.android.common.internal.ILogger;
1010

11-
public class AndroidAudioHandler {
11+
public class AndroidAudioManager {
1212
private static final String TAG = Tag.make("AndroidAudioHandler");
1313

1414
// States
@@ -35,7 +35,7 @@ public class AndroidAudioHandler {
3535
// Log stuff
3636
private ILogger logger;
3737

38-
public AndroidAudioHandler(AudioManager audioManager,
38+
public AndroidAudioManager(AudioManager audioManager,
3939
ComponentConfig configuration,
4040
ILogger logger) {
4141
this.logger = logger;

0 commit comments

Comments
 (0)