Fangjun Kuang
Committed by GitHub

Support VITS models from icefall. (#625)

... ... @@ -205,7 +205,8 @@ class OfflineTtsVitsImpl : public OfflineTtsImpl {
if (meta_data.frontend == "characters") {
frontend_ = std::make_unique<OfflineTtsCharacterFrontend>(
mgr, config_.model.vits.tokens, meta_data);
} else if ((meta_data.is_piper || meta_data.is_coqui) &&
} else if ((meta_data.is_piper || meta_data.is_coqui ||
meta_data.is_icefall) &&
!config_.model.vits.data_dir.empty()) {
frontend_ = std::make_unique<PiperPhonemizeLexicon>(
mgr, config_.model.vits.tokens, config_.model.vits.data_dir,
... ... @@ -231,7 +232,8 @@ class OfflineTtsVitsImpl : public OfflineTtsImpl {
if (meta_data.frontend == "characters") {
frontend_ = std::make_unique<OfflineTtsCharacterFrontend>(
config_.model.vits.tokens, meta_data);
} else if ((meta_data.is_piper || meta_data.is_coqui) &&
} else if ((meta_data.is_piper || meta_data.is_coqui ||
meta_data.is_icefall) &&
!config_.model.vits.data_dir.empty()) {
frontend_ = std::make_unique<PiperPhonemizeLexicon>(
config_.model.vits.tokens, config_.model.vits.data_dir,
... ...
... ... @@ -20,6 +20,7 @@ struct OfflineTtsVitsModelMetaData {
bool is_piper = false;
bool is_coqui = false;
bool is_icefall = false;
// the following options are for models from coqui-ai/TTS
int32_t blank_id = 0;
... ...
... ... @@ -110,6 +110,10 @@ class OfflineTtsVitsModel::Impl {
if (comment.find("coqui") != std::string::npos) {
meta_data_.is_coqui = true;
}
if (comment.find("icefall") != std::string::npos) {
meta_data_.is_icefall = true;
}
}
Ort::Value RunVitsPiperOrCoqui(Ort::Value x, int64_t sid, float speed) {
... ...
... ... @@ -236,7 +236,7 @@ std::vector<std::vector<int64_t>> PiperPhonemizeLexicon::ConvertTextToTokenIds(
std::vector<int64_t> phoneme_ids;
if (meta_data_.is_piper) {
if (meta_data_.is_piper || meta_data_.is_icefall) {
for (const auto &p : phonemes) {
phoneme_ids = PiperPhonemesToIds(token2id_, p);
ans.push_back(std::move(phoneme_ids));
... ...
... ... @@ -105,11 +105,13 @@ static Ort::SessionOptions GetSessionOptionsImpl(int32_t num_threads,
} else {
SHERPA_ONNX_LOGE("Use nnapi");
}
#else
#elif defined(__ANDROID_API__)
SHERPA_ONNX_LOGE(
"Android NNAPI requires API level >= 27. Current API level %d "
"Fallback to cpu!",
(int32_t)__ANDROID_API__);
#else
SHERPA_ONNX_LOGE("NNAPI is for Android only. Fallback to cpu");
#endif
break;
}
... ...