Skip to content

Commit 15930f8

Browse files
committed
Create SherpaOnnxOfflineTts.
1 parent 1ee3983 commit 15930f8

File tree

4 files changed

+87
-5
lines changed

4 files changed

+87
-5
lines changed

wasm/assets/.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
11
*.onnx
2+
*.txt
3+
espeak-ng-data
4+

wasm/assets/README.md

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Introduction
2+
3+
Please refer to
4+
https://github.com/k2-fsa/sherpa-onnx/releases/tag/tts-models
5+
to download a model.
6+
7+
The following is an example:
8+
```
9+
cd sherpa-onnx/wasm/tts/assets
10+
11+
wget -q https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-piper-en_US-libritts_r-medium.tar.bz2
12+
tar xf vits-piper-en_US-libritts_r-medium.tar.bz2
13+
rm vits-piper-en_US-libritts_r-medium.tar.bz2
14+
mv vits-piper-en_US-libritts_r-medium/en_US-libritts_r-medium.onnx ./model.onnx
15+
mv vits-piper-en_US-libritts_r-medium/tokens.txt ./
16+
mv vits-piper-en_US-libritts_r-medium/espeak-ng-data ./
17+
rm -rf vits-piper-en_US-libritts_r-medium
18+
```
19+
20+
You should have the following files in `assets` before you can run
21+
`build-wasm-simd.sh`
22+
23+
```
24+
assets fangjun$ tree -L 1
25+
.
26+
├── README.md
27+
├── espeak-ng-data
28+
├── mode.onnx
29+
└── tokens.txt
30+
31+
1 directory, 3 files
32+
```

wasm/sherpa-onnx-wasm-main.cc

+12-1
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,15 @@
1212
extern "C" {
1313

1414
static_assert(sizeof(SherpaOnnxOfflineTtsVitsModelConfig) == 7 * 4, "");
15+
static_assert(sizeof(SherpaOnnxOfflineTtsModelConfig) ==
16+
sizeof(SherpaOnnxOfflineTtsVitsModelConfig) + 3 * 4,
17+
"");
18+
static_assert(sizeof(SherpaOnnxOfflineTtsConfig) ==
19+
sizeof(SherpaOnnxOfflineTtsModelConfig) + 2 * 4,
20+
"");
1521

16-
void MyPrint(SherpaOnnxOfflineTtsModelConfig *tts_model_config) {
22+
void MyPrint(SherpaOnnxOfflineTtsConfig *tts_config) {
23+
auto tts_model_config = &tts_config->model;
1724
auto vits_model_config = &tts_model_config->vits;
1825
fprintf(stdout, "----------vits model config----------\n");
1926
fprintf(stdout, "model: %s\n", vits_model_config->model);
@@ -28,6 +35,10 @@ void MyPrint(SherpaOnnxOfflineTtsModelConfig *tts_model_config) {
2835
fprintf(stdout, "num threads: %d\n", tts_model_config->num_threads);
2936
fprintf(stdout, "debug: %d\n", tts_model_config->debug);
3037
fprintf(stdout, "provider: %s\n", tts_model_config->provider);
38+
39+
fprintf(stdout, "----------tts config----------\n");
40+
fprintf(stdout, "rule_fsts: %s\n", tts_config->rule_fsts);
41+
fprintf(stdout, "max num sentences: %d\n", tts_config->max_num_sentences);
3142
}
3243

3344
void CopyHeap(const char *src, int32_t num_bytes, char *dst) {

wasm/sherpa-onnx.js

+40-4
Original file line numberDiff line numberDiff line change
@@ -87,23 +87,59 @@ function initSherpaOnnxOfflineTtsModelConfig(config) {
8787
}
8888
}
8989

90+
function initSherpaOnnxOfflineTtsConfig(config) {
91+
let modelConfig =
92+
initSherpaOnnxOfflineTtsModelConfig(config.offlineTtsModelConfig);
93+
let len = modelConfig.len + 2 * 4;
94+
let ptr = _malloc(len);
95+
96+
let offset = 0;
97+
Module._CopyHeap(modelConfig.ptr, modelConfig.len, ptr + offset);
98+
offset += modelConfig.len;
99+
100+
let ruleFstsLen = lengthBytesUTF8(config.ruleFsts) + 1;
101+
let buffer = _malloc(ruleFstsLen);
102+
stringToUTF8(config.ruleFsts, buffer, ruleFstsLen);
103+
Module.setValue(ptr + offset, buffer, 'i8*');
104+
offset += 4;
105+
106+
Module.setValue(ptr + offset, config.maxNumSentences, 'i32');
107+
108+
return {
109+
buffer: buffer, ptr: ptr, len: len, config: modelConfig,
110+
}
111+
}
112+
90113
function initSherpaOnnxOfflineTts() {
91114
let offlineTtsVitsModelConfig = {
92115
model: './model.onnx',
93-
lexicon: './lexicon.txt',
116+
lexicon: '',
94117
tokens: './tokens.txt',
95118
dataDir: './espeak-ng-data',
96119
noiseScale: 0.667,
97120
noiseScaleW: 0.8,
98121
lengthScale: 1.0,
99122
};
100-
let offlineTtsModelConfig = initSherpaOnnxOfflineTtsModelConfig({
123+
let offlineTtsModelConfig = {
101124
offlineTtsVitsModelConfig: offlineTtsVitsModelConfig,
102125
numThreads: 1,
103126
debug: 1,
104127
provider: 'cpu',
105-
})
128+
};
129+
let offlineTtsConfigObj = {
130+
offlineTtsModelConfig: offlineTtsModelConfig,
131+
ruleFsts: '',
132+
maxNumSentences: 1,
133+
}
134+
135+
let offlineTtsConfig = initSherpaOnnxOfflineTtsConfig(offlineTtsConfigObj)
136+
106137
console.log(offlineTtsVitsModelConfig)
107138
console.log(offlineTtsModelConfig)
108-
Module._MyPrint(offlineTtsModelConfig.ptr);
139+
console.log(offlineTtsConfigObj)
140+
Module._MyPrint(offlineTtsConfig.ptr);
141+
142+
let handle = Module._SherpaOnnxCreateOfflineTts(offlineTtsConfig.ptr);
143+
freeConfig(offlineTtsConfig);
144+
console.log(handle);
109145
}

0 commit comments

Comments
 (0)