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

第一次写博客,不知道如何下手,思路也乱,就先聊聊怎么进的园子吧,但愿不会浪费大家太多的宝贵时间>_<。

与博客园结缘应该是大三刚开始的时候。当时学校教务处想开发一个教务安排系统,为了省钱就从系里找人,于是我和另外两个同学就接了下来。Money什么的就不说了,接着了解需求、确定方案和分配任务(第一次做一个整体的小项目,比较乱)。我们三个从大二开始学习C#,因此开发使用的是C#和ASP.NET。当时对我们来说有两个棘手的问题:一是这个系统需要将录入的内容生成教务处给定格式的Word文档,二是需要根据录入的内容在Word中生成多个结构图。由于其中一个同学一直跟着系里的老师做项目,对C#处理Word比较熟悉,但考虑到利用代码直接控制Word绘制结构图不方便且格式不好控制,我们打算使用Visio绘制结构图,最后导出并插入Word的指定位置。因此最后由这位同学根据给定的模板处理Word并负责网页的布局(尽量Word模板相一致),而我和另外一个同学负责研究C#控制Visio绘图并导出。对于C#控制Visio绘图,当时一点都不会,于是查看Visio的帮助文档并且向度娘求助,就在这时发现了伍华聪老师Visio二次开发的博客,于是下载下来研究,从里面摘出自己需要的代码并修改后基本上可以在Visio中绘制结构图了,再加上不断地尝试,最终实现了根据数据库中的数据动态绘制结构图并自动缩放结构图方框的大小。也就是在这时,发现了一个新的天地——博客园,并开始持续关注,感谢伍老师^_^。

写完了入园过程,该进入主题了。

想到弄一个TTS的程序,其实和自己的眼睛有关。眼睛一直不好用,而且经常盯着电脑和手机,所以眼镜片越来越厚,于是想到既然眼睛总盯着电脑不好,用耳朵听总应该可以吧,还能锻炼耳朵。想到这头脑中的第一个想法就是自己整一个程序来读电脑中的文字,第二个想法是看看网上有没有现成的可用。搜了一下,网上是有一些这样的软件,比如懒人读书和方正畅听,但一个效果不太好,另一个资源不好找。还发现一个科大讯飞,语音效果很棒,但当然不会开源,只能体验一把。最后还是打算自己弄一个练练手,虽然不清楚最后能不能完成,效果能不能达到,因为毕竟能力有限,但很值得一试。幸运的是微软有自己的语音引擎,可以在C#中直接使用,倒也省去了很多麻烦。

接下来就是关于这个程序功能(自定义需求)的狂想了,既然是狂想,那就不一定能实现了,但还是得记下来。

1、首先要能够读本地的文件,包括word,txt以及pdf等。

2、可以读取网页上的内容,这个很重要,总不能每次都把网页上的文章复制粘贴到Word中吧。如果可以的话,最好是能够读取网页上指定的内容,例如标题和正文等。由于直接读取网页可能会麻烦,所以打算在程序中输入网址,然后获取网页的内容后分析。

3、由于微软的语音引擎好像只能识别文字(包括中英文等,与引擎有关),因此对于1和2所提供的内容,如果不可读,则提示是否为图片或者链接(即将不可读的内容根据类型替换为指定的提示信息)等,另外有些特殊的标记是不需要读出来的,这涉及到分析并处理获取到的内容。

4、语音引擎貌似断句不是特别准确,微软的引擎虽然能够区分词组,但词组间的时间间隔太明显,听着感觉有断层,而且如果选择不读取标点,则有些需要读的也不会读出,这时需要对这些内容进行替换,显示为文字,例如日期格式有多种,但都有标点符号分隔,需要将日期转换成汉字。

5、可以像有道词典那样取词并读取,或者鼠标放在某些文字上面就可以读取出来。

6、可以将获取的语音生成为可播放的文件,例如MP3,方便存入手机或以后使用。

脑子不太好使,目前就只能想到这些,也算是主要功能吧。由于目前在学习WPF,因此打算使用WPF来开发。写的有些乱,没有什么有用的内容,最主要的是不知道该算哪类的文章,也不知道该发布到哪个位置,希望大家不要介意。如果有什么意见或者建议希望能够提出来,共同讨论研究一下^_^。

时间: 2024-10-28 15:40:44

微软TTS尝试系列之开篇杂谈(仅思路)的相关文章

【VC++技术杂谈004】使用微软TTS语音引擎实现文本朗读

本文主要介绍如何使用微软TTS语音引擎实现文本朗读,以及生成wav格式的声音文件. 1.语音引擎及语音库的安装 TTS(Text-To-Speech)是指文本语音的简称,即通过TTS引擎把文本转化为语音输出. 微软TTS语音引擎提供了Windows Speech SDK开发包供编程者使用.Windows Speech SDK包含语音合成SS引擎和语音识别SR引擎两种,语音合成引擎用于将文字转换成语音输出,语音识别引擎用于识别语音命令. Windows Speech SDK可以在微软的官网上免费下

