Fangjun Kuang
Committed by GitHub

Support German TTS (#394)

@@ -77,20 +77,13 @@ class MainActivity : AppCompatActivity() { @@ -77,20 +77,13 @@ class MainActivity : AppCompatActivity() {
77 return 77 return
78 } 78 }
79 79
80 - Toast.makeText(applicationContext, "Generating...Please wait", Toast.LENGTH_LONG).show() 80 + play.isEnabled = false;
81 val audio = tts.generate(text = textStr, sid = sidInt, speed = speedFloat) 81 val audio = tts.generate(text = textStr, sid = sidInt, speed = speedFloat)
82 82
83 val filename = application.filesDir.absolutePath + "/generated.wav" 83 val filename = application.filesDir.absolutePath + "/generated.wav"
84 val ok = audio.samples.size > 0 && audio.save(filename) 84 val ok = audio.samples.size > 0 && audio.save(filename)
85 if (ok) { 85 if (ok) {
86 play.isEnabled = true 86 play.isEnabled = true
87 - Toast.makeText(  
88 - applicationContext,  
89 - "Generated! Please click play to listen to it",  
90 - Toast.LENGTH_LONG  
91 - ).show()  
92 - } else {  
93 - play.isEnabled = false  
94 } 87 }
95 } 88 }
96 89
@@ -129,10 +129,12 @@ std::vector<int64_t> Lexicon::ConvertTextToTokenIds( @@ -129,10 +129,12 @@ std::vector<int64_t> Lexicon::ConvertTextToTokenIds(
129 switch (language_) { 129 switch (language_) {
130 case Language::kEnglish: 130 case Language::kEnglish:
131 return ConvertTextToTokenIdsEnglish(text); 131 return ConvertTextToTokenIdsEnglish(text);
  132 + case Language::kGerman:
  133 + return ConvertTextToTokenIdsGerman(text);
132 case Language::kChinese: 134 case Language::kChinese:
133 return ConvertTextToTokenIdsChinese(text); 135 return ConvertTextToTokenIdsChinese(text);
134 default: 136 default:
135 - SHERPA_ONNX_LOGE("Unknonw language: %d", static_cast<int32_t>(language_)); 137 + SHERPA_ONNX_LOGE("Unknown language: %d", static_cast<int32_t>(language_));
136 exit(-1); 138 exit(-1);
137 } 139 }
138 140
@@ -246,6 +248,8 @@ void Lexicon::InitLanguage(const std::string &_lang) { @@ -246,6 +248,8 @@ void Lexicon::InitLanguage(const std::string &_lang) {
246 ToLowerCase(&lang); 248 ToLowerCase(&lang);
247 if (lang == "english") { 249 if (lang == "english") {
248 language_ = Language::kEnglish; 250 language_ = Language::kEnglish;
  251 + } else if (lang == "german") {
  252 + language_ = Language::kGerman;
249 } else if (lang == "chinese") { 253 } else if (lang == "chinese") {
250 language_ = Language::kChinese; 254 language_ = Language::kChinese;
251 } else { 255 } else {
@@ -269,8 +273,8 @@ void Lexicon::InitLexicon(std::istream &is) { @@ -269,8 +273,8 @@ void Lexicon::InitLexicon(std::istream &is) {
269 ToLowerCase(&word); 273 ToLowerCase(&word);
270 274
271 if (word2ids_.count(word)) { 275 if (word2ids_.count(word)) {
272 - SHERPA_ONNX_LOGE("Duplicated word: %s", word.c_str());  
273 - return; 276 + SHERPA_ONNX_LOGE("Duplicated word: %s. Ignore it.", word.c_str());
  277 + continue;
274 } 278 }
275 279
276 while (iss >> phone) { 280 while (iss >> phone) {
@@ -36,6 +36,11 @@ class Lexicon { @@ -36,6 +36,11 @@ class Lexicon {
36 std::vector<int64_t> ConvertTextToTokenIds(const std::string &text) const; 36 std::vector<int64_t> ConvertTextToTokenIds(const std::string &text) const;
37 37
38 private: 38 private:
  39 + std::vector<int64_t> ConvertTextToTokenIdsGerman(
  40 + const std::string &text) const {
  41 + return ConvertTextToTokenIdsEnglish(text);
  42 + }
  43 +
39 std::vector<int64_t> ConvertTextToTokenIdsEnglish( 44 std::vector<int64_t> ConvertTextToTokenIdsEnglish(
40 const std::string &text) const; 45 const std::string &text) const;
41 46
@@ -50,6 +55,7 @@ class Lexicon { @@ -50,6 +55,7 @@ class Lexicon {
50 private: 55 private:
51 enum class Language { 56 enum class Language {
52 kEnglish, 57 kEnglish,
  58 + kGerman,
53 kChinese, 59 kChinese,
54 kUnknown, 60 kUnknown,
55 }; 61 };