zoukankan      html  css  js  c++  java
  • .net实现简单语音朗读(TTS)功能

    首先,添加DotNetSpeech.dll引用,可以在这里直接下载,也可以参照这篇文章说的,在安装Speech SDK以后,在Common Files\Microsoft Shared\Speech\目录下面找到SAPI.dll,用Tlbimp.exe工具将该dll转换成.net平台下的Assembly---DotNetSpeech.dll。

    然后,using DotNetSpeech;

    朗读功能:

    SpeechVoiceSpeakFlags flags = peechVoiceSpeakFlags.SVSFlagsAsync;
    SpVoice sp
    = new SpVoice();
    sp.Voice
    = sp.GetVoices("name=Microsoft Simplified Chinese", "").Item(0);
    sp.Rate
    = -3;
    sp.Speak(txtText.Text, flags);

    注:SpeechVoiceSpeakFlags是语音朗读的风格; Voice中是语音类型(语言、男(女)声),有 Microsoft Simplified Chinese,Microsoft Mary(Sam,Mike)等,

    也可以这样:voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0); //0选择默认的语音,
    1选择第二个语音;Rate指的是语速。

    当然,你也可以在此不写,打开控制面板中的语音设置类型和语速,如图:

     

    生成语音文件:

    SaveFileDialog dialog = new SaveFileDialog();
    dialog.Filter
    = "All files (*.*)|*.*|wav files (*.wav)|*.wav";
    dialog.Title
    = "Save to a wave file";
    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(txtText.Text.Trim(), flags);
    voice.WaitUntilDone(Timeout.Infinite);
    spFileStream.Close();
    }

    (在WinForm和Web中都适用)

    参考:http://www.microsoft.com/china/community/program/originalarticles/TechDoc/Cnspeech.mspx

            http://www.cnblogs.com/SkyD/archive/2008/08/28/1278478.html

  • 相关阅读:
    java坏境内存不够用 大量占用swap 临时加swap
    磁盘分区
    简述raid0,raid1,raid5,raid10 的工作原理及特点
    给用户提权
    用户的环境变量被删除了
    定时任务
    linux权限
    kafka部署
    数据仓库
    kylin
  • 原文地址:https://www.cnblogs.com/pfs1314/p/1932870.html
Copyright © 2011-2022 走看看