Fangjun Kuang
Committed by GitHub

Fix cantonese vits tts (#2558)

@@ -150,7 +150,7 @@ std::vector<TokenIDs> Lexicon::ConvertTextToTokenIds( @@ -150,7 +150,7 @@ std::vector<TokenIDs> Lexicon::ConvertTextToTokenIds(
150 return ConvertTextToTokenIdsNotChinese(text); 150 return ConvertTextToTokenIdsNotChinese(text);
151 default: 151 default:
152 SHERPA_ONNX_LOGE("Unknown language: %d", static_cast<int32_t>(language_)); 152 SHERPA_ONNX_LOGE("Unknown language: %d", static_cast<int32_t>(language_));
153 - exit(-1); 153 + SHERPA_ONNX_EXIT(-1);
154 } 154 }
155 155
156 return {}; 156 return {};
@@ -171,7 +171,7 @@ std::vector<TokenIDs> Lexicon::ConvertTextToTokenIdsChinese( @@ -171,7 +171,7 @@ std::vector<TokenIDs> Lexicon::ConvertTextToTokenIdsChinese(
171 os << "Input text in bytes:"; 171 os << "Input text in bytes:";
172 for (uint8_t c : text) { 172 for (uint8_t c : text) {
173 os << " 0x" << std::setfill('0') << std::setw(2) << std::right << std::hex 173 os << " 0x" << std::setfill('0') << std::setw(2) << std::right << std::hex
174 - << c; 174 + << static_cast<int32_t>(c);
175 } 175 }
176 os << "\n"; 176 os << "\n";
177 os << "After splitting to words:"; 177 os << "After splitting to words:";
@@ -261,7 +261,10 @@ std::vector<TokenIDs> Lexicon::ConvertTextToTokenIdsChinese( @@ -261,7 +261,10 @@ std::vector<TokenIDs> Lexicon::ConvertTextToTokenIdsChinese(
261 if (eos != -1) { 261 if (eos != -1) {
262 this_sentence.push_back(eos); 262 this_sentence.push_back(eos);
263 } 263 }
  264 +
  265 + if (!this_sentence.empty()) {
264 ans.emplace_back(std::move(this_sentence)); 266 ans.emplace_back(std::move(this_sentence));
  267 + }
265 268
266 return ans; 269 return ans;
267 } 270 }
@@ -280,7 +283,7 @@ std::vector<TokenIDs> Lexicon::ConvertTextToTokenIdsNotChinese( @@ -280,7 +283,7 @@ std::vector<TokenIDs> Lexicon::ConvertTextToTokenIdsNotChinese(
280 os << "Input text in bytes:"; 283 os << "Input text in bytes:";
281 for (uint8_t c : text) { 284 for (uint8_t c : text) {
282 os << " 0x" << std::setfill('0') << std::setw(2) << std::right << std::hex 285 os << " 0x" << std::setfill('0') << std::setw(2) << std::right << std::hex
283 - << c; 286 + << static_cast<int32_t>(c);
284 } 287 }
285 os << "\n"; 288 os << "\n";
286 os << "After splitting to words:"; 289 os << "After splitting to words:";
@@ -367,7 +367,7 @@ class OfflineTtsVitsImpl : public OfflineTtsImpl { @@ -367,7 +367,7 @@ class OfflineTtsVitsImpl : public OfflineTtsImpl {
367 SHERPA_ONNX_LOGE( 367 SHERPA_ONNX_LOGE(
368 "Not a model using characters as modeling unit. Please provide " 368 "Not a model using characters as modeling unit. Please provide "
369 "--vits-lexicon if you leave --vits-data-dir empty"); 369 "--vits-lexicon if you leave --vits-data-dir empty");
370 - exit(-1); 370 + SHERPA_ONNX_EXIT(-1);
371 } 371 }
372 372
373 frontend_ = std::make_unique<Lexicon>( 373 frontend_ = std::make_unique<Lexicon>(
@@ -382,13 +382,13 @@ class OfflineTtsVitsImpl : public OfflineTtsImpl { @@ -382,13 +382,13 @@ class OfflineTtsVitsImpl : public OfflineTtsImpl {
382 if (meta_data.jieba && config_.model.vits.dict_dir.empty()) { 382 if (meta_data.jieba && config_.model.vits.dict_dir.empty()) {
383 SHERPA_ONNX_LOGE( 383 SHERPA_ONNX_LOGE(
384 "Please provide --vits-dict-dir for Chinese TTS models using jieba"); 384 "Please provide --vits-dict-dir for Chinese TTS models using jieba");
385 - exit(-1); 385 + SHERPA_ONNX_EXIT(-1);
386 } 386 }
387 387
388 if (!meta_data.jieba && !config_.model.vits.dict_dir.empty()) { 388 if (!meta_data.jieba && !config_.model.vits.dict_dir.empty()) {
389 SHERPA_ONNX_LOGE( 389 SHERPA_ONNX_LOGE(
390 "Current model is not using jieba but you provided --vits-dict-dir"); 390 "Current model is not using jieba but you provided --vits-dict-dir");
391 - exit(-1); 391 + SHERPA_ONNX_EXIT(-1);
392 } 392 }
393 393
394 if (meta_data.frontend == "characters") { 394 if (meta_data.frontend == "characters") {
@@ -419,7 +419,7 @@ class OfflineTtsVitsImpl : public OfflineTtsImpl { @@ -419,7 +419,7 @@ class OfflineTtsVitsImpl : public OfflineTtsImpl {
419 SHERPA_ONNX_LOGE( 419 SHERPA_ONNX_LOGE(
420 "Not a model using characters as modeling unit. Please provide " 420 "Not a model using characters as modeling unit. Please provide "
421 "--vits-lexicon if you leave --vits-data-dir empty"); 421 "--vits-lexicon if you leave --vits-data-dir empty");
422 - exit(-1); 422 + SHERPA_ONNX_EXIT(-1);
423 } 423 }
424 frontend_ = std::make_unique<Lexicon>( 424 frontend_ = std::make_unique<Lexicon>(
425 config_.model.vits.lexicon, config_.model.vits.tokens, 425 config_.model.vits.lexicon, config_.model.vits.tokens,