免费使用Windows10隐藏的三个发音人库,改善语音合成效果

目录

需求

解决思路

具体实现

修改注册表

读取系统自带发音人

程序调用实现TTS


需求

最近需要在程序中实现语音合成功能,Windows已经提供了两个发音人库,但转换效果不甚理想。

解决思路

实际上微软在Windows10及后续版本(windows11)中已经提供了其他发音人库,但需要添加相应访问入口才行。

具体实现

需要修改注册表,手工建立三个发音人的键值,然后使用程序调用发音人进行TTS。

修改注册表

 新建一个文本文件,扩展名为.reg

内容如下:
 

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SPEECH\Voices\Tokens\MSTTS_V110_zhCN_KangkangM]
@="Microsoft Kangkang Mobile - Chinese (Simplified, PRC)"
"LangDataPath"="%windir%\\Speech_OneCore\\Engines\\TTS\\zh-CN\\MSTTSLoczhCN.dat"
"VoicePath"="%windir%\\Speech_OneCore\\Engines\\TTS\\zh-CN\\M2052Kangkang"
"804"="Microsoft Kangkang Mobile - Chinese (Simplified, PRC)"
"CLSID"="{179F3D56-1B0B-42B2-A962-59B7EF59FE1B}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SPEECH\Voices\Tokens\MSTTS_V110_zhCN_KangkangM\Attributes]
"Version"="11.0"
"Language"="804"
"Gender"="Male"
"Age"="Adult"
"DataVersion"="11.0.2013.1022"
"SharedPronunciation"=""
"Name"="Microsoft Kangkang Mobile"
"Vendor"="Microsoft"
"SampleText"="您已选择 %1 作为默认语音"


[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\SPEECH\Voices\Tokens\MSTTS_V110_zhCN_YaoyaoM]
@="Microsoft Yaoyao Mobile - Chinese (Simplified, PRC)"
"LangDataPath"="%windir%\\Speech_OneCore\\Engines\\TTS\\zh-CN\\MSTTSLoczhCN.dat"
"VoicePath"="%windir%\\Speech_OneCore\\Engines\\TTS\\zh-CN\\M2052Yaoyao"
"804"="Microsoft Yaoyao Mobile - Chinese (Simplified, PRC)"
"CLSID"="{179F3D56-1B0B-42B2-A962-59B7EF59FE1B}"

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\SPEECH\Voices\Tokens\MSTTS_V110_zhCN_YaoyaoM\Attributes]
"Version"="11.0"
"Language"="804"
"Gender"="Female"
"Age"="Adult"
"DataVersion"="11.0.2013.1022"
"SharedPronunciation"=""
"Name"="Microsoft Yaoyao Mobile"
"Vendor"="Microsoft"
"SampleText"="您已选择 %1 作为默认语音"


[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\SPEECH\Voices\Tokens\MSTTS_V110_zhCN_HongyuM]
@="Microsoft Cortana - China"
"804"="Microsoft Cortana - China"
"CLSID"="{179F3D56-1B0B-42B2-A962-59B7EF59FE1B}"
"LangDataPath"=hex(2):25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,00,5c,00,53,\
  00,70,00,65,00,65,00,63,00,68,00,5f,00,4f,00,6e,00,65,00,43,00,6f,00,72,00,\
  65,00,5c,00,45,00,6e,00,67,00,69,00,6e,00,65,00,73,00,5c,00,54,00,54,00,53,\
  00,5c,00,7a,00,68,00,2d,00,43,00,4e,00,5c,00,4d,00,53,00,54,00,54,00,53,00,\
  4c,00,6f,00,63,00,7a,00,68,00,43,00,4e,00,2e,00,64,00,61,00,74,00,00,00
"VoicePath"=hex(2):25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,00,5c,00,53,00,\
  70,00,65,00,65,00,63,00,68,00,5f,00,4f,00,6e,00,65,00,43,00,6f,00,72,00,65,\
  00,5c,00,45,00,6e,00,67,00,69,00,6e,00,65,00,73,00,5c,00,54,00,54,00,53,00,\
  5c,00,7a,00,68,00,2d,00,43,00,4e,00,5c,00,4d,00,32,00,30,00,35,00,32,00,48,\
  00,6f,00,6e,00,67,00,79,00,75,00,00,00

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\SPEECH\Voices\Tokens\MSTTS_V110_zhCN_HongyuM\Attributes]
"Age"="Adult"
"DataVersion"="11.0.2013.1022"
"Gender"="Female"
"Language"="804"
"Name"="Microsoft Hongyu Mobile"
"SharedPronunciation"=""
"Vendor"="Microsoft"
"Version"="11.0"

双击这个.reg文件,将上述内容加入注册表

读取系统自带发音人

在c#中获取Windows10自带的发音人

,后续程序可以使用下面代码进行遍历并填充至下拉列表框控件中:
 

// 引入命名空间,假设使用的是System.Speech  
using System.Speech.Synthesis;  
  
// 在某个方法或事件处理程序中  
using (SpeechSynthesizer synthesizer = new SpeechSynthesizer()) // 使用using语句确保资源被正确释放  
{  
    // 遍历系统中安装的所有语音  
    foreach (var voice in synthesizer.GetInstalledVoices())  
    {  
        // 获取当前语音的详细信息  
        var info = voice.VoiceInfo;  
          
        // 将语音的名称添加到comboBox1的项中,供用户选择  
        comboBox1.Items.Add(info.Name);  
    }  
}

程序调用实现TTS

        // 使用微软的TTS服务来朗读文本  
        private void SpeakWithMicrosoftTTS(string text)
        {
            // 使用SpeechSynthesizer类创建一个语音合成器的实例  
            using (var synthesizer = new SpeechSynthesizer())
            {
                // 设置输出设备为默认音频设备  
                synthesizer.SetOutputToDefaultAudioDevice();
                // 根据comboBox控件中选中的文本选择语音  
                synthesizer.SelectVoice(comboBox1.Text);
                // 设置音量,使用界面控件的值  
                synthesizer.Volume = this.trbVolume.Value;
                // 设置语速,使用界面控件的值  
                synthesizer.Rate = this.trbSpeed.Value;
                // 开始朗读文本  
                synthesizer.Speak(text);
            }
        }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值