File espeak-ng-add-piper-support.patch of Package espeak-ng

From 615b9a89bffc7fe892d48894b3e09f9a3089a211 Mon Sep 17 00:00:00 2001
From: Michael Hansen <mike@rhasspy.org>
Date: Wed, 24 May 2023 14:05:13 -0500
Subject: [PATCH] Add espeak_TextToPhonemesWithTerminator

---
 src/include/espeak-ng/speak_lib.h |  6 ++++++
 src/libespeak-ng/speech.c         | 36 ++++++++++++++++++++++---------
 src/libespeak-ng/translate.c      | 13 ++++++++++-
 3 files changed, 44 insertions(+), 11 deletions(-)

diff --git a/src/include/espeak-ng/speak_lib.h b/src/include/espeak-ng/speak_lib.h
index 14500f69..a98b2230 100644
--- a/src/include/espeak-ng/speak_lib.h
+++ b/src/include/espeak-ng/speak_lib.h
@@ -541,6 +541,12 @@ ESPEAK_API const char *espeak_TextToPhonemes(const void **textptr, int textmode,
 
 */
 
+#ifdef __cplusplus
+extern "C"
+#endif
+ESPEAK_API const char *espeak_TextToPhonemesWithTerminator(const void **textptr, int textmode, int phonememode, int *terminator);
+/* Version of espeak_TextToPhonemes that also returns the clause terminator (e.g., CLAUSE_INTONATION_FULL_STOP) */
+
 #ifdef __cplusplus
 extern "C"
 #endif
diff --git a/src/libespeak-ng/speech.c b/src/libespeak-ng/speech.c
index 4258191f..9063830f 100644
--- a/src/libespeak-ng/speech.c
+++ b/src/libespeak-ng/speech.c
@@ -859,6 +859,31 @@ ESPEAK_API void espeak_SetPhonemeTrace(int phonememode, FILE *stream)
 		f_trans = stderr;
 }
 
+// Same as espeak_TextToPhonemes except we also get the clause terminator used (full stop, comma, etc.).
+// Depends on the added TranslateClauseWithTerminator in
+ESPEAK_API const char* espeak_TextToPhonemesWithTerminator(const void** textptr, int textmode, int phonememode, int* terminator)
+{
+  /* phoneme_mode
+      bit 1:   0=eSpeak's ascii phoneme names, 1= International Phonetic
+     Alphabet (as UTF-8 characters). bit 7:   use (bits 8-23) as a tie within
+     multi-letter phonemes names bits 8-23:  separator character, between
+     phoneme names
+   */
+
+  if (p_decoder == NULL)
+    p_decoder = create_text_decoder();
+
+  if (text_decoder_decode_string_multibyte(
+          p_decoder, *textptr, translator->encoding, textmode)
+      != ENS_OK)
+    return NULL;
+
+  TranslateClauseWithTerminator(translator, NULL, NULL, terminator);
+  *textptr = text_decoder_get_buffer(p_decoder);
+
+  return GetTranslatedPhonemeString(phonememode);
+}
+
 ESPEAK_API const char *espeak_TextToPhonemes(const void **textptr, int textmode, int phonememode)
 {
 	/* phoneme_mode
@@ -867,16 +892,7 @@ ESPEAK_API const char *espeak_TextToPhonemes(const void **textptr, int textmode,
 	    bits 8-23:  separator character, between phoneme names
 	 */
 
-	if (p_decoder == NULL)
-		p_decoder = create_text_decoder();
-
-	if (text_decoder_decode_string_multibyte(p_decoder, *textptr, translator->encoding, textmode) != ENS_OK)
-		return NULL;
-
-	TranslateClause(translator, NULL, NULL);
-	*textptr = text_decoder_get_buffer(p_decoder);
-
-	return GetTranslatedPhonemeString(phonememode);
+	return espeak_TextToPhonemesWithTerminator(textptr, textmode, phonememode, NULL);
 }
 
 ESPEAK_NG_API espeak_ng_STATUS espeak_ng_Cancel(void)
diff --git a/src/libespeak-ng/translate.c b/src/libespeak-ng/translate.c
index 0914619a..cdff8b46 100644
--- a/src/libespeak-ng/translate.c
+++ b/src/libespeak-ng/translate.c
@@ -1937,7 +1937,9 @@ static int UpperCaseInWord(Translator *tr, char *word, int c)
 	return 0;
 }
 
-void TranslateClause(Translator *tr, int *tone_out, char **voice_change)
+// Same as TranslateClause except we also get the clause terminator used (full stop, comma, etc.).
+// Used by espeak_TextToPhonemesWithTerminator.
+void TranslateClauseWithTerminator(Translator *tr, int *tone_out, char **voice_change, int *terminator_out)
 {
 	int ix;
 	int c;
@@ -2000,6 +2002,10 @@ void TranslateClause(Translator *tr, int *tone_out, char **voice_change)
 		charix[ix] = 0;
 	terminator = ReadClause(tr, source, charix, &charix_top, N_TR_SOURCE, &tone, voice_change_name);
 
+	if (terminator_out != NULL) {
+		*terminator_out = terminator;
+	}
+
 	if (tone_out != NULL) {
 		if (tone == 0)
 			*tone_out = (terminator & CLAUSE_INTONATION_TYPE) >> 12; // tone type not overridden in ReadClause, use default
@@ -2701,6 +2707,11 @@ void TranslateClause(Translator *tr, int *tone_out, char **voice_change)
 	}
 }
 
+void TranslateClause(Translator *tr, int *tone_out, char **voice_change)
+{
+	TranslateClauseWithTerminator(tr, tone_out, voice_change, NULL);
+}
+
 void InitText(int control)
 {
 	count_sentences = 0;
-- 
2.44.0

openSUSE Build Service is sponsored by