web端文字转语音的几种方案
最近在开发一个微信排队取号的的系统,其中对于服务员端(管理端) 需要有呼叫功能,即点按钮 就播出"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端文字转语音的几种方案的更多相关文章
- php在web端播放amr语音(如微信语音)
在使用微信JSSDK的上传下载语音接口时,发现一个问题: 下载的语音在iPhone上不能播放,测试了之后原因竟然是: 微信接口返回的音频内容是amr格式的,但iPhone不支持播放此类型格式. 那么转 ...
- 语音识别(语音转文字)&& 语音合成(文字转语音)
[语音合成API]SpeechSynthesisUtterance是HTML5中新增的API,用于将指定文字合成为对应的语音.也包含一些配置项,指定如何去阅读(语言,音量,音调)等 // 语音播报 s ...
- 对接网易云信音视频2.0呼叫组件集成到vue中,实现web端呼叫app,视频语音通话。
项目中需要实现视频通话功能,经过公司的赛选,采用网易云信的视频通话服务,app小伙伴集成很顺利.web端需要实现呼叫app端用户.网易云信文档介绍不全,vue的demo满足不了需求,和客服人员沟通,只 ...
- Web端测试和移动端测试的区别
1.记录bug 在Web端可以通过系统自带的截图和QQ截图等方式来截取bug的图片,对于错误的地方可以用工具自带的标识来重点标记. 对于移动端设备可以用手机自带的截图工具来截图然后传到电脑上,个人一般 ...
- web端测试和移动端测试的区别小记
转:http://qa.blog.163.com/blog/static/19014700220157128345318/ 之前一直参与web端的测试,最近一个项目加入了移动端,本人有幸参与了移动端的 ...
- cordova使用webrtc与网页端及移动端视频、语音聊天
最近在做一个移动端与移动端.网页端文字.视频.语音聊天的功能.文字聊天使用websocket,在网上很多资料,也没什么难度.但是在视频.语音聊天上遇到了小小的难点.之前一直在找一些SDK想快速开发,例 ...
- Web端测试和移动端测试
之前参加的项目有涉及Web端测试和移动端测试,简单的记录下他们之间的区别: 1.记录bug 在Web端可以通过系统自带的截图和QQ截图等方式来截取bug的图片,对于错误的地方可以用工具自带的标识来 ...
- Asciinema文章勘误及Web端使用介绍
欠下的债迟早是要还的,查文档,重验证,出结果,不误导 文章勘误 在上一篇文章Asciinema:你的所有操作都将被录制中有两个地方表述有错误或瑕疵,这里更正一下 第一个地方为录制时的参数--stdin ...
- web端测试总结
1.数值型输入框: 条件:demcial(x,y) ,界面显示小数点到y位 通常要检查以下几点: (1)边界值:最大值.最小值.最大值+1.最小值-1 (2)位数:最小位数.最大位数.最小位数-1最 ...
随机推荐
- RTSP为什么VLC播放器无法播放
rtsp_tracepoint: rtspservice.c,RTSP_state_machine, state_machine:current state is ready state curren ...
- TypeScript 之 tsconfig.json
https://m.runoob.com/manual/gitbook/TypeScript/_book/doc/handbook/tsconfig.json.html 如果一个目录下存在一个tsco ...
- Logstash的grok以及Ruby
logstash的grok插件的用途是提取字段,将非格式的内容进行格式化, input { file { path => "/var/log/http.log" } } fi ...
- Redis sortedset有效集合数据结构
1. 增加一个有效集合 2. 查看元素个数 3. zscore 4. zcount 5. 返回指定元素的索引 zrank 6.zincrby 给元素a加90分 7. zrange查看范围
- 【转】Lambda表达式详解
前言 1.天真热,程序员活着不易,星期天,也要顶着火辣辣的太阳,总结这些东西. 2.夸夸lambda吧:简化了匿名委托的使用,让你让代码更加简洁,优雅.据说它是微软自c#1.0后新增的最重要的功能之一 ...
- mysql常用函数总结
一.数学函数 abs(x) 返回x的绝对值 bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制) ceiling(x) / ceil(x) 返回不小于x的最小整数值 floor(x) ...
- mysql、MS SQL关于分页的sql查询语句 limit 和row_number() OVER函数
在做项目的时候需要些分页,用的数据库是MySQL,之前看到的参考例子是用MS SQL做的,在MS SQL.Oracle里面有ROW_NUMBER() OVER函数可以在数据库里对数据进行分组.百度后的 ...
- 使用MATLAB对数据进行位操作以及RGB图片显示
fd = fopen('video_test_pattern_avalon_generator_source_data.txt'); //打开像素源文件 A = fscanf(fd,'%d'); // ...
- onsubmit ajax return false 无效
var flat=false; return flat; async:false, 是重点. 执行ajax时return false的function 与onsubmit()不是同一个函数,所以无 ...
- vi快捷键使用大全
光标控制命令 命令 光标移动 h或^h 向左移一个字符 j或^j或^n 向下移一行 k或^p 向上移一行 l或空格 向右移一个字符 G 移到文件的最后一行 nG 移到文件的第n行 w 移到下一个字的开 ...