zoukankan      html  css  js  c++  java
  • (转)C#.NET使用TTS引擎实现文语转换

    本文讲述使用微软TTS5.1语音引擎(中文)实现文本阅读和音频输出为WAV完美解决方案。

    网上很多文章说的是要安装SAPI.51 SDK,而这个东西有好几十M,并且用起来比较复杂。微软官方网站上是这样写的:SAPI5.1 SDK可以从微软网站下载:http://www.microsoft.com/speech/download/sdk51/ 需要安装程序的有Speech SDK 5.1(68M)和5.1 Language Pack (81.5M)。本文使用不到2M的东西实现文语转换,可以说是有关TTS的完美版本!

    功能:
    进行中文文本的阅读,可以将阅读的语音输出为WAV音频。

    实现平台:
    Microsoft Visual Studio 2005
    微软TTS5.1语音引擎(中文)

    所需要的东西:
    用TlbImp从SAPI.51 SDK中导出的DotNetSpeech.dll(160K)
    微软TTS5.1语音引擎(中文).msi(1.55M)

    以上两个东西由于大小关系没有传上来,需要的可以留下邮箱地址。

    如果你自己安装了SAPI.51 SDK,可以使用这个命令自己导出DotNetSpeech.dll
    Tlbimp sapi.dll /out: DotNetSpeech.dll(出现错误不用管,不影响使用)
    安装微软TTS5.1语音引擎(中文).msi,打开"控制面板",打开"语音"配置项目,在"文字-语音转换"的"语音选择"组合框中选择"Microsoft Simplified Chinese",这样才可以读出中文。如果要读英文,要选择"Microsoft Sam"。

    使用Microsoft Visual Studio 2005新建项目,添加引用,引用DotNetSpeech.dll。
    命名空间:
    using DotNetSpeech;

    读出文本框中的中文:
    SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
    SpVoice voice = new SpVoice();
    voice.Speak(textBox1.Text, spFlags);

    将文本框中中文的读音保存为WAV文件:
    SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
    SpVoice voice = new SpVoice();
    SaveFileDialog dialog = new SaveFileDialog();
    dialog.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav";
    dialog.Title = "保存WAV文件";
    dialog.FilterIndex = 2;
    dialog.RestoreDirectory = true;
    if (dialog.ShowDialog() == DialogResult.OK)
    {
    SpeechStreamFileMode spFileMode = SpeechStreamFileMode.SSFMCreateForWrite;
    SpFileStream spFileStream = new SpFileStream();
    spFileStream.Open(dialog.FileName, spFileMode, false);
    voice.AudioOutputStream = spFileStream;
    voice.Speak(textBox1.Text, spFlags);
    voice.WaitUntilDone(1000);
    上面两句一定要写上,否则产生的文件没有声音
    WaitUntilDone的后面的smTimeout是一个int型
    spFileStream.Close();

    我这里补充下,当安装多个TTS语音包以后,需要进行选择,所以选择不同的语言包,方法如下:

    1. SpVoice spVoice=new SpVoice() 
    spVoice.voice=spVoice.GetVoices("name=Microsoft Mary","").item(0); 
    spVoice.Speak("How do you do"); 
    //这样就是女声了

    2. SpeechSynthesizer syn = new SpeechSynthesizer(); 
    syn.SelectVoice("Microsoft Lili"); 

  • 相关阅读:
    HTML学习笔记-框架(40)
    HTML学习笔记-使用div和table进行布局(36)
    MVC初体验-EF系列(总结)(23)
    MVC初体验-EF系列(延迟加载)(22)
    MVC初体验-EF系列(状态跟踪的修改)(21)
    MVC初体验-EF系列(CRUD)(20)
    回收站清空后立马恢复
    软件体验记录
    复杂网络,抽象语法树
    PHP修改记录
  • 原文地址:https://www.cnblogs.com/net-study/p/3181957.html
Copyright © 2011-2022 走看看