Comparative-Analysis-of-Speech-Synthesis-Models
/
TensorFlowTTS
/examples
/cppwin
/TensorflowTTSCppInference
/EnglishPhoneticProcessor.cpp
| using namespace std; | |
| bool EnglishPhoneticProcessor::Initialize(Phonemizer* InPhn) | |
| { | |
| Phoner = InPhn; | |
| Tokenizer.SetAllowedChars(Phoner->GetGraphemeChars()); | |
| return true; | |
| } | |
| std::string EnglishPhoneticProcessor::ProcessTextPhonetic(const std::string& InText, const std::vector<string> &InPhonemes,ETTSLanguage::Enum InLanguage) | |
| { | |
| if (!Phoner) | |
| return "ERROR"; | |
| vector<string> Words = Tokenizer.Tokenize(InText,InLanguage); | |
| string Assemble = ""; | |
| // Make a copy of the dict passed. | |
| for (size_t w = 0; w < Words.size();w++) | |
| { | |
| const string& Word = Words[w]; | |
| if (Word.find("@") != std::string::npos){ | |
| std::string AddPh = Word.substr(1); // Remove the @ | |
| size_t OutId = 0; | |
| if (VoxUtil::FindInVec(AddPh,InPhonemes,OutId)) | |
| { | |
| Assemble.append(InPhonemes[OutId]); | |
| Assemble.append(" "); | |
| } | |
| continue; | |
| } | |
| size_t OverrideIdx = 0; | |
| std::string Res = Phoner->ProcessWord(Word,0.001f); | |
| // Cache the word in the override dict so next time we don't have to research it | |
| Assemble.append(Res); | |
| Assemble.append(" "); | |
| } | |
| // Delete last space if there is | |
| if (Assemble[Assemble.size() - 1] == ' ') | |
| Assemble.pop_back(); | |
| return Assemble; | |
| } | |
| EnglishPhoneticProcessor::EnglishPhoneticProcessor() | |
| { | |
| Phoner = nullptr; | |
| } | |
| EnglishPhoneticProcessor::EnglishPhoneticProcessor(Phonemizer *InPhn) | |
| { | |
| Initialize(InPhn); | |
| } | |
| EnglishPhoneticProcessor::~EnglishPhoneticProcessor() | |
| { | |
| if (Phoner) | |
| delete Phoner; | |
| } | |