Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
xuning
/
sherpaonnx
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
Fangjun Kuang
2024-03-26 14:05:26 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Committed by
GitHub
2024-03-26 14:05:26 +0800
Commit
bd66f7a7d05f5f7a7d66e7698481aa2a6844a057
bd66f7a7
1 parent
d3646106
Build Android TTS APKs for coqui-ai/TTS models (#704)
显示空白字符变更
内嵌
并排对比
正在显示
7 个修改的文件
包含
89 行增加
和
115 行删除
android/SherpaOnnxTts/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt
android/SherpaOnnxTtsEngine/app/src/main/java/com/k2fsa/sherpa/onnx/tts/engine/GetSampleText.kt
android/SherpaOnnxTtsEngine/app/src/main/java/com/k2fsa/sherpa/onnx/tts/engine/MainActivity.kt
android/SherpaOnnxTtsEngine/app/src/main/java/com/k2fsa/sherpa/onnx/tts/engine/TtsEngine.kt
scripts/apk/build-apk-tts-engine.sh.in
scripts/apk/build-apk-tts.sh.in
scripts/apk/generate-tts-apk-script.py
android/SherpaOnnxTts/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt
查看文件 @
bd66f7a
...
...
@@ -186,6 +186,12 @@ class MainActivity : AppCompatActivity() {
// ruleFsts = "vits-zh-aishell3/rule.fst"
// lexicon = "lexicon.txt"
// Example 4:
// https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-coqui-de-css10.tar.bz2
// modelDir = "vits-coqui-de-css10"
// modelName = "model.onnx"
// lang = "deu"
if (dataDir != null) {
val newDir = copyDataDir(modelDir)
modelDir = newDir + "/" + modelDir
...
...
android/SherpaOnnxTtsEngine/app/src/main/java/com/k2fsa/sherpa/onnx/tts/engine/GetSampleText.kt
查看文件 @
bd66f7a
...
...
@@ -6,15 +6,18 @@ import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.speech.tts.TextToSpeech
class GetSampleText : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
var result = TextToSpeech.LANG_AVAILABLE
var text: String = ""
when(TtsEngine.lang) {
fun getSampleText(lang: String): String {
var text = ""
when (lang) {
"ara" -> {
text = "هذا هو محرك تحويل النص إلى كلام باستخدام الجيل القادم من كالدي"
}
"ben" -> {
text = "এটি একটি টেক্সট-টু-স্পীচ ইঞ্জিন যা পরবর্তী প্রজন্মের কালডি ব্যবহার করে"
}
"bul" -> {
text = "Това е машина за преобразуване на текст в реч, използваща Kaldi от следващо поколение"
}
"cat" -> {
text = "Aquest és un motor de text a veu que utilitza Kaldi de nova generació"
}
...
...
@@ -33,11 +36,20 @@ class GetSampleText : Activity() {
"eng" -> {
text = "This is a text-to-speech engine using next generation Kaldi"
}
"est" -> {
text = "See on teksti kõneks muutmise mootor, mis kasutab järgmise põlvkonna Kaldi"
}
"fin" -> {
text = "Tämä on tekstistä puheeksi -moottori, joka käyttää seuraavan sukupolven kaldia"
}
"fra" -> {
text = "Il s'agit d'un moteur de synthèse vocale utilisant Kaldi de nouvelle génération."
text = "Il s'agit d'un moteur de synthèse vocale utilisant Kaldi de nouvelle génération"
}
"gle" -> {
text = "Is inneall téacs-go-hurlabhra é seo a úsáideann Kaldi den chéad ghlúin eile"
}
"hrv" -> {
text = "Ovo je mehanizam za pretvaranje teksta u govor koji koristi Kaldi sljedeće generacije"
}
"hun" -> {
text = "Ez egy szövegfelolvasó motor a következő generációs kaldi használatával"
...
...
@@ -54,6 +66,15 @@ class GetSampleText : Activity() {
"kaz" -> {
text = "Бұл келесі буын kaldi көмегімен мәтіннен сөйлеуге арналған қозғалтқыш"
}
"mlt" -> {
text = "Din hija magna text-to-speech li tuża Kaldi tal-ġenerazzjoni li jmiss"
}
"lav" -> {
text = "Šis ir teksta pārvēršanas runā dzinējs, kas izmanto nākamās paaudzes Kaldi"
}
"lit" -> {
text = "Tai teksto į kalbą variklis, kuriame naudojamas naujos kartos Kaldi"
}
"ltz" -> {
text = "Dëst ass en Text-zu-Speech-Motor mat der nächster Generatioun Kaldi"
}
...
...
@@ -81,6 +102,9 @@ class GetSampleText : Activity() {
"slk" -> {
text = "Toto je nástroj na prevod textu na reč využívajúci kaldi novej generácie"
}
"slv" -> {
text = "To je mehanizem za pretvorbo besedila v govor, ki uporablja Kaldi naslednje generacije"
}
"spa" -> {
text = "Este es un motor de texto a voz que utiliza kaldi de próxima generación."
}
...
...
@@ -105,9 +129,17 @@ class GetSampleText : Activity() {
"zho", "cmn" -> {
text = "使用新一代卡尔迪的语音合成引擎"
}
else -> {
result = TextToSpeech.LANG_NOT_SUPPORTED
}
return text
}
class GetSampleText : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
var result = TextToSpeech.LANG_AVAILABLE
var text: String = getSampleText(TtsEngine.lang ?: "")
if (text.isEmpty()) {
result = TextToSpeech.LANG_NOT_SUPPORTED
}
val intent = Intent().apply{
...
...
android/SherpaOnnxTtsEngine/app/src/main/java/com/k2fsa/sherpa/onnx/tts/engine/MainActivity.kt
查看文件 @
bd66f7a
...
...
@@ -73,109 +73,7 @@ class MainActivity : ComponentActivity() {
)
}
var testTextContent = ""
when(TtsEngine.lang) {
"ara" -> {
testTextContent = "هذا هو محرك تحويل النص إلى كلام باستخدام الجيل القادم من كالدي"
}
"cat" -> {
testTextContent = "Aquest és un motor de testText a veu que utilitza Kaldi de nova generació"
}
"ces" -> {
testTextContent = "Toto je převodník testTextu na řeč využívající novou generaci kaldi"
}
"dan" -> {
testTextContent = "Dette er en tekst til tale-motor, der bruger næste generation af kaldi"
}
"deu" -> {
testTextContent = "Dies ist eine testText-to-Speech-Engine, die Kaldi der nächsten Generation verwendet"
}
"ell" -> {
testTextContent = "Αυτή είναι μια μηχανή κειμένου σε ομιλία που χρησιμοποιεί kaldi επόμενης γενιάς"
}
"eng" -> {
testTextContent = "This is a testText-to-speech engine using next generation Kaldi"
}
"fas" -> {
testTextContent = "این یک موتور تبدیل متن به گفتار است برپایه نسخه پیشگام کالدی"
}
"fin" -> {
testTextContent = "Tämä on tekstistä puheeksi -moottori, joka käyttää seuraavan sukupolven kaldia"
}
"fra" -> {
testTextContent = "Il s'agit d'un moteur de synthèse vocale utilisant Kaldi de nouvelle génération."
}
"hun" -> {
testTextContent = "Ez egy szövegfelolvasó motor a következő generációs kaldi használatával"
}
"isl" -> {
testTextContent = "Þetta er testTexta í tal vél sem notar næstu kynslóð kaldi"
}
"ita" -> {
testTextContent = "Questo è un motore di sintesi vocale che utilizza kaldi di nuova generazione"
}
"kat" -> {
testTextContent = "ეს არის ტექსტიდან მეტყველების ძრავა შემდეგი თაობის კალდის გამოყენებით"
}
"kaz" -> {
testTextContent = "Бұл келесі буын kaldi көмегімен мәтіннен сөйлеуге арналған қозғалтқыш"
}
"ltz" -> {
testTextContent = "Dëst ass en testText-zu-Speech-Motor mat der nächster Generatioun Kaldi"
}
"nep" -> {
testTextContent = "यो अर्को पुस्ता काल्डी प्रयोग गरेर स्पीच इन्जिनको पाठ हो"
}
"nld" -> {
testTextContent = "Dit is een tekst-naar-spraak-engine die gebruik maakt van Kaldi van de volgende generatie"
}
"nor" -> {
testTextContent = "Dette er en tekst til tale-motor som bruker neste generasjons kaldi"
}
"pol" -> {
testTextContent = "Jest to silnik syntezatora mowy wykorzystujący Kaldi nowej generacji"
}
"por" -> {
testTextContent = "Este é um mecanismo de conversão de testTexto em fala usando Kaldi de próxima geração"
}
"ron" -> {
testTextContent = "Acesta este un motor testText to speech care folosește generația următoare de kadi"
}
"rus" -> {
testTextContent = "Это движок преобразования текста в речь, использующий Kaldi следующего поколения."
}
"slk" -> {
testTextContent = "Toto je nástroj na prevod testTextu na reč využívajúci kaldi novej generácie"
}
"spa" -> {
testTextContent = "Este es un motor de testTexto a voz que utiliza kaldi de próxima generación."
}
"srp" -> {
testTextContent = "Ово је механизам за претварање текста у говор који користи калди следеће генерације"
}
"swa" -> {
testTextContent = "Haya ni maandishi kwa injini ya hotuba kwa kutumia kizazi kijacho kaldi"
}
"swe" -> {
testTextContent = "Detta är en testText till tal-motor som använder nästa generations kaldi"
}
"tur" -> {
testTextContent = "Bu, yeni nesil kaldi'yi kullanan bir metinden konuşmaya motorudur"
}
"ukr" -> {
testTextContent = "Це механізм перетворення тексту на мовлення, який використовує kaldi нового покоління"
}
"vie" -> {
testTextContent = "Đây là công cụ chuyển văn bản thành giọng nói sử dụng kaldi thế hệ tiếp theo"
}
"zho", "cmn" -> {
testTextContent = "使用新一代卡尔迪的语音合成引擎"
}
else -> {
testTextContent = ""
}
}
val testTextContent = getSampleText(TtsEngine.lang ?: "")
var testText by remember { mutableStateOf(testTextContent) }
...
...
android/SherpaOnnxTtsEngine/app/src/main/java/com/k2fsa/sherpa/onnx/tts/engine/TtsEngine.kt
查看文件 @
bd66f7a
...
...
@@ -57,6 +57,7 @@ object TtsEngine {
// Please enable one and only one of the examples below
// Example 1:
// https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-vctk.tar.bz2
// modelDir = "vits-vctk"
// modelName = "vits-vctk.onnx"
// lexicon = "lexicon.txt"
...
...
@@ -71,11 +72,19 @@ object TtsEngine {
// lang = "eng"
// Example 3:
// https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-icefall-zh-aishell3.tar.bz2
// modelDir = "vits-zh-aishell3"
// modelName = "vits-aishell3.onnx"
// ruleFsts = "vits-zh-aishell3/rule.fst"
// lexicon = "lexicon.txt"
// lang = "zho"
// Example 4:
// https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-coqui-de-css10.tar.bz2
// This model does not need lexicon or dataDir
// modelDir = "vits-coqui-de-css10"
// modelName = "model.onnx"
// lang = "deu"
}
...
...
scripts/apk/build-apk-tts-engine.sh.in
查看文件 @
bd66f7a
...
...
@@ -59,7 +59,7 @@ sed -i.bak s/"lang = null"/"lang = \"$lang_iso_639_3\""/ ./TtsEngine.kt
{%
if
tts_model.data_dir %
}
data_dir
={{
tts_model.data_dir
}}
sed -i.bak s%
"dataDir = null"
%
"dataDir =
\"
$data_dir
\"
"
% ./TtsEngine.kt
{%
el
se
%
}
{%
el
if
not tts_model.is_char
%
}
sed -i.bak s/
"lexicon = null"
/
"lexicon =
\"
lexicon.txt
\"
"
/ ./TtsEngine.kt
{%
endif %
}
...
...
scripts/apk/build-apk-tts.sh.in
查看文件 @
bd66f7a
...
...
@@ -57,7 +57,7 @@ sed -i.bak s/"modelName = null"/"modelName = \"$model_name\""/ ./MainActivity.kt
{%
if
tts_model.data_dir %
}
data_dir
={{
tts_model.data_dir
}}
sed -i.bak s%
"dataDir = null"
%
"dataDir =
\"
$data_dir
\"
"
% ./MainActivity.kt
{%
el
se
%
}
{%
el
if
not tts_model.is_char
%
}
sed -i.bak s/
"lexicon = null"
/
"lexicon =
\"
lexicon.txt
\"
"
/ ./MainActivity.kt
{%
endif %
}
...
...
scripts/apk/generate-tts-apk-script.py
查看文件 @
bd66f7a
...
...
@@ -34,6 +34,7 @@ class TtsModel:
lang
:
str
=
""
# en, zh, fr, de, etc.
rule_fsts
:
Optional
[
List
[
str
]]
=
None
data_dir
:
Optional
[
str
]
=
None
is_char
:
bool
=
False
lang_iso_639_3
:
str
=
""
...
...
@@ -57,7 +58,35 @@ def get_coqui_models() -> List[TtsModel]:
m
.
model_name
=
"model.onnx"
m
.
lang
=
"en"
return
models
character_models
=
[
TtsModel
(
model_dir
=
"vits-coqui-bg-cv"
,
lang
=
"bg"
),
TtsModel
(
model_dir
=
"vits-coqui-bn-custom_female"
,
lang
=
"bn"
),
TtsModel
(
model_dir
=
"vits-coqui-cs-cv"
,
lang
=
"cs"
),
TtsModel
(
model_dir
=
"vits-coqui-da-cv"
,
lang
=
"da"
),
TtsModel
(
model_dir
=
"vits-coqui-de-css10"
,
lang
=
"de"
),
TtsModel
(
model_dir
=
"vits-coqui-es-css10"
,
lang
=
"es"
),
TtsModel
(
model_dir
=
"vits-coqui-et-cv"
,
lang
=
"et"
),
TtsModel
(
model_dir
=
"vits-coqui-fi-css10"
,
lang
=
"fi"
),
TtsModel
(
model_dir
=
"vits-coqui-fr-css10"
,
lang
=
"fr"
),
TtsModel
(
model_dir
=
"vits-coqui-ga-cv"
,
lang
=
"ga"
),
TtsModel
(
model_dir
=
"vits-coqui-hr-cv"
,
lang
=
"hr"
),
TtsModel
(
model_dir
=
"vits-coqui-lt-cv"
,
lang
=
"lt"
),
TtsModel
(
model_dir
=
"vits-coqui-lv-cv"
,
lang
=
"lv"
),
TtsModel
(
model_dir
=
"vits-coqui-mt-cv"
,
lang
=
"mt"
),
TtsModel
(
model_dir
=
"vits-coqui-nl-css10"
,
lang
=
"nl"
),
TtsModel
(
model_dir
=
"vits-coqui-pl-mai_female"
,
lang
=
"pl"
),
TtsModel
(
model_dir
=
"vits-coqui-pt-cv"
,
lang
=
"pt"
),
TtsModel
(
model_dir
=
"vits-coqui-ro-cv"
,
lang
=
"ro"
),
TtsModel
(
model_dir
=
"vits-coqui-sk-cv"
,
lang
=
"sk"
),
TtsModel
(
model_dir
=
"vits-coqui-sl-cv"
,
lang
=
"sl"
),
TtsModel
(
model_dir
=
"vits-coqui-sv-cv"
,
lang
=
"sv"
),
TtsModel
(
model_dir
=
"vits-coqui-uk-mai"
,
lang
=
"uk"
),
]
for
m
in
character_models
:
m
.
is_char
=
True
m
.
model_name
=
"model.onnx"
return
models
+
character_models
def
get_piper_models
()
->
List
[
TtsModel
]:
...
...
请
注册
或
登录
后发表评论