Skip to content

Commit 6686c7d

Browse files
authored
Add dict_dir arg to c api to support Chinese TTS models using jieba (#809)
1 parent 83cd533 commit 6686c7d

File tree

12 files changed

+48
-6
lines changed

12 files changed

+48
-6
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
22
project(sherpa-onnx)
33

4-
set(SHERPA_ONNX_VERSION "1.9.22")
4+
set(SHERPA_ONNX_VERSION "1.9.23")
55

66
# Disable warning about
77
#

mfc-examples/NonStreamingTextToSpeech/NonStreamingTextToSpeechDlg.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,19 @@ void CNonStreamingTextToSpeechDlg::Init() {
470470
} else if (Exists("./lexicon.txt")) {
471471
config.model.vits.lexicon = "./lexicon.txt";
472472
}
473+
474+
if (Exists("./dict/jieba.dict.utf8")) {
475+
config.model.vits.dict_dir = "./dict";
476+
}
477+
478+
if (Exists("./phone.fst") && Exists("./date.fst") && Exists("./number.fst")) {
479+
config.rule_fsts = "./phone.fst,./date.fst,number.fst";
480+
}
481+
482+
if (Exists("./rule.far")) {
483+
config.rule_fars = "./rule.far";
484+
}
485+
473486
config.model.vits.tokens = "./tokens.txt";
474487

475488
tts_ = SherpaOnnxCreateOfflineTts(&config);

nodejs-examples/test-offline-tts-en.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ function createOfflineTts() {
88
lexicon: '',
99
tokens: './vits-piper-en_US-amy-low/tokens.txt',
1010
dataDir: './vits-piper-en_US-amy-low/espeak-ng-data',
11+
dictDir: '',
1112
noiseScale: 0.667,
1213
noiseScaleW: 0.8,
1314
lengthScale: 1.0,

nodejs-examples/test-offline-tts-zh.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ function createOfflineTts() {
88
lexicon: './vits-icefall-zh-aishell3/lexicon.txt',
99
tokens: './vits-icefall-zh-aishell3/tokens.txt',
1010
dataDir: '',
11+
dictDir: '',
1112
noiseScale: 0.667,
1213
noiseScaleW: 0.8,
1314
lengthScale: 1.0,

scripts/dotnet/offline.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public OfflineTtsVitsModelConfig()
2323
NoiseScale = 0.667F;
2424
NoiseScaleW = 0.8F;
2525
LengthScale = 1.0F;
26+
27+
DictDir = "";
2628
}
2729
[MarshalAs(UnmanagedType.LPStr)]
2830
public string Model;
@@ -39,6 +41,9 @@ public OfflineTtsVitsModelConfig()
3941
public float NoiseScale;
4042
public float NoiseScaleW;
4143
public float LengthScale;
44+
45+
[MarshalAs(UnmanagedType.LPStr)]
46+
public string DictDir;
4247
}
4348

4449
[StructLayout(LayoutKind.Sequential)]

scripts/go/sherpa_onnx.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,10 +532,11 @@ type OfflineTtsVitsModelConfig struct {
532532
Model string // Path to the VITS onnx model
533533
Lexicon string // Path to lexicon.txt
534534
Tokens string // Path to tokens.txt
535-
DataDir string // Path to tokens.txt
535+
DataDir string // Path to espeak-ng-data directory
536536
NoiseScale float32 // noise scale for vits models. Please use 0.667 in general
537537
NoiseScaleW float32 // noise scale for vits models. Please use 0.8 in general
538538
LengthScale float32 // Please use 1.0 in general. Smaller -> Faster speech speed. Larger -> Slower speech speed
539+
DictDir string // Path to dict directory for jieba (used only in Chinese tts)
539540
}
540541

541542
type OfflineTtsModelConfig struct {
@@ -605,6 +606,9 @@ func NewOfflineTts(config *OfflineTtsConfig) *OfflineTts {
605606
c.model.vits.noise_scale_w = C.float(config.Model.Vits.NoiseScaleW)
606607
c.model.vits.length_scale = C.float(config.Model.Vits.LengthScale)
607608

609+
c.model.vits.dict_dir = C.CString(config.Model.Vits.DictDir)
610+
defer C.free(unsafe.Pointer(c.model.vits.dict_dir))
611+
608612
c.model.num_threads = C.int(config.Model.NumThreads)
609613
c.model.debug = C.int(config.Model.Debug)
610614

sherpa-onnx/c-api/c-api.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -818,6 +818,8 @@ SherpaOnnxOfflineTts *SherpaOnnxCreateOfflineTts(
818818
SHERPA_ONNX_OR(config->model.vits.noise_scale_w, 0.8);
819819
tts_config.model.vits.length_scale =
820820
SHERPA_ONNX_OR(config->model.vits.length_scale, 1.0);
821+
tts_config.model.vits.dict_dir =
822+
SHERPA_ONNX_OR(config->model.vits.dict_dir, "");
821823

822824
tts_config.model.num_threads = SHERPA_ONNX_OR(config->model.num_threads, 1);
823825
tts_config.model.debug = config->model.debug;

sherpa-onnx/c-api/c-api.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,7 @@ SHERPA_ONNX_API typedef struct SherpaOnnxOfflineTtsVitsModelConfig {
772772
float noise_scale;
773773
float noise_scale_w;
774774
float length_scale; // < 1, faster in speed; > 1, slower in speed
775+
const char *dict_dir;
775776
} SherpaOnnxOfflineTtsVitsModelConfig;
776777

777778
SHERPA_ONNX_API typedef struct SherpaOnnxOfflineTtsModelConfig {

swift-api-examples/SherpaOnnx.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -623,7 +623,8 @@ func sherpaOnnxOfflineTtsVitsModelConfig(
623623
dataDir: String = "",
624624
noiseScale: Float = 0.667,
625625
noiseScaleW: Float = 0.8,
626-
lengthScale: Float = 1.0
626+
lengthScale: Float = 1.0,
627+
dictDir: String = ""
627628
) -> SherpaOnnxOfflineTtsVitsModelConfig {
628629
return SherpaOnnxOfflineTtsVitsModelConfig(
629630
model: toCPointer(model),
@@ -632,7 +633,8 @@ func sherpaOnnxOfflineTtsVitsModelConfig(
632633
data_dir: toCPointer(dataDir),
633634
noise_scale: noiseScale,
634635
noise_scale_w: noiseScaleW,
635-
length_scale: lengthScale)
636+
length_scale: lengthScale,
637+
dict_dir: toCPointer(dictDir))
636638
}
637639

638640
func sherpaOnnxOfflineTtsModelConfig(

wasm/nodejs/sherpa-onnx-wasm-nodejs.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ void PrintOfflineTtsConfig(SherpaOnnxOfflineTtsConfig *tts_config) {
4343
fprintf(stdout, "noise scale: %.3f\n", vits_model_config->noise_scale);
4444
fprintf(stdout, "noise scale w: %.3f\n", vits_model_config->noise_scale_w);
4545
fprintf(stdout, "length scale: %.3f\n", vits_model_config->length_scale);
46+
fprintf(stdout, "dict_dir: %s\n", vits_model_config->dict_dir);
4647

4748
fprintf(stdout, "----------tts model config----------\n");
4849
fprintf(stdout, "num threads: %d\n", tts_model_config->num_threads);

wasm/tts/sherpa-onnx-tts.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@ function initSherpaOnnxOfflineTtsVitsModelConfig(config, Module) {
1818
const tokensLen = Module.lengthBytesUTF8(config.tokens) + 1;
1919
const dataDirLen = Module.lengthBytesUTF8(config.dataDir) + 1;
2020

21-
const n = modelLen + lexiconLen + tokensLen + dataDirLen;
21+
if (!('dictDir' in config)) {
22+
config.dictDir = ''
23+
}
24+
const dictDirLen = Module.lengthBytesUTF8(config.dictDir) + 1;
25+
26+
const n = modelLen + lexiconLen + tokensLen + dataDirLen + dictDirLen;
2227

2328
const buffer = Module._malloc(n);
2429

@@ -38,6 +43,9 @@ function initSherpaOnnxOfflineTtsVitsModelConfig(config, Module) {
3843
Module.stringToUTF8(config.dataDir, buffer + offset, dataDirLen);
3944
offset += dataDirLen;
4045

46+
Module.stringToUTF8(config.dictDir, buffer + offset, dictDirLen);
47+
offset += dictDirLen;
48+
4149
offset = 0;
4250
Module.setValue(ptr, buffer + offset, 'i8*');
4351
offset += modelLen;
@@ -54,6 +62,8 @@ function initSherpaOnnxOfflineTtsVitsModelConfig(config, Module) {
5462
Module.setValue(ptr + 16, config.noiseScale, 'float');
5563
Module.setValue(ptr + 20, config.noiseScaleW, 'float');
5664
Module.setValue(ptr + 24, config.lengthScale, 'float');
65+
Module.setValue(ptr + 28, buffer + offset, 'i8*');
66+
offset += dictDirLen;
5767

5868
return {
5969
buffer: buffer, ptr: ptr, len: len,
@@ -184,6 +194,7 @@ function createOfflineTts(Module, myConfig) {
184194
lexicon: '',
185195
tokens: './tokens.txt',
186196
dataDir: './espeak-ng-data',
197+
dictDir: '',
187198
noiseScale: 0.667,
188199
noiseScaleW: 0.8,
189200
lengthScale: 1.0,

wasm/tts/sherpa-onnx-wasm-main-tts.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
extern "C" {
1515

16-
static_assert(sizeof(SherpaOnnxOfflineTtsVitsModelConfig) == 7 * 4, "");
16+
static_assert(sizeof(SherpaOnnxOfflineTtsVitsModelConfig) == 8 * 4, "");
1717
static_assert(sizeof(SherpaOnnxOfflineTtsModelConfig) ==
1818
sizeof(SherpaOnnxOfflineTtsVitsModelConfig) + 3 * 4,
1919
"");
@@ -32,6 +32,7 @@ void MyPrint(SherpaOnnxOfflineTtsConfig *tts_config) {
3232
fprintf(stdout, "noise scale: %.3f\n", vits_model_config->noise_scale);
3333
fprintf(stdout, "noise scale w: %.3f\n", vits_model_config->noise_scale_w);
3434
fprintf(stdout, "length scale: %.3f\n", vits_model_config->length_scale);
35+
fprintf(stdout, "dict_dir: %s\n", vits_model_config->dict_dir);
3536

3637
fprintf(stdout, "----------tts model config----------\n");
3738
fprintf(stdout, "num threads: %d\n", tts_model_config->num_threads);

0 commit comments

Comments
 (0)