diff --git a/android/jni/jni/eSpeakService.cpp b/android/jni/jni/eSpeakService.cpp index ede2b2d5..cad9a2cf 100644 --- a/android/jni/jni/eSpeakService.cpp +++ b/android/jni/jni/eSpeakService.cpp @@ -314,7 +314,7 @@ JNICALL Java_com_reecedunn_espeak_SpeechSynthesis_nativeSetPitch( JNIEXPORT jboolean JNICALL Java_com_reecedunn_espeak_SpeechSynthesis_nativeSynthesize( - JNIEnv *env, jobject object, jstring text) { + JNIEnv *env, jobject object, jstring text, jboolean isSsml) { if (DEBUG) LOGV("%s", __FUNCTION__); native_data_t *nat = getNativeData(env, object); const char *c_text = text ? env->GetStringUTFChars(text, NULL) : NULL; @@ -325,7 +325,8 @@ JNICALL Java_com_reecedunn_espeak_SpeechSynthesis_nativeSynthesize( espeak_SetSynthCallback(SynthCallback); const espeak_ERROR result = espeak_Synth(c_text, strlen(c_text), 0, // position POS_CHARACTER, 0, // end position (0 means no end position) - espeakCHARS_UTF8, // text is UTF-8 encoded + isSsml ? espeakCHARS_UTF8 | espeakSSML // UTF-8 encoded SSML + : espeakCHARS_UTF8, // UTF-8 encoded text &unique_identifier, nat); espeak_Synchronize(); diff --git a/android/src/com/reecedunn/espeak/SpeechSynthesis.java b/android/src/com/reecedunn/espeak/SpeechSynthesis.java index a215c2a7..affd750d 100644 --- a/android/src/com/reecedunn/espeak/SpeechSynthesis.java +++ b/android/src/com/reecedunn/espeak/SpeechSynthesis.java @@ -179,8 +179,8 @@ public class SpeechSynthesis { nativeSetPitch(pitch); } - public void synthesize(String text) { - nativeSynthesize(text); + public void synthesize(String text, boolean isSsml) { + nativeSynthesize(text, isSsml); } public void stop() { @@ -257,7 +257,7 @@ public class SpeechSynthesis { private native final boolean nativeSetPitch(int pitch); - private native final boolean nativeSynthesize(String text); + private native final boolean nativeSynthesize(String text, boolean isSsml); private native final boolean nativeStop(); diff --git a/android/src/com/reecedunn/espeak/TtsService.java b/android/src/com/reecedunn/espeak/TtsService.java index 76463fb6..59cfbdbc 100644 --- a/android/src/com/reecedunn/espeak/TtsService.java +++ b/android/src/com/reecedunn/espeak/TtsService.java @@ -192,7 +192,10 @@ public class TtsService extends TextToSpeechService { return; } - final String text = request.getText(); + String text = request.getText(); + if (text == null) + return; + final int gender = getDefaultGender(); final int rate = scaleRate(request.getSpeechRate()); final int pitch = scalePitch(request.getPitch()); @@ -207,6 +210,13 @@ public class TtsService extends TextToSpeechService { } } + if (text.startsWith("" preprocessing tags, + // so need to remove these before passing to synthesize. + text = text.substring(text.indexOf("?>") + 2).trim(); + } + mCallback = callback; mCallback.start(mEngine.getSampleRate(), mEngine.getAudioFormat(), mEngine.getChannelCount()); @@ -214,7 +224,7 @@ public class TtsService extends TextToSpeechService { mEngine.setVoiceByProperties(null, mMatchingVoice.name, gender, 0, 0); mEngine.setRate(rate); mEngine.setPitch(pitch); - mEngine.synthesize(text); + mEngine.synthesize(text, text.startsWith("