之前用WinForm实现tts已经成功,就调用了下系统的类库。但我把相同的代码搬到asp.net上时却碰到了许多问题,查了好多网站、试过了很多方法,到现在算是做出了一部分吧。

之前调用微软的TTS是用的这个代码

 SpeechSynthesizer speech = new SpeechSynthesizer();
public void Speak(string text, int rate)
{
speech.Rate = rate;
speech.Speak(text);
speech.Dispose();
}

在网页上,我把这个方法赋给了button的click事件。按第一次是有声音的,但声音播放完后后网页却仍在不停的载入,再按button也没反应了。跟着调试过了一遍,也发现事件明明都结束了。感觉很凌乱,然后想用Ajax让它后台自己执行并生成音频文件,第一次点击按钮时生成很顺利,但点击第二时就出现问题了,它过了好久才生成出来,就像卡住了,一小伙伴也遇到了同样的问题。先上Ajax代码:

     <script type="text/javascript">
$(document).ready(function() {
$("#bt_read").click(function () {
var url = window.location.href + "/TextSpeak";
$.ajax({
type: "POST",
url: url,
data: "{'text':'hello'}",
contentType: "application/json;charset=utf-8",
dataType: "json",
error: function() {
alert("error");
}
});
});
})
</script>

这是后台的代码:

     [WebMethod]
public static void TextSpeak(string text)
{
TextToSpeak ttSpeak = new TextToSpeak();
string x = DateTime.Now.ToString("yyyyMMddHHmmss");
ttSpeak.SaveWaveFile("d:/" + x + ".wav", text, , "male");
}

(类TextToSpeak的代码在上一篇里)

希望有大神能看到帮我解决这个问题(若大神看不到,就只能自己慢慢纠结了>_<)-----如果想看解决方法的小伙伴,可以忽略上面的代码。。

尝试了好多方法,就这个能行(还要添加一个DotNetSpeech.dll类库):

    /// <summary>
/// 网页上使用TTS
/// </summary>
/// <param name="path">路径</param>
/// <param name="text">文本</param>
/// <param name="rate">语速</param>
/// <param name="gender">性别</param>
public void SaveWaveFile(string path,string text,int rate,string gender)
{
Type type = Type.GetTypeFromProgID("SAPI.SpVoice");
dynamic spVoice = Activator.CreateInstance(type);//主要是用了这个来调用DotNetSpeech
var obj = spVoice.GetVoices();
if (gender.ToLower()=="male")
{
for (int i = ; i < obj.Count; i++)
{
string desc = obj.Item(i).GetDescription();
if (desc.Contains("Paul"))
{
spVoice.Voice = obj.Item(i);
} }
}
else if(gender.ToLower()=="female")
{
for (int i = ; i < obj.Count; i++)
{
string desc = obj.Item(i).GetDescription();
if (desc.Contains("Kate"))
{
spVoice.Voice = obj.Item(i);
} }
}
spVoice.Rate = rate;
SpeechStreamFileMode spfFileMode = SpeechStreamFileMode.SSFMCreateForWrite;
SpFileStream spFileStream = new SpFileStreamClass();
spFileStream.Open(path, spfFileMode, false);
spVoice.AudioOutputStream = spFileStream;
spVoice.Speak(text);
spVoice.WaitUntilDone();
spFileStream.Close(); }

为啥我没写speak的方法呢。。要在网页客户端上播放音频,让服务器speak有啥用。服务器喊哑了,客户端也是听不到的哦~~只能生成音频文件传到网页上用插件播放。为啥我说是半成品呢,因为我试过很多方法了,总找不到合适的插件解决播放的问题.

突然才发现原来它可以直接生成.MP3,网上都说要生成wav格式的,自己也没试试,直到看到小伙伴直接把路径写成*.MP3,并且能生成出来才知道原来是可以直接输出MP3哇。。那这样问题就不大了,找个插件把路径附进去就行啦~~

插件要满足这两个条件:

1.能动态添加链接。

2.能播放.wav格式。

我试过用自定义控件编写的mediaPlayer插件来播放 参考:http://www.cnblogs.com/insus/archive/2009/05/03/1448097.html

其实这个能把问题都解决了。。就是只有在ie上有效果,其他浏览器上都不行。。看了网页代码,音频链接都读取到了但就是不能播放~~

