mirror of
https://github.com/k2-fsa/sherpa-onnx.git
synced 2026-11-11 13:31:07 +08:00
This pull request enhances the Text-to-Speech capabilities by integrating the Supertonic TTS model into the existing Java and Kotlin APIs. It provides developers with new tools and clear examples to generate speech from text using this model, expanding the range of available TTS options and simplifying their adoption within Java and Kotlin projects.
65 lines
2.5 KiB
Java
65 lines
2.5 KiB
Java
// Copyright 2025 Xiaomi Corporation
|
|
|
|
// This file shows how to use a matcha Chinese TTS model
|
|
// to convert text to speech
|
|
import com.k2fsa.sherpa.onnx.*;
|
|
|
|
public class NonStreamingTtsMatchaZh {
|
|
public static void main(String[] args) {
|
|
// please visit
|
|
// https://k2-fsa.github.io/sherpa/onnx/tts/pretrained_models/matcha.html#matcha-icefall-zh-baker-chinese-1-female-speaker
|
|
// to download model files
|
|
String acousticModel = "./matcha-icefall-zh-baker/model-steps-3.onnx";
|
|
String vocoder = "./vocos-22khz-univ.onnx";
|
|
String tokens = "./matcha-icefall-zh-baker/tokens.txt";
|
|
String lexicon = "./matcha-icefall-zh-baker/lexicon.txt";
|
|
String ruleFsts =
|
|
"./matcha-icefall-zh-baker/phone.fst,./matcha-icefall-zh-baker/date.fst,./matcha-icefall-zh-baker/number.fst";
|
|
String text =
|
|
"某某银行的副行长和一些行政领导表示,他们去过长江"
|
|
+ "和长白山; 经济不断增长。"
|
|
+ "2024年12月31号,拨打110或者18920240511。"
|
|
+ "123456块钱。";
|
|
|
|
OfflineTtsMatchaModelConfig matchaModelConfig =
|
|
OfflineTtsMatchaModelConfig.builder()
|
|
.setAcousticModel(acousticModel)
|
|
.setVocoder(vocoder)
|
|
.setTokens(tokens)
|
|
.setLexicon(lexicon)
|
|
.build();
|
|
|
|
OfflineTtsModelConfig modelConfig =
|
|
OfflineTtsModelConfig.builder()
|
|
.setMatcha(matchaModelConfig)
|
|
.setNumThreads(1)
|
|
.setDebug(true)
|
|
.build();
|
|
|
|
OfflineTtsConfig config =
|
|
OfflineTtsConfig.builder().setModel(modelConfig).setRuleFsts(ruleFsts).build();
|
|
OfflineTts tts = new OfflineTts(config);
|
|
|
|
int sid = 0;
|
|
float speed = 1.0f;
|
|
long start = System.currentTimeMillis();
|
|
GeneratedAudio audio = tts.generate(text, sid, speed);
|
|
long stop = System.currentTimeMillis();
|
|
|
|
float timeElapsedSeconds = (stop - start) / 1000.0f;
|
|
|
|
float audioDuration = audio.getSamples().length / (float) audio.getSampleRate();
|
|
float realTimeFactor = timeElapsedSeconds / audioDuration;
|
|
|
|
String waveFilename = "tts-matcha-zh.wav";
|
|
audio.save(waveFilename);
|
|
System.out.printf("-- elapsed : %.3f seconds\n", timeElapsedSeconds);
|
|
System.out.printf("-- audio duration: %.3f seconds\n", audioDuration);
|
|
System.out.printf("-- real-time factor (RTF): %.3f\n", realTimeFactor);
|
|
System.out.printf("-- text: %s\n", text);
|
|
System.out.printf("-- Saved to %s\n", waveFilename);
|
|
|
|
tts.release();
|
|
}
|
|
}
|