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
2025-08-08 13:34:35 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Committed by
GitHub
2025-08-08 13:34:35 +0800
Commit
e6337de9035fc32086c083308523a37dc41189bb
e6337de9
1 parent
bfbd6033
Add Android TTS Engine APK for KittenTTS (#2465)
隐藏空白字符变更
内嵌
并排对比
正在显示
6 个修改的文件
包含
58 行增加
和
1 行删除
android/SherpaOnnxTts/app/src/main/java/com/k2fsa/sherpa/onnx/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
sherpa-onnx/csrc/piper-phonemize-lexicon.cc
android/SherpaOnnxTts/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt
查看文件 @
e6337de
...
...
@@ -192,6 +192,7 @@ class MainActivity : AppCompatActivity() {
var dataDir: String?
var dictDir: String?
var assets: AssetManager? = application.assets
var isKitten = false
// The purpose of such a design is to make the CI test easier
// Please see
...
...
@@ -291,6 +292,14 @@ class MainActivity : AppCompatActivity() {
// lexicon = "kokoro-multi-lang-v1_0/lexicon-us-en.txt,kokoro-multi-lang-v1_0/lexicon-zh.txt"
// ruleFsts = "$modelDir/phone-zh.fst,$modelDir/date-zh.fst,$modelDir/number-zh.fst"
// Example 11
// kitten-nano-en-v0_1-fp16
// modelDir = "kitten-nano-en-v0_1-fp16"
// modelName = "model.fp16.onnx"
// voices = "voices.bin"
// dataDir = "kokoro-multi-lang-v1_0/espeak-ng-data"
// isKitten = true
if (dataDir != null) {
val newDir = copyDataDir(dataDir!!)
dataDir = "$newDir/$dataDir"
...
...
@@ -315,6 +324,7 @@ class MainActivity : AppCompatActivity() {
dictDir = dictDir ?: "",
ruleFsts = ruleFsts ?: "",
ruleFars = ruleFars ?: "",
isKitten = isKitten,
)!!
tts = OfflineTts(assetManager = assets, config = config)
...
...
android/SherpaOnnxTtsEngine/app/src/main/java/com/k2fsa/sherpa/onnx/tts/engine/TtsEngine.kt
查看文件 @
e6337de
...
...
@@ -53,6 +53,7 @@ object TtsEngine {
private var dataDir: String? = null
private var dictDir: String? = null
private var assets: AssetManager? = null
private var isKitten = false
init {
// The purpose of such a design is to make the CI test easier
...
...
@@ -172,6 +173,15 @@ object TtsEngine {
//
// This model supports many languages, e.g., English, Chinese, etc.
// We set lang to eng here.
// Example 11
// kitten-nano-en-v0_1-fp16
// modelDir = "kitten-nano-en-v0_1-fp16"
// modelName = "model.fp16.onnx"
// voices = "voices.bin"
// dataDir = "kitten-nano-en-v0_1-fp16/espeak-ng-data"
// lang = "eng"
// isKitten = true
}
fun createTts(context: Context) {
...
...
@@ -207,7 +217,8 @@ object TtsEngine {
dataDir = dataDir ?: "",
dictDir = dictDir ?: "",
ruleFsts = ruleFsts ?: "",
ruleFars = ruleFars ?: ""
ruleFars = ruleFars ?: "",
isKitten = isKitten,
)
speed = PreferenceHelper(context).getSpeed()
...
...
scripts/apk/build-apk-tts-engine.sh.in
查看文件 @
e6337de
...
...
@@ -64,6 +64,11 @@ sed -i.bak s/"lang = null"/"lang = \"$lang_iso_639_3\""/ ./TtsEngine.kt
sed -i.bak s/
"lang2 = null"
/
"lang2 =
\"
$lang_iso_639_3_2
\"
"
/ ./TtsEngine.kt
{%
endif %
}
{%
if
tts_model.is_kitten %
}
sed -i.bak s/
"isKitten = false"
/
"isKitten = true"
/ ./TtsEngine.kt
{%
endif %
}
{%
if
tts_model.model_name %
}
sed -i.bak s/
"modelName = null"
/
"modelName =
\"
$model_name
\"
"
/ ./TtsEngine.kt
{%
endif %
}
...
...
scripts/apk/build-apk-tts.sh.in
查看文件 @
e6337de
...
...
@@ -101,6 +101,10 @@ sed -i.bak s/"modelDir = null"/"modelDir = \"$model_dir\""/ ./MainActivity.kt
sed -i.bak s%
"lexicon = null"
%
"lexicon =
\"
$lexicon
\"
"
% ./MainActivity.kt
{%
endif %
}
{%
if
tts_model.is_kitten %
}
sed -i.bak s/
"isKitten = false"
/
"isKitten = true"
/ ./MainActivity.kt
{%
endif %
}
git diff
popd
...
...
scripts/apk/generate-tts-apk-script.py
查看文件 @
e6337de
...
...
@@ -44,6 +44,7 @@ class TtsModel:
lang_iso_639_3
:
str
=
""
lang_iso_639_3_2
:
str
=
""
lexicon
:
str
=
""
is_kitten
:
bool
=
False
def
convert_lang_to_iso_639_3
(
models
:
List
[
TtsModel
]):
...
...
@@ -494,6 +495,22 @@ def get_kokoro_models() -> List[TtsModel]:
return
english_models
+
multi_lingual_models
def
get_kitten_models
()
->
List
[
TtsModel
]:
english_models
=
[
TtsModel
(
model_dir
=
"kitten-nano-en-v0_1-fp16"
,
model_name
=
"model.fp16.onnx"
,
lang
=
"en"
,
)
]
for
m
in
english_models
:
m
.
data_dir
=
f
"{m.model_dir}/espeak-ng-data"
m
.
voices
=
"voices.bin"
m
.
is_kitten
=
True
return
english_models
def
main
():
args
=
get_args
()
index
=
args
.
index
...
...
@@ -507,6 +524,7 @@ def main():
all_model_list
+=
get_coqui_models
()
all_model_list
+=
get_matcha_models
()
all_model_list
+=
get_kokoro_models
()
all_model_list
+=
get_kitten_models
()
convert_lang_to_iso_639_3
(
all_model_list
)
print
(
all_model_list
)
...
...
sherpa-onnx/csrc/piper-phonemize-lexicon.cc
查看文件 @
e6337de
...
...
@@ -535,6 +535,10 @@ template PiperPhonemizeLexicon::PiperPhonemizeLexicon(
template
PiperPhonemizeLexicon
::
PiperPhonemizeLexicon
(
AAssetManager
*
mgr
,
const
std
::
string
&
tokens
,
const
std
::
string
&
data_dir
,
const
OfflineTtsKokoroModelMetaData
&
kokoro_meta_data
);
template
PiperPhonemizeLexicon
::
PiperPhonemizeLexicon
(
AAssetManager
*
mgr
,
const
std
::
string
&
tokens
,
const
std
::
string
&
data_dir
,
const
OfflineTtsKittenModelMetaData
&
kokoro_meta_data
);
#endif
#if __OHOS__
...
...
@@ -552,6 +556,11 @@ template PiperPhonemizeLexicon::PiperPhonemizeLexicon(
NativeResourceManager
*
mgr
,
const
std
::
string
&
tokens
,
const
std
::
string
&
data_dir
,
const
OfflineTtsKokoroModelMetaData
&
kokoro_meta_data
);
template
PiperPhonemizeLexicon
::
PiperPhonemizeLexicon
(
NativeResourceManager
*
mgr
,
const
std
::
string
&
tokens
,
const
std
::
string
&
data_dir
,
const
OfflineTtsKittenModelMetaData
&
kokoro_meta_data
);
#endif
}
// namespace sherpa_onnx
...
...
请
注册
或
登录
后发表评论