Skip to content

Commit

Permalink
Allow to link against upstream espeak-ng
Browse files Browse the repository at this point in the history
  • Loading branch information
Leo Hubert committed Aug 8, 2023
1 parent 41cfb05 commit 80ad15e
Showing 1 changed file with 18 additions and 12 deletions.
30 changes: 18 additions & 12 deletions src/phonemize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,21 @@ void phonemize_eSpeak(std::string text, eSpeakPhonemeConfig &config,

std::vector<Phoneme> *sentencePhonemes = nullptr;
const char *inputTextPointer = textCopy.c_str();
int terminator = 0;

while (inputTextPointer != NULL) {
// Modified espeak-ng API to get access to clause terminator
std::string clausePhonemes(espeak_TextToPhonemesWithTerminator(
int terminator = 0;
std::string clausePhonemes(espeak_TextToPhonemes(
(const void **)&inputTextPointer,
/*textmode*/ espeakCHARS_AUTO,
/*phonememode = IPA*/ 0x02, &terminator));
/*phonememode = IPA*/ 0x02));

const char *remainingTextPointer = inputTextPointer ? inputTextPointer : textCopy.c_str()+textCopy.length()+1;
for (size_t i = -2; remainingTextPointer+i > textCopy.c_str(); i--) {
if ((remainingTextPointer[i]) != ' ') {
terminator = remainingTextPointer[i];
break;
}
}

// Decompose, e.g. "ç" -> "c" + "̧"
auto phonemesNorm = una::norm::to_nfd_utf8(clausePhonemes);
Expand Down Expand Up @@ -105,25 +112,24 @@ void phonemize_eSpeak(std::string text, eSpeakPhonemeConfig &config,
}

// Add appropriate punctuation depending on terminator type
int punctuation = terminator & 0x000FFFFF;
if (punctuation == CLAUSE_PERIOD) {
if (terminator == '.') {
sentencePhonemes->push_back(config.period);
} else if (punctuation == CLAUSE_QUESTION) {
} else if (terminator == '?') {
sentencePhonemes->push_back(config.question);
} else if (punctuation == CLAUSE_EXCLAMATION) {
} else if (terminator == '!') {
sentencePhonemes->push_back(config.exclamation);
} else if (punctuation == CLAUSE_COMMA) {
} else if (terminator == ',') {
sentencePhonemes->push_back(config.comma);
sentencePhonemes->push_back(config.space);
} else if (punctuation == CLAUSE_COLON) {
} else if (terminator == ':') {
sentencePhonemes->push_back(config.colon);
sentencePhonemes->push_back(config.space);
} else if (punctuation == CLAUSE_SEMICOLON) {
} else if (terminator == ';') {
sentencePhonemes->push_back(config.semicolon);
sentencePhonemes->push_back(config.space);
}

if ((terminator & CLAUSE_TYPE_SENTENCE) == CLAUSE_TYPE_SENTENCE) {
if (terminator == '.' || terminator == '?' || terminator == '!') {
// End of sentence
sentencePhonemes = nullptr;
}
Expand Down

0 comments on commit 80ad15e

Please sign in to comment.