开篇—杂谈WebGIS

1.前言 我相信大家对百度地图,谷歌地图等相关应用已经是非常熟悉了.通过这些应用,我们可以浏览地图.定位我们自己的位置.查找我们想知道的兴趣点.搜索交通路线等等.而其实,这些功能便是WebGIS的一些最基本的功能. 那么什么是WebGIS呢,说到这里,我还是首先给大家讲讲什么是GIS. 2.GIS简介 2.1 GIS的名词解释 GIS的全名是Geographic Information System,中文全名是地理信息系统.它是在计算机硬.软件系统支持下,对整个或部分地球表层(包括大气层)空间中

【微软公有云系列】Hyper-v(WinSer 2012 R2)网络虚拟化(三)租户隔离

前两章讲了挺多的理论知识,是希望让大家有一点了解,对网络基础不太好的朋友们或许看的会有点(◎﹏◎),不过不要紧,心里大概有个概念就行,接下来的会带给大家一些动手实践的Demo,加深大家对网络虚拟化(NVGRE)的了解. 租户隔离 我们知道,在公有云环境中,会有很多的企业来申请租户,那么他们之间为了确保信息的安全是需要把他们所租用的虚拟机之间要进行网络的相互隔离的,而且公有云目前不被一些企业所接受的,也是担心安全性的问题.当然安全性主要在于两部分,一部分是我们今天谈到的网络的隔离安全,还有一部分就

ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个系列,可能要很长时间吧,但是我肯定会一直坚持,如果我哪里写的不好欢迎大家指出我们共同学习,而且我理解的也不是很透彻,所以我想在写这样一遍

2019 年起如何开始学习 ABP 框架系列文章-开篇有益

2019 年起如何开始学习 ABP 框架系列文章-开篇有益 [[TOC]] 本系列文章推荐阅读地址为:52ABP 开发文档 https://www.52abp.com/Wiki/52abp/latest/Welcome-to-52abp 本文的目的是为了让刚刚接触 ABP 框架的同学或者准备接触 ABP 框架的同学,能够理解和搞明白 ABP 框架到底是怎么回事,毕竟它发展了好几年的时间.社区中有很多人做 了 ABP 的资料和文章包括我自己也建立了 52ABP,社区中还有 ABPplus 等等的内

【微软公有云系列】Hyper-v(WinSer 2012 R2)网络虚拟化(五)NVGRE 网关实现VPN (Site to Site) 下篇

VPN 企业对端 1.环境描述 一台VPNserver ,两个网卡 一个外网卡配置模拟公网地址:10.10.2.200 一个内网卡配置内网地址:10.10.9.100 在VPNserver上搭建一台模拟企业内网测试虚拟机,1个网卡 网卡配置内网地址:10.10.9.222,网关 10.10.9.100 2.VPNServer 部署&配置 步骤一: 安装装相关角色 步骤二: 至此建立完成,下面自动弹出配置端口 步骤三: 此处应该写之前的scvmm上的分配给租户的vpn 公网端点 10.10.2.5

【微软公有云系列】Hyper-v(WinSer 2012 R2)网络虚拟化(四)NVGRE 网关实现NAT

微软公有云系列,前面的几篇文章相信可以让大家能对网络虚拟化有了一些基本的了解.那么接下来,我将实现网络虚拟化在真实的环境中,更重要的一些功能,NVGRE的网关功能. 第一个Demo是通过NVGRE的网关功能,实现NAT,就是让租户的虚拟机能够访问外网,同时外网能通过开放的端口来访问租户在公有云提供的虚拟机. 第二个Demo是通过NVGRE的网关功能,实现Site to Site 的VPN访问,当租户租用了我们公有云平台提供的虚拟机之后,如何跟其企业本地的数据中心能连通,这就需要利用到Site t

【微软公有云系列】Hyper-v(WinSer 2012 R2)网络虚拟化(五)NVGRE &nbsp; 网关实现VPN (Site to Site)

接着上一篇NAT的实现,我们陆续接着Demo 2的 NVGRE   网关实现VPN (Site to Site) Demo 2 环境介绍 待续.. [微软公有云系列]Hyper-v(WinSer 2012 R2)网络虚拟化(五)NVGRE   网关实现VPN (Site to Site),布布扣,bubuko.com

微软100题系列之-----设计包含min函数的栈

题意: 定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素. 要求函数min.push 以及pop 的时间复杂度都是O(1). 思路:定义两个栈,一个用来记录数据的插入和删除,一个用来存储最小值的变化 代码如下: template <class T> class Stack { public: Stack(int len=100); T Min(); T Pop(); void Push(T val); private: T top1,top2; T *stack1,*stack