mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-11-06 15:12:24 +00:00
TtsService: support detecting SSML documents
This commit is contained in:
@@ -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"));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user