Skip to content

Commit cf0f6bc

Browse files
committed
Updating to an accurate and working Synthesizer
1 parent ef00edd commit cf0f6bc

File tree

1 file changed

+21
-39
lines changed

1 file changed

+21
-39
lines changed

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

Lines changed: 21 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)