63 lines
1.7 KiB
C#
63 lines
1.7 KiB
C#
using System.Text;
|
|
using TTS;
|
|
using TTS.Struct;
|
|
|
|
internal class Program
|
|
{
|
|
private static void Main(string[] args)
|
|
{
|
|
SherpaOnnxOfflineTtsConfig sherpaOnnxOfflineTtsConfig = new SherpaOnnxOfflineTtsConfig();
|
|
sherpaOnnxOfflineTtsConfig.model = new SherpaOnnxOfflineTtsModelConfig
|
|
{
|
|
debug = 0,
|
|
num_threads = 4,
|
|
provider = "cpu",
|
|
vits = new SherpaOnnxOfflineTtsVitsModelConfig
|
|
{
|
|
lexicon = "vits-zh-aishell3/lexicon.txt",
|
|
model = "vits-zh-aishell3/vits-aishell3.onnx",
|
|
tokens = "vits-zh-aishell3/tokens.txt",
|
|
|
|
noise_scale = 0.667f,
|
|
noise_scale_w = 0.8f,
|
|
length_scale = 1,
|
|
},
|
|
|
|
};
|
|
|
|
TTSCore i = new TTSCore(sherpaOnnxOfflineTtsConfig);
|
|
|
|
Console.InputEncoding = Encoding.Unicode;
|
|
Console.OutputEncoding = Encoding.UTF8;
|
|
|
|
while (true)
|
|
{
|
|
var str = Console.ReadLine();
|
|
var audioResult = i.ToSpeech(str, 40, 1f);
|
|
|
|
// audioResult.WriteWAVFile("123.wav");保存本地
|
|
|
|
audioResult.Play();
|
|
|
|
int lastIndex = -1;
|
|
while (audioResult.PlayProgress <= 1f)
|
|
{
|
|
int index = (int)(audioResult.PlayProgress * (str.Length - 1));
|
|
if (lastIndex != index)
|
|
{
|
|
Console.Write(str[index]);
|
|
lastIndex = index;
|
|
}
|
|
Thread.Sleep(100);
|
|
}
|
|
|
|
if (++lastIndex < str.Length)
|
|
Console.Write(str[lastIndex]);
|
|
|
|
Console.WriteLine();
|
|
|
|
}
|
|
|
|
}
|
|
}
|