File size: 1,676 Bytes
d5ee97c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
#include "EnglishPhoneticProcessor.h"
#include "VoxCommon.hpp"
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;
}
|