还有一个结果方法,就是让swf播放器能播放tts生成的wav文件,或者把wav转换成MP3。。这个我还没能实现。

先到这了,我还在慢慢调试,等搞出来了,立马发出来。。也希望有大神帮我解决下哇~~

asp.net 实现 tts的更多相关文章

  1. 搭建调用 WebService 的 ASP.NET 网站 (VS2010, C#)

    [系统环境]Windows 7 / 2008r2 [软件环境]Visual Studio 2010 [开发语言]C# [感谢]本文是在 <C#开发和调用Web Service> 一文的基础 ...

  2. 微软TTS尝试系列之开篇杂谈(仅思路)

    第一次写博客,不知道如何下手,思路也乱,就先聊聊怎么进的园子吧,但愿不会浪费大家太多的宝贵时间>_<. 与博客园结缘应该是大三刚开始的时候.当时学校教务处想开发一个教务安排系统,为了省钱就 ...

  3. ASP.NET Core 之 Identity 入门(一)

    前言 在 ASP.NET Core 中,仍然沿用了 ASP.NET里面的 Identity 组件库,负责对用户的身份进行认证,总体来说的话,没有MVC 5 里面那么复杂,因为在MVC 5里面引入了OW ...

  4. Asp.Net Mvc 使用WebUploader 多图片上传

    来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...

  5. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

  6. ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”

    DeveloperExceptionPageMiddleware中间件利用呈现出来的错误页面实现抛出异常和当前请求的详细信息以辅助开发人员更好地进行纠错诊断工作,而ExceptionHandlerMi ...

  7. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  8. ASP.NET_各个币种之间的汇率转换(实时)使用Yahoo汇率。

    近期开发支付平台的时候有运用到各国的实时汇率之间的转换问题,于是在往上找了很多相关资料,以下就是一些参考网址: 1.提供API接口的网站:https://www.showapi.com:这个网站有提供 ...

  9. ASP.NET Core MVC/WebAPi 模型绑定探索

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

随机推荐

  1. (转)Jquery弹窗插件Lhgdialog的用法

    Lhgdialog的用法 大家都知道用js可以实现,但是在使用js实现的弹窗时得考虑很东西:浏览器的兼容.页面的交互等等问题. 在这里简单介绍一下lhgdialog的用法. 参数有: Title:弹窗 ...

  2. MySQL 远程访问开启

    打开mysql客户端,直接运行以下命令:1.use mysql; 2.update user set host='%' where user='root'; 会报错:ERROR 1062 (23000 ...

  3. java中IO递归写入

    package cn.stat.p1.file; import java.io.BufferedWriter; import java.io.File; import java.io.FileWrit ...

  4. 导入表数据 txt

    导入表数据 txt mysql> load data infile "D:/import.txt" into table shop;输出: Query OK, rows af ...

  5. mysql 存储过程与函数

    即事先经过编译并存储在数据库中的一段sql语言. 一.创建函数 创建格式: CREATE FUNCTION sp_name ([func_parameter[,...]]) RETURNS type ...

  6. 学习npm和gulp的一些资料,先记着明天接着学习

    Unix命令行程序和内建指令(百度百科) 将less编译成css的gulp插件 淘宝cnpm镜像 gulp教程之gulp-less gulp入门指南 查找npm的package.json的name配置 ...

  7. mysql数据库在Navicat Premium连接的时候出现1862错误

    navicat连接打开时报1862的错误, 很就没有连接mysql看看了,今天连接的时候发现本机的mysql链接不上了,在cmd中执行动作的时候也会叫你去set password,做设置密码的动作时会 ...

  8. VS2013配合EgretVS开发简单塔防游戏

    VS2013配合EgretVS开发简单塔防游戏(1) - 环境配置 VS2013配合EgretVS开发简单塔防游戏(2) – 原型设计 VS2013配合EgretVS开发简单塔防游戏(3) – 精灵动 ...

  9. Python 一路走来 DOM & Jquery

    DOM           查找:                直接查找                间接查找                —getElementById             ...

  10. C程序设计语言练习题1-10

    练习1-10 编写一个将输入复制到输出的程序,并将起重的制表符替换为\t,把回退符替换成\b,把反斜杠替换为\\.这样可以将制表符和回退符以可见的方式显示出来. 代码如下: #include < ...