@@ -58,8 +58,6 @@ public final class GoogleSpeechSynthesizer extends BaseSpeechSynthesizer {
58
58
private AudioConfig audioConfig ;
59
59
private MediaPlayer mediaPlayer ;
60
60
private final ConditionVariable mCondVar = new ConditionVariable ();
61
- private boolean completed ; //released
62
- private int extraCode ; //released
63
61
64
62
GoogleSpeechSynthesizer (Application application ,
65
63
ComponentConfig configuration ,
@@ -75,11 +73,10 @@ public final class GoogleSpeechSynthesizer extends BaseSpeechSynthesizer {
75
73
@ Override
76
74
public void setup (SynthesizerListener .OnSetup onSynthesizerSetup ) {
77
75
logger .i (TAG , "GOOGLE TTS - setup and check language" );
76
+ // At this stage, we only want to check whether the api works and the language is available
78
77
try (TextToSpeechClient ttsClient = generateFromRawFile (
79
78
application , getConfiguration ().getGoogleCredentialsResourceFile ())) {
80
79
ListVoicesResponse response = ttsClient .listVoices (getDefaultLanguageCode ());
81
- ttsClient .shutdownNow ();
82
- ttsClient .awaitTermination (2 , TimeUnit .SECONDS );
83
80
if (response .getVoicesCount () > 0 ) {
84
81
onSynthesizerSetup .execute (SynthesizerListener .Status .AVAILABLE );
85
82
} else {
@@ -158,7 +155,7 @@ private void finishPlayer() {
158
155
if (mediaPlayer != null ) mediaPlayer .stop ();
159
156
logger .v (TAG , "GOOGLE TTS - stopped" );
160
157
} catch (IllegalStateException ex ) {
161
- // Do nothing, the player is already stopped
158
+ // Does nothing, the player is already stopped
162
159
}
163
160
mCondVar .open ();
164
161
if (mediaPlayer != null ) {
@@ -167,33 +164,31 @@ private void finishPlayer() {
167
164
}
168
165
}
169
166
170
- @ Override
171
- public void shutdown () {
172
- logger .w (TAG , "GOOGLE TTS - shutting down" );
173
- this .stop ();
174
- release ();
175
- }
176
-
177
167
private void destroyTts () {
178
168
if (!isTtsNull ()) {
179
169
try {
180
170
tts .close ();
181
171
tts .shutdown ();
182
- tts .awaitTermination (2 , TimeUnit .SECONDS );
172
+ tts .awaitTermination (2 , TimeUnit .SECONDS );
183
173
logger .v (TAG , "GOOGLE TTS - destroyed" );
184
174
} catch (Exception ignored ) {}
185
175
tts = null ;
186
176
}
187
177
}
188
178
179
+ @ Override
180
+ public void shutdown () {
181
+ logger .w (TAG , "GOOGLE TTS - shutting down" );
182
+ this .stop ();
183
+ release ();
184
+ }
185
+
189
186
@ Override
190
187
public void release () {
191
188
super .release ();
192
189
tts = null ;
193
190
voice = null ;
194
191
audioConfig = null ;
195
- completed = true ;
196
- extraCode = 0 ;
197
192
}
198
193
199
194
@ Override
@@ -206,11 +201,11 @@ void initTts(SynthesizerListener.OnInitialised onSynthesizerInitialised) {
206
201
if (isTtsNull ()) {
207
202
setReady (false );
208
203
logger .i (TAG , "GOOGLE TTS - creating new instance of TextToSpeechClient.class" );
209
- try (TextToSpeechClient ttsClient = generateFromRawFile (
210
- application , getConfiguration ().getGoogleCredentialsResourceFile ())) {
204
+ try {
211
205
logger .i (TAG , "GOOGLE TTS - new instance created" );
212
206
setReady (true );
213
- this .tts = ttsClient ;
207
+ this .tts = generateFromRawFile (
208
+ application , getConfiguration ().getGoogleCredentialsResourceFile ());
214
209
this .audioConfig = AudioConfig .newBuilder ().setAudioEncoding (AudioEncoding .MP3 ).build ();
215
210
setupLanguage ();
216
211
setSynthesizerUtteranceListener (createUtterancesListener ());
@@ -278,7 +273,7 @@ public void run() {
278
273
public void onStart (String utteranceId ) {
279
274
logger .v (getTag (), "GOOGLE TTS[%s] - on start" , utteranceId );
280
275
281
- startTimeout (utteranceId );
276
+ // startTimeout(utteranceId);
282
277
timestamp = System .currentTimeMillis ();
283
278
284
279
if (getListenersMap ().size () > 0 ) {
@@ -376,23 +371,19 @@ private void play(String utteranceId, String text, HashMap<String, String> param
376
371
getSynthesizerUtteranceListener ().onStart (utteranceId );
377
372
initTts (status -> {
378
373
if (status == SynthesizerListener .Status .SUCCESS ) {
379
- mCondVar .close ();
380
- completed = false ;
381
374
382
375
SynthesisInput input = SynthesisInput .newBuilder ()
383
376
.setText (text )
384
377
.build ();
385
378
SynthesizeSpeechResponse response = tts .synthesizeSpeech (input , voice , audioConfig );
386
- destroyTts ();
379
+ // destroyTts();
387
380
388
381
// Get the audio contents from the response
389
382
ByteString audioContents = response .getAudioContent ();
390
383
391
384
logger .d (getTag (), "audio: %s" , audioContents );
392
385
logger .d (getTag (), "audio string: %s" , audioContents .toStringUtf8 ());
393
386
394
- extraCode = -1 ;
395
-
396
387
try {
397
388
File tempMp3 = File .createTempFile ("output" , "mp3" ,
398
389
application .getCacheDir ());
@@ -409,29 +400,20 @@ private void play(String utteranceId, String text, HashMap<String, String> param
409
400
return ;
410
401
}
411
402
412
- mediaPlayer .setOnCompletionListener (mp -> {
413
- completed = true ;
414
- mCondVar . open ( );
403
+ mediaPlayer .setOnCompletionListener (mediaPlayer -> {
404
+ finishPlayer () ;
405
+ getSynthesizerUtteranceListener (). onDone ( utteranceId );
415
406
});
416
407
mediaPlayer .setOnErrorListener ((mp , what , extra ) -> {
417
- extraCode = extra ;
418
- mCondVar .open ();
408
+ finishPlayer ();
409
+ // TODO: When I release the timeout, since I already run onError, it might be called twice
410
+ getSynthesizerUtteranceListener ().onError (utteranceId , extra );
419
411
return true ;
420
412
});
421
413
mediaPlayer .setAudioStreamType (AudioManager .STREAM_MUSIC );
422
414
mediaPlayer .start ();
423
- mCondVar .block ();
424
- finishPlayer ();
425
415
} catch (Exception ex ) {
426
416
logger .logException (ex );
427
- mCondVar .open ();
428
- }
429
-
430
- if (completed ) {
431
- getSynthesizerUtteranceListener ().onDone (utteranceId );
432
- } else {
433
- // TODO: When I release the timeout, since I already run onError, it might be called twice
434
- getSynthesizerUtteranceListener ().onError (utteranceId , extraCode );
435
417
}
436
418
}
437
419
else {
0 commit comments