@@ -58,8 +58,6 @@ public final class GoogleSpeechSynthesizer extends BaseSpeechSynthesizer {
5858 private AudioConfig audioConfig ;
5959 private MediaPlayer mediaPlayer ;
6060 private final ConditionVariable mCondVar = new ConditionVariable ();
61- private boolean completed ; //released
62- private int extraCode ; //released
6361
6462 GoogleSpeechSynthesizer (Application application ,
6563 ComponentConfig configuration ,
@@ -75,11 +73,10 @@ public final class GoogleSpeechSynthesizer extends BaseSpeechSynthesizer {
7573 @ Override
7674 public void setup (SynthesizerListener .OnSetup onSynthesizerSetup ) {
7775 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
7877 try (TextToSpeechClient ttsClient = generateFromRawFile (
7978 application , getConfiguration ().getGoogleCredentialsResourceFile ())) {
8079 ListVoicesResponse response = ttsClient .listVoices (getDefaultLanguageCode ());
81- ttsClient .shutdownNow ();
82- ttsClient .awaitTermination (2 , TimeUnit .SECONDS );
8380 if (response .getVoicesCount () > 0 ) {
8481 onSynthesizerSetup .execute (SynthesizerListener .Status .AVAILABLE );
8582 } else {
@@ -158,7 +155,7 @@ private void finishPlayer() {
158155 if (mediaPlayer != null ) mediaPlayer .stop ();
159156 logger .v (TAG , "GOOGLE TTS - stopped" );
160157 } catch (IllegalStateException ex ) {
161- // Do nothing, the player is already stopped
158+ // Does nothing, the player is already stopped
162159 }
163160 mCondVar .open ();
164161 if (mediaPlayer != null ) {
@@ -167,33 +164,31 @@ private void finishPlayer() {
167164 }
168165 }
169166
170- @ Override
171- public void shutdown () {
172- logger .w (TAG , "GOOGLE TTS - shutting down" );
173- this .stop ();
174- release ();
175- }
176-
177167 private void destroyTts () {
178168 if (!isTtsNull ()) {
179169 try {
180170 tts .close ();
181171 tts .shutdown ();
182- tts .awaitTermination (2 , TimeUnit .SECONDS );
172+ tts .awaitTermination (2 , TimeUnit .SECONDS );
183173 logger .v (TAG , "GOOGLE TTS - destroyed" );
184174 } catch (Exception ignored ) {}
185175 tts = null ;
186176 }
187177 }
188178
179+ @ Override
180+ public void shutdown () {
181+ logger .w (TAG , "GOOGLE TTS - shutting down" );
182+ this .stop ();
183+ release ();
184+ }
185+
189186 @ Override
190187 public void release () {
191188 super .release ();
192189 tts = null ;
193190 voice = null ;
194191 audioConfig = null ;
195- completed = true ;
196- extraCode = 0 ;
197192 }
198193
199194 @ Override
@@ -206,11 +201,11 @@ void initTts(SynthesizerListener.OnInitialised onSynthesizerInitialised) {
206201 if (isTtsNull ()) {
207202 setReady (false );
208203 logger .i (TAG , "GOOGLE TTS - creating new instance of TextToSpeechClient.class" );
209- try (TextToSpeechClient ttsClient = generateFromRawFile (
210- application , getConfiguration ().getGoogleCredentialsResourceFile ())) {
204+ try {
211205 logger .i (TAG , "GOOGLE TTS - new instance created" );
212206 setReady (true );
213- this .tts = ttsClient ;
207+ this .tts = generateFromRawFile (
208+ application , getConfiguration ().getGoogleCredentialsResourceFile ());
214209 this .audioConfig = AudioConfig .newBuilder ().setAudioEncoding (AudioEncoding .MP3 ).build ();
215210 setupLanguage ();
216211 setSynthesizerUtteranceListener (createUtterancesListener ());
@@ -278,7 +273,7 @@ public void run() {
278273 public void onStart (String utteranceId ) {
279274 logger .v (getTag (), "GOOGLE TTS[%s] - on start" , utteranceId );
280275
281- startTimeout (utteranceId );
276+ // startTimeout(utteranceId);
282277 timestamp = System .currentTimeMillis ();
283278
284279 if (getListenersMap ().size () > 0 ) {
@@ -376,23 +371,19 @@ private void play(String utteranceId, String text, HashMap<String, String> param
376371 getSynthesizerUtteranceListener ().onStart (utteranceId );
377372 initTts (status -> {
378373 if (status == SynthesizerListener .Status .SUCCESS ) {
379- mCondVar .close ();
380- completed = false ;
381374
382375 SynthesisInput input = SynthesisInput .newBuilder ()
383376 .setText (text )
384377 .build ();
385378 SynthesizeSpeechResponse response = tts .synthesizeSpeech (input , voice , audioConfig );
386- destroyTts ();
379+ // destroyTts();
387380
388381 // Get the audio contents from the response
389382 ByteString audioContents = response .getAudioContent ();
390383
391384 logger .d (getTag (), "audio: %s" , audioContents );
392385 logger .d (getTag (), "audio string: %s" , audioContents .toStringUtf8 ());
393386
394- extraCode = -1 ;
395-
396387 try {
397388 File tempMp3 = File .createTempFile ("output" , "mp3" ,
398389 application .getCacheDir ());
@@ -409,29 +400,20 @@ private void play(String utteranceId, String text, HashMap<String, String> param
409400 return ;
410401 }
411402
412- mediaPlayer .setOnCompletionListener (mp -> {
413- completed = true ;
414- mCondVar . open ( );
403+ mediaPlayer .setOnCompletionListener (mediaPlayer -> {
404+ finishPlayer () ;
405+ getSynthesizerUtteranceListener (). onDone ( utteranceId );
415406 });
416407 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 );
419411 return true ;
420412 });
421413 mediaPlayer .setAudioStreamType (AudioManager .STREAM_MUSIC );
422414 mediaPlayer .start ();
423- mCondVar .block ();
424- finishPlayer ();
425415 } catch (Exception ex ) {
426416 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 );
435417 }
436418 }
437419 else {
0 commit comments