| @@ -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(); | |||
| @@ -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(); | |||
| @@ -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("<?xml")) | |||
| { | |||
| // eSpeak does not recognise/skip "<?...?>" 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("<speak")); | |||
| } | |||
| /** | |||