NonStreamingTts.ets
2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import {
createOfflineTts,
getOfflineTtsNumSpeakers,
getOfflineTtsSampleRate,
offlineTtsGenerate,
offlineTtsGenerateAsync,
} from 'libsherpa_onnx.so';
export class OfflineTtsVitsModelConfig {
public model: string = '';
public lexicon: string = '';
public tokens: string = '';
public dataDir: string = '';
public dictDir: String = '';
public noiseScale: number = 0.667;
public noiseScaleW: number = 0.8;
public lengthScale: number = 1.0;
}
export class OfflineTtsMatchaModelConfig {
public acousticModel: string = '';
public vocoder: string = '';
public lexicon: string = '';
public tokens: string = '';
public dataDir: string = '';
public dictDir: String = '';
public noiseScale: number = 0.667;
public lengthScale: number = 1.0;
}
export class OfflineTtsModelConfig {
public vits: OfflineTtsVitsModelConfig = new OfflineTtsVitsModelConfig();
public matcha: OfflineTtsMatchaModelConfig = new OfflineTtsMatchaModelConfig();
public numThreads: number = 1;
public debug: boolean = false;
public provider: string = 'cpu';
}
export class OfflineTtsConfig {
public model: OfflineTtsModelConfig = new OfflineTtsModelConfig();
public ruleFsts: string = '';
public ruleFars: string = '';
public maxNumSentences: number = 1;
}
export class TtsOutput {
public samples: Float32Array = new Float32Array(0);
public sampleRate: number = 0;
}
interface TtsCallbackData {
samples: Float32Array;
progress: number;
}
export class TtsInput {
public text: string = '';
public sid: number = 0;
public speed: number = 1.0;
public callback?: (data: TtsCallbackData) => number;
}
export class OfflineTts {
public config: OfflineTtsConfig;
public numSpeakers: number;
public sampleRate: number;
private handle: object;
constructor(config: OfflineTtsConfig, mgr?: object) {
this.handle = createOfflineTts(config, mgr);
this.config = config;
this.numSpeakers = getOfflineTtsNumSpeakers(this.handle);
this.sampleRate = getOfflineTtsSampleRate(this.handle);
}
/*
input obj: {text: "xxxx", sid: 0, speed: 1.0}
where text is a string, sid is a int32, speed is a float
return an object {samples: Float32Array, sampleRate: <a number>}
*/
generate(input: TtsInput): TtsOutput {
return offlineTtsGenerate(this.handle, input) as TtsOutput;
}
generateAsync(input: TtsInput): Promise<TtsOutput> {
return offlineTtsGenerateAsync(this.handle, input);
}
}