Skip to content

Commit 926152b

Browse files
authored
Refactor VITS to use the new Generate API (#3365)
1 parent e03a13f commit 926152b

33 files changed

Lines changed: 332 additions & 190 deletions

c-api-examples/offline-tts-c-api.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,13 @@ int32_t main(int32_t argc, char *argv[]) {
231231

232232
const SherpaOnnxOfflineTts *tts = SherpaOnnxCreateOfflineTts(&config);
233233

234+
SherpaOnnxGenerationConfig cfg = {0};
235+
cfg.silence_scale = 0.2f;
236+
cfg.sid = sid;
237+
cfg.speed = 1.0f;
238+
234239
const SherpaOnnxGeneratedAudio *audio =
235-
SherpaOnnxOfflineTtsGenerate(tts, text, sid, 1.0);
240+
SherpaOnnxOfflineTtsGenerateWithConfig(tts, text, &cfg, NULL, NULL);
236241

237242
SherpaOnnxWriteWave(audio->samples, audio->n, audio->sample_rate, filename);
238243

dart-api-examples/tts/bin/coqui.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ void main(List<String> arguments) async {
4242
final vits = sherpa_onnx.OfflineTtsVitsModelConfig(
4343
model: model,
4444
tokens: tokens,
45-
lengthScale: 1 / speed,
4645
);
4746

4847
final modelConfig = sherpa_onnx.OfflineTtsModelConfig(
@@ -56,7 +55,12 @@ void main(List<String> arguments) async {
5655
);
5756

5857
final tts = sherpa_onnx.OfflineTts(config);
59-
final audio = tts.generate(text: text, sid: sid, speed: speed);
58+
final genConfig = sherpa_onnx.OfflineTtsGenerationConfig(
59+
sid: sid,
60+
speed: speed,
61+
silenceScale: 0.2,
62+
);
63+
final audio = tts.generateWithConfig(text: text, config: genConfig);
6064
tts.free();
6165

6266
sherpa_onnx.writeWave(

dart-api-examples/tts/bin/piper.dart

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ void main(List<String> arguments) async {
4747
model: model,
4848
tokens: tokens,
4949
dataDir: dataDir,
50-
lengthScale: 1 / speed,
5150
);
5251

5352
final modelConfig = sherpa_onnx.OfflineTtsModelConfig(
@@ -61,10 +60,14 @@ void main(List<String> arguments) async {
6160
);
6261

6362
final tts = sherpa_onnx.OfflineTts(config);
64-
final audio = tts.generateWithCallback(
63+
final genConfig = sherpa_onnx.OfflineTtsGenerationConfig(
64+
sid: sid,
65+
speed: speed,
66+
silenceScale: 0.2,
67+
);
68+
final audio = tts.generateWithConfig(
6569
text: text,
66-
sid: sid,
67-
speed: speed,
70+
config: genConfig,
6871
callback: (Float32List samples) {
6972
print('${samples.length} samples received');
7073
// You can play samples in a separate thread/isolate

dart-api-examples/tts/bin/vits-zh.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ void main(List<String> arguments) async {
5050
model: model,
5151
lexicon: lexicon,
5252
tokens: tokens,
53-
lengthScale: 1 / speed,
5453
);
5554

5655
final modelConfig = sherpa_onnx.OfflineTtsModelConfig(
@@ -66,7 +65,12 @@ void main(List<String> arguments) async {
6665
);
6766

6867
final tts = sherpa_onnx.OfflineTts(config);
69-
final audio = tts.generate(text: text, sid: sid, speed: speed);
68+
final genConfig = sherpa_onnx.OfflineTtsGenerationConfig(
69+
sid: sid,
70+
speed: speed,
71+
silenceScale: 0.2,
72+
);
73+
final audio = tts.generateWithConfig(text: text, config: genConfig);
7074
tts.free();
7175

7276
sherpa_onnx.writeWave(

dotnet-examples/offline-tts-play/Program.cs

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -185,13 +185,17 @@ private static void Run(Options options)
185185
config.Model.Debug = options.Debug;
186186
config.Model.Provider = "cpu";
187187
config.RuleFsts = options.RuleFsts;
188-
config.MaxNumSentences = options.MaxNumSentences;
189-
190-
var tts = new OfflineTts(config);
191-
var speed = 1.0f / options.LengthScale;
192-
var sid = options.SpeakerId;
193-
194-
Console.WriteLine(PortAudio.VersionInfo.versionText);
188+
config.MaxNumSentences = options.MaxNumSentences;
189+
190+
var tts = new OfflineTts(config);
191+
var speed = 1.0f / options.LengthScale;
192+
var sid = options.SpeakerId;
193+
OfflineTtsGenerationConfig genConfig = new OfflineTtsGenerationConfig();
194+
genConfig.Sid = sid;
195+
genConfig.Speed = speed;
196+
genConfig.SilenceScale = 0.2f;
197+
198+
Console.WriteLine(PortAudio.VersionInfo.versionText);
195199
PortAudio.Initialize();
196200
Console.WriteLine($"Number of devices: {PortAudio.DeviceCount}");
197201

@@ -224,11 +228,11 @@ private static void Run(Options options)
224228
// https://learn.microsoft.com/en-us/dotnet/standard/collections/thread-safe/blockingcollection-overview
225229
var dataItems = new BlockingCollection<float[]>();
226230

227-
var myCallback = (IntPtr samples, int n) =>
228-
{
229-
float[] data = new float[n];
230-
231-
Marshal.Copy(samples, data, 0, n);
231+
var myCallback = (IntPtr samples, int n, float progress, IntPtr arg) =>
232+
{
233+
float[] data = new float[n];
234+
235+
Marshal.Copy(samples, data, 0, n);
232236

233237
dataItems.Add(data);
234238

@@ -314,10 +318,10 @@ IntPtr userData
314318

315319
stream.Start();
316320

317-
var callback = new OfflineTtsCallback(myCallback);
318-
319-
var audio = tts.GenerateWithCallback(options.Text, speed, sid, callback);
320-
var ok = audio.SaveToWaveFile(options.OutputFilename);
321+
var callback = new OfflineTtsCallbackProgressWithArg(myCallback);
322+
323+
var audio = tts.GenerateWithConfig(options.Text, genConfig, callback);
324+
var ok = audio.SaveToWaveFile(options.OutputFilename);
321325

322326
if (ok)
323327
{

dotnet-examples/offline-tts/Program.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -179,13 +179,17 @@ private static void Run(Options options)
179179
config.Model.Provider = "cpu";
180180
config.RuleFsts = options.RuleFsts;
181181
config.RuleFars = options.RuleFars;
182-
config.MaxNumSentences = options.MaxNumSentences;
183-
184-
var tts = new OfflineTts(config);
185-
var speed = 1.0f / options.LengthScale;
186-
var sid = options.SpeakerId;
187-
var audio = tts.Generate(options.Text, speed, sid);
188-
var ok = audio.SaveToWaveFile(options.OutputFilename);
182+
config.MaxNumSentences = options.MaxNumSentences;
183+
184+
var tts = new OfflineTts(config);
185+
var speed = 1.0f / options.LengthScale;
186+
var sid = options.SpeakerId;
187+
OfflineTtsGenerationConfig genConfig = new OfflineTtsGenerationConfig();
188+
genConfig.Sid = sid;
189+
genConfig.Speed = speed;
190+
genConfig.SilenceScale = 0.2f;
191+
var audio = tts.GenerateWithConfig(options.Text, genConfig, null);
192+
var ok = audio.SaveToWaveFile(options.OutputFilename);
189193

190194
if (ok)
191195
{

flutter-examples/tts/lib/isolate_tts.dart

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,13 @@ class IsolateTts {
166166
_PortModel _v = msg;
167167
final stopwatch = Stopwatch();
168168
stopwatch.start();
169-
final audio = _tts.generate(
170-
text: _v.data['text'],
171-
sid: _v.data['sid'],
172-
speed: _v.data['speed']);
169+
final genConfig = sherpa_onnx.OfflineTtsGenerationConfig(
170+
sid: _v.data['sid'],
171+
speed: _v.data['speed'],
172+
silenceScale: 0.2,
173+
);
174+
final audio =
175+
_tts.generateWithConfig(text: _v.data['text'], config: genConfig);
173176
final suffix =
174177
'-sid-${_v.data['sid']}-speed-${_v.data['speed'].toStringAsPrecision(2)}';
175178
final filename = await generateWaveFilename(suffix);

flutter-examples/tts/lib/tts.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,13 @@ class _TtsScreenState extends State<TtsScreen> {
143143

144144
final stopwatch = Stopwatch();
145145
stopwatch.start();
146-
final audio = _tts!.generate(text: text, sid: sid, speed: _speed);
146+
final genConfig = sherpa_onnx.OfflineTtsGenerationConfig(
147+
sid: sid,
148+
speed: _speed,
149+
silenceScale: 0.2,
150+
);
151+
final audio =
152+
_tts!.generateWithConfig(text: text, config: genConfig);
147153
final suffix = '-sid-$sid-speed-${_speed.toStringAsPrecision(2)}';
148154
final filename = await generateWaveFilename(suffix);
149155

go-api-examples/non-streaming-tts/main.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,12 @@ func main() {
7575
log.Println("Model created!")
7676

7777
log.Println("Start generating!")
78-
audio := tts.Generate(text, sid, float32(math.Max(float64(speed), 1e-6)))
78+
cfg := sherpa.GenerationConfig{
79+
SilenceScale: 0.2,
80+
Speed: float32(math.Max(float64(speed), 1e-6)),
81+
Sid: sid,
82+
}
83+
audio := tts.GenerateWithConfig(text, &cfg, nil)
7984

8085
log.Println("Done!")
8186
if ok := audio.Save(filename); !ok {

go-api-examples/offline-tts-play/main.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,14 +179,18 @@ func main() {
179179
var generated *sherpa.GeneratedAudio
180180

181181
start := time.Now()
182+
cfg := sherpa.GenerationConfig{
183+
SilenceScale: 0.2,
184+
Speed: 1.0,
185+
Sid: sid,
186+
}
182187

183188
go func() {
184189
defer pcmBuf.Finish()
185190

186-
generated = tts.GenerateWithProgressCallback(
191+
generated = tts.GenerateWithConfig(
187192
text,
188-
sid,
189-
1.0,
193+
&cfg,
190194
func(samples []float32, progress float32) bool {
191195
log.Printf("Progress: %.1f%%", progress*100)
192196

0 commit comments

Comments
 (0)