C# 重复文本到语音合成

Posted

技术标签:

【中文标题】C# 重复文本到语音合成【英文标题】:C# repeating text to speech synthesis 【发布时间】:2020-11-24 14:40:55 【问题描述】:

所以我正在尝试编写一个文本到语音的程序,它会逐渐变得更快,在句子之间留下更少的间隙,并最终过度分层并同时运行多个命令,这样它就变成了一堆杂音。它目前是一个控制台应用程序,我有相关的参考资料

我如何调整它以将每个语音命令作为自己的实例运行的任何想法。我是否必须重新学习如何使用多线程才能使其工作?

任何帮助都会很棒,在它循环的那一刻(迭代次数不是太重要),我试图在每个循环之后减少停顿,但无法让一个说话命令覆盖前面的内容。

for (int i = 0; i < 100; i++)
            
                if (Console.KeyAvailable == true)
                
                    break;
                
                else
                
                    if (i == 0)
                    
                        string commandLine2 = "Hello darkness my old friend";
                        SpeechSynthesizer s = new SpeechSynthesizer();
                        s.SelectVoiceByHints(VoiceGender.Female, VoiceAge.Child);
                        s.Speak(commandLine2);
                        commandLine2 = "Its been a while where should we begin";
                        //Thread.Sleep(1000);
                        s.Speak(commandLine2);
                    
                    else
                    
                        string commandLine2 = "Hello darkness my old friend";
                    SpeechSynthesizer s = new SpeechSynthesizer();
                    s.SelectVoiceByHints(VoiceGender.Female, VoiceAge.Child);
                    s.Speak(commandLine2);
                    commandLine2 = "Its been a while where should we begin";
                    //Thread.Sleep(1000 / i);
                    s.Speak(commandLine2);
                

            
        

【问题讨论】:

所以重叠是目标,还是您要修复的错误?它现在的行为如何,以相等的间隔说话? 你在用docs.microsoft.com/en-us/dotnet/api/…吗? 重叠是目标,目前只是说完一句话后才说要造成重叠。是的,使用那个类,不知道其他人 【参考方案1】:

最后我只是使用了多线程。这一切都涌向我

 for (int i = 1; i < 100; i++)
        
            Thread t1 = new Thread(mySpeach);
            t1.Name = "Thread1";
            t1.Start();
            Thread.Sleep(2000 / i);
            if (Console.KeyAvailable == true)
            
                t1.Abort();
                break;
            
        

//other methods were here


    public static void typing()
        
        string a = "Hello darkness my old friend\nIts been a while where should we begin";
        for (int i = 0; i < a.Length; i++)
        
            Random rnd = new Random();
            Console.Write(a[i]);
            if (Console.KeyAvailable == true)
            
                break;
            
            Thread.Sleep(rnd.Next(50, 100));
        
        Console.WriteLine("");
    

    public static void mySpeach()
    
        string commandLine2 = "Hello darkness my old friend";
        Thread t2 = new Thread(typing);

        t2.Name = "Thread2";

        t2.Start();
        SpeechSynthesizer s = new SpeechSynthesizer();
        s.SelectVoiceByHints(VoiceGender.Female, VoiceAge.Child);
        s.Speak(commandLine2);
        commandLine2 = "Its been a while where should we begin";
        if (Console.KeyAvailable == true)
        
            return;
        
        s.Speak(commandLine2);
        Thread.Sleep(1000);
    

【讨论】:

以上是关于C# 重复文本到语音合成的主要内容,如果未能解决你的问题,请参考以下文章

20.5 语音合成(百度2016年2月29日发布的tts引擎)

微信小程序之文本合成语音朗读及长文本分段播放处理

python腾讯语音合成

基于C# 百度AI和科大汛飞语音合成SDK

如何下载使用语音合成将文本转换为语音的音频结果?

文本转语音通过语音合成标记语言(SSML)改进合成 知识点详解