Path: blob/master/examples/cppwin/TensorflowTTSCppInference/EnglishPhoneticProcessor.cpp
1559 views
#include "EnglishPhoneticProcessor.h"1#include "VoxCommon.hpp"23using namespace std;45bool EnglishPhoneticProcessor::Initialize(Phonemizer* InPhn)6{789Phoner = InPhn;10Tokenizer.SetAllowedChars(Phoner->GetGraphemeChars());11121314return true;15}1617std::string EnglishPhoneticProcessor::ProcessTextPhonetic(const std::string& InText, const std::vector<string> &InPhonemes,ETTSLanguage::Enum InLanguage)18{19if (!Phoner)20return "ERROR";21222324vector<string> Words = Tokenizer.Tokenize(InText,InLanguage);2526string Assemble = "";27// Make a copy of the dict passed.2829for (size_t w = 0; w < Words.size();w++)30{31const string& Word = Words[w];3233if (Word.find("@") != std::string::npos){34std::string AddPh = Word.substr(1); // Remove the @35size_t OutId = 0;36if (VoxUtil::FindInVec(AddPh,InPhonemes,OutId))37{38Assemble.append(InPhonemes[OutId]);39Assemble.append(" ");404142}4344continue;4546}4748495051size_t OverrideIdx = 0;52535455std::string Res = Phoner->ProcessWord(Word,0.001f);5657// Cache the word in the override dict so next time we don't have to research it5859Assemble.append(Res);60Assemble.append(" ");616263646566}676869// Delete last space if there is707172if (Assemble[Assemble.size() - 1] == ' ')73Assemble.pop_back();747576return Assemble;77}7879EnglishPhoneticProcessor::EnglishPhoneticProcessor()80{81Phoner = nullptr;82}8384EnglishPhoneticProcessor::EnglishPhoneticProcessor(Phonemizer *InPhn)85{86Initialize(InPhn);8788}89909192EnglishPhoneticProcessor::~EnglishPhoneticProcessor()93{94if (Phoner)95delete Phoner;96}979899