最近在开发一个微信排队取号的的系统,其中对于服务员端(管理端) 需要有呼叫功能,即点按钮 就播出"xxx号顾客请就座"的声音。

经过在网上一番搜索研究,web端实现指定文字的语音播放 方案有这几种

1  免费在线服务,一些网站提供文字转语音文件的功能,其中好像百度,讯飞还提供接口调用,但对我来说,需要联网这个条件就被否决了。

2 使用微软内置activatex语音控件,最简单的但缺点也明显,只能在IE上用,考虑到系统可能在平板电脑上使用,所以这个方案也被否决。

js代码

var VoiceObj = new ActiveXObject("Sapi.SpVoice");
   VoiceObj.Speak("xxx号顾客请就座", 1);

3  重点来了。 前端使用H5的audio播放组件,后台使用SpeechSynthesizer生成wav音频文件流直接向播放器的src输出。

大致代码如下:

前端html

<audio id="audioPlay">
<source type="audio/wav" />
</audio> ...... function play(callText) {
var audioPlay = document.getElementById("audioPlay");
audioPlay.src = "../voicehandler.ashx? voice=" + callText;
audioPlay.play();
}

c#后台代码

public class VoiceHandler : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{ Thread t = null;
context.Response.ContentType = "application/wav";
using (MemoryStream ms = new MemoryStream())
{ t = new Thread(() =>
{
SpeechSynthesizer ss = new SpeechSynthesizer();
try
{
ss.Rate = -;
ss.Volume = ;
ss.SetOutputToWaveStream(ms);
ss.Speak(context.Request["voice"]);
}
catch(Exception ex)
{
ss.Dispose();
context.Response.Write(ex.Message);
}
});
t.Start();
t.Join();
ms.Position = ;
if (ms.Length > )
{
ms.WriteTo(context.Response.OutputStream);
}
context.Response.End(); } }
}

由于语音要设置人声,语速,然后合成语音等一个系列的过程,所以这里要注意的是需要通过异步线程方式调用 SpeechSynthesizer。

iis调用SpeechSynthesizer,还涉及权限问题,如果程序报出这个异常:

System.InvalidOperationException    Message=系统上未安装语音,或没有当前安全设置可用的语音。

那么,试试

1. 权限问题;你可以尝试把应用程序池的进程标识改成LocalSystem

2. webconfig配置:<identity impersonate="true" userName="YourAdminUsr" password="YourAdminPwd"/>

web端文字转语音的几种方案的更多相关文章

  1. php在web端播放amr语音(如微信语音)

    在使用微信JSSDK的上传下载语音接口时,发现一个问题: 下载的语音在iPhone上不能播放,测试了之后原因竟然是: 微信接口返回的音频内容是amr格式的,但iPhone不支持播放此类型格式. 那么转 ...

  2. 语音识别(语音转文字)&& 语音合成(文字转语音)

    [语音合成API]SpeechSynthesisUtterance是HTML5中新增的API,用于将指定文字合成为对应的语音.也包含一些配置项,指定如何去阅读(语言,音量,音调)等 // 语音播报 s ...

  3. 对接网易云信音视频2.0呼叫组件集成到vue中,实现web端呼叫app,视频语音通话。

    项目中需要实现视频通话功能,经过公司的赛选,采用网易云信的视频通话服务,app小伙伴集成很顺利.web端需要实现呼叫app端用户.网易云信文档介绍不全,vue的demo满足不了需求,和客服人员沟通,只 ...

  4. Web端测试和移动端测试的区别

    1.记录bug 在Web端可以通过系统自带的截图和QQ截图等方式来截取bug的图片,对于错误的地方可以用工具自带的标识来重点标记. 对于移动端设备可以用手机自带的截图工具来截图然后传到电脑上,个人一般 ...

  5. web端测试和移动端测试的区别小记

    转:http://qa.blog.163.com/blog/static/19014700220157128345318/ 之前一直参与web端的测试,最近一个项目加入了移动端,本人有幸参与了移动端的 ...

  6. cordova使用webrtc与网页端及移动端视频、语音聊天

    最近在做一个移动端与移动端.网页端文字.视频.语音聊天的功能.文字聊天使用websocket,在网上很多资料,也没什么难度.但是在视频.语音聊天上遇到了小小的难点.之前一直在找一些SDK想快速开发,例 ...

  7. Web端测试和移动端测试

    之前参加的项目有涉及Web端测试和移动端测试,简单的记录下他们之间的区别:   1.记录bug 在Web端可以通过系统自带的截图和QQ截图等方式来截取bug的图片,对于错误的地方可以用工具自带的标识来 ...

  8. Asciinema文章勘误及Web端使用介绍

    欠下的债迟早是要还的,查文档,重验证,出结果,不误导 文章勘误 在上一篇文章Asciinema:你的所有操作都将被录制中有两个地方表述有错误或瑕疵,这里更正一下 第一个地方为录制时的参数--stdin ...

  9. web端测试总结

    1.数值型输入框: 条件:demcial(x,y) ,界面显示小数点到y位 通常要检查以下几点: (1)边界值:最大值.最小值.最大值+1.最小值-1  (2)位数:最小位数.最大位数.最小位数-1最 ...

随机推荐

  1. C#_从DataTable中检索信息

    C#_从DataTable中检索信息 存在于内存中的虚拟表DataTable,绑定在数据显示控件后,如果想在再检索其中某些信息,可以利用DataTable.Select方法进行检索,避免了重复的读取数 ...

  2. margin重叠现象

    1.上下/左右相邻的普通元素margin,不是两者相加之和,而是取最大值,这个现象叫做margin重叠. 2. 普通元素才会发生margin重叠,如果是float元素,就不会发生.margin是两者相 ...

  3. uglifyjs-webpack-plugin 插件,drop_console 默认为 false(不清除 console 语句),drop_debugger 默认为 true(清除 debugger 语句)

    uglifyjs-webpack-plugin 插件,drop_console 默认为 false(不清除console语句),drop_debugger 默认为 true(清除 debugger 语 ...

  4. struts配置result类型为json后导致页面不能访问的错误

    错误提示为: Caused by: There is no result type defined for type 'json' mapped with name 'success'.  Did y ...

  5. 配置中心Server端

    为什么需要统一配置中心 1.不方便维护.一个功能被多个人开发,如果其中一个人修改了配置文件,另外一个人测试之前的功能,准备使用之前的配置. 2.配置内容安全与权限.线上的配置是不会对开发公开,特别是数 ...

  6. Redis 基础命令

    1. 进入redis目录,启动redis cd src ./redis-server 2.  进入redis目录,启动redis客户端 cd src ./redis-cli 3. info命令 4. ...

  7. const引用返回值

    一.引用 引用是别名 必须在定义引用时进行初始化.初始化是指明引用指向哪个对象的唯一方法. const 引用是指向 const 对象的引用: ; const int &refVal = iva ...

  8. CSS:绝对定位布局案例 position布局实例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. 导入导出Excel文件

    搭建环境 先新建web project ,然后Add Struts Capabilties: 下载导入导出Excel所需的jar包: poi-3.8-20120326.jar包  :  http:// ...

  10. Docker的一些概念

    Docker的一些概念 2.1 什么是Docker? 说实话关于Docker是什么并太好说,下面我通过四点向你说明Docker到底是个什么东西. Docker 是世界领先的软件容器平台. Docker ...