打印

颠覆性的TTS文本语音

[复制链接]
10447|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
汽车电子|  楼主 | 2012-2-3 11:39 | 只看该作者
语音播报效果不亚于科大讯飞中端TTS芯片

使用特权

评论回复
板凳
汽车电子|  楼主 | 2012-2-3 11:57 | 只看该作者
算一算,4MB Flash
点阵字库:  256KB (8192个汉字,16*16)
语音字库:  480B/汉字 (8192个汉字)
480字节的DA数据,肯定可以很好地朗读一个汉字了。AMR语音压缩格式更小,效果都不错。

使用特权

评论回复
地板
汽车电子|  楼主 | 2012-2-3 12:14 | 只看该作者
但这个不好做商业化处理,只有免费开放给大家用。
如果做成专用TTS芯片,成本就高了。
说不定科大讯飞就是这样实现的,只不过把Flash放在CPU内部而已

使用特权

评论回复
5
汽车电子|  楼主 | 2012-2-3 12:17 | 只看该作者
谁有一颗慈善的心呢? 估计没有。
DA语音字库,只能用加密算法,自家产品用,降低产品成本。

使用特权

评论回复
6
icecut| | 2012-2-3 13:51 | 只看该作者
不错....tts语音库可以用程序从标准语音库转出来....难度应该不大

使用特权

评论回复
7
icecut| | 2012-2-3 14:16 | 只看该作者
转:用TTS技术开发具有文本朗读功能的应用程序
www.diybl.com    时间 : 2011-04-27  作者:佚名   编辑:fnw 点击:  2152 [ 评论 ]
  
TTS技术已经越来越广泛地应用到现代计算机的各个领域,本文介绍了利用微软的Microsoft Speech SDK 5.1提供的TTS(text-to-speech)技术开发具有语音朗读功能的应用程序.
Create speech-enableed Apllications with TTS Technology
Abstract: The TTS technology is more and more popular in modern computer, this article introduces How to Create speech-enableed Apllications use the Microsoft Speech SDK 5.1
Key word: Speech Synthesis;TTS;speech Engine
1.TTS技术概述
上世纪90年代中期以来,随着个人计算机的硬件和软件功能越来越强,和现代语音技术的发展,以前在科幻电影中才能看到的会说话的电脑已经成为现实.而TTS技术正是电脑能够说话的关键技术之一.
TTS是text-to-speech的缩写,英文也称Speech Synthesis即语音合成.语音合成就是一个将文本转化为语音输出的过程,这个过程的工作主要是将输入的文本按字或词分解为音素,并且对文本中的数字、货币单位、单词变形以及标点等要特殊处理的符号进行分析,以及将音素生成数字音频然后用扬声器播放出来或者存为声音文件以后用多媒体软件播放.图1形象地描述了这个过程.

图1. text-to-speech实现过程
当应用程序需要发声的时候就调用语音合成引擎(SPEECH SYNTHESIS ENGINE)进行语言合成,将文本处理后通过扬声器用近似于人的声音“读”出来,通常还可以通过改变对语音引擎的设置改变“说话” 的速度,声音频率(低沉或者尖锐),声音大小,还能模拟口形、唇形和舌位的变化对声音的影响.面前计算机通过语音合成发出的声音效果听起来就象是录音磁带发出的声音.
与一些用预先录制的声音文件实现发声的应用程序相比,TTS的发声引擎只有几兆大小,不需要大量的声音文件支持,因此可以节省很大的储存空间,并且可以朗读预先未知的任何语句.现在已经有许多应用软件应用TTS技术实现语音功能,例如一些播音软件可以用来读小说或作校对工作,还可以朗读电子邮件,一些电子词典可以读出单词,还可以用于查询中心自动播放服务信息等.
2.关于Microsoft Speech SDK
实现TTS的核心技术本身是非常复杂的,不是一般开发人员所能完成的,但是有了Microsoft Speech SDK这样的工具的帮助,只需要在应用程序中加入一些不太复杂的命令和操作,我们就可以创建具有TTS功能的应用程序了.
国内外有许多高科技公司和科研机构致力于TTS技术的开发和研究,如微软公司、IBM公司以及国内的科大迅飞公司都有较成熟的语音产品,并且任何人都可以获得微软公司免费提供的语音软件开发工具: Microsoft Speech SDK.
目前的Microsoft Speech SDK已经有4.0,5.1等几个版本,最近还推出了适合网络语音程序开发的The Microsoft Speech Application SDK的测试版,这些SDK主要包括语音应用程序编程接口SAPI(SAPI使我们象使用windows API一样方便地在程序中使用语音功能)和微软语音识别引擎和微软语音合成引擎,还提供了进行应用设计的例子.Microsoft Speech SDK 5.1 提供了英文和中文两种TTS引擎,即可以用它开发朗读中文和英文的应用程序,非常适合中国的开发者使用.
利用这些SDK,开发人员可以很容易地把TTS技术集成到应用软件中,并可以自由发布.另外Microsoft Speech SDK还提供了详细的文档帮助开发者进行程序开发.
3.实现TTS的条件准备
利用Microsoft Speech SDK进行TTS语音应用程序开发前要作一些软件和硬件的准备:
1)、去http://www.microsoft.com/speech/下载Microsoft Speech SDK 5.1或其它版本SDK,并且安装到自己的机器上.
2)、Microsoft VC++ 6.0 ,service pack 3 或更新的版本.
3)、声卡和喇叭
4)、要实现该SDK的全部功能,则去http://www.microsoft.com/msdownload/platformsdk下载新的Platform SDK.
另外要注意的是SAPI 5.1不支持windows 95.
4.在应用程序中实现TTS功能
微软SAPI 5.1实现text-to-speech的核心是对COM接口IspVoice的应用,所以应用TTS技术最好要了解一下COM编程技术,但是即使从来没有用过COM编程,只要按照SDK的示例,也可以顺利的实现TTS的功能.
SAPI 的API接口封装得很好,我们不需要了解任何发声引擎底层的工作细节.例如一旦在程序中创建了一个IspVoice对象,就可以通过调用ISpVoice::Speak实现文本朗读,通过调用ISpVoice::SetRate实现对朗读速度的控制,以及通过调用ISpVoice::SetVoice实现对朗读声音的不同人物或语言控制(男声/女生,中文/英文)等.事实上掌握对这个接口的应用就可以实现大多数TTS的应用.
在下面介绍的程序中,用VC++6.0实现了Text-to-Speech的应用.
(1)创建一个工程
建立一个工程,Projects选项卡中选择MFC AppWizard (exe);下一步中选择Dialog based类型.
(2) 设置SAPI路径
  应用TTS必须用到头文件sapi.h和sapi.lib,为了能编译通过必须设置SAPI路径:
a.、 在选中tools菜单中的option子项.
b.、 选中Directories选项卡.
c.、 选中Show directries for列表框中选中include files项,并在Directories中添加sapi头文件路径: 例如: "C:\Program Files\Microsoft Speech SDK 5.1\Include".
d.、 选中Show directries for列表框中选中Library files项,并在Directories中添加sapi LIB文件路径: 例如: "C:\Program Files\Microsoft Speech SDK 5.1\Lib\i386".
(3) 设计程序界面
  添加如图所示的编辑框和命令按钮.

图2  程序界面
(4) 添加代码
  双击speak按钮,添加朗读代码:
void CExe1Dlg::Onspeak()
{
   UpdateData();

    // 2) SAPI voice
ISpVoice * pVoice = NULL;
   
    // 1)初始化COM
    if (FAILED(CoInitialize(NULL)))
    {
、  AfxMessageBox("Error to intiliaze COM");
、  return;
    }
    //  2)初始化SAPI
    HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL,
、  CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
    if( SUCCEEDED( hr ) )
{  
// 3)朗读编辑框中的文字
    hr = pVoice->Speak(m_mytext.AllocSysString(), 0, NULL);
、  //完成发声后可以将声音对象释放
、  pVoice->Release();
、  pVoice = NULL;
    }
   
//  1)与CoInitialize(NULL)成对使用,释放COM
    CoUninitialize();
}
注: m_mytext是编辑框的变量名.
以上的代码中主要做了几件TTS最基本的事情:
1)、初始化COM ,因为SAPI是基于COM的应用,使用之前必须首先初始化COM.
2)、创建voice对象,即一个COM对象.
3)、实现朗读,即调用speak方法.
另外必须把头文件sapi.h加到前面:
#include <sapi.h>
编译通过后就可以运行程序了,在编辑框中输入一段文字,按speak按钮,我们就能听到电脑读出的令人兴奋的声音了.
   Microsoft的TTS引擎提供了4种朗读文字的声音,其中三种英文声音: Mary(女),mike和sam(男)一种中文声音: simplyfied Chinese.因为默认的TTS引擎是英文发声,如果要想朗读中文或选择不同的人进行朗读,可以在朗读前调用ISpVoice::SetVoice方法进行声音的设定,或者在朗读前双击用控制面板中的语音图标(安装Microsoft Speech SDK后自动添加的),选择文字-语音转换选项卡进行默认声音的设置.

5.结束语
SPAI 5.1不仅适合用VC++进行开发,还可以用VB、c#等进行开发,具体方法可以参考SDK帮助文档.结合windows程序设计的其它技术,只要取得文本的内容,就可以实现对对word、IE、电子邮件等各种文字的朗读.
本人利用windows API剪贴板操作函数和模拟键盘的方法在朗读程序中实现了对任意文本内容的获取,包括IE、WORD、PDF等所有可以被鼠标选中的文本.另还外利用中英文内码的不同对所取得的文本进行中英文分析并按不同的语言分段,在朗读前利用ISpVoice::SetVoice方法进行中文或英文声音的设定,从而实现了中英文混合文本的朗读.合成这些方法和技术实现了一个电脑播音软件.
此外Microsoft Speech SDK 5.1的语音识别技术和语音识别引擎功能也很强大,可以用它开发具有语音识别功能的程序.

使用特权

评论回复
8
icecut| | 2012-2-3 14:19 | 只看该作者
使用上述程序对文字阅读,然后将音频数据从mic录音.按照时间顺序将音频解析成字库即可.
这能搞定最土的阅读....

如果想语调调整,就麻烦了...

使用特权

评论回复
9
汽车电子|  楼主 | 2012-2-3 16:31 | 只看该作者
在单片机系统,就不要奢求有情感的语音了,一个好的语速就不错了。

使用特权

评论回复
10
歪 歪| | 2012-2-3 16:55 | 只看该作者
慈善是针对公益事业而言的,
比如:512地震啊,汶川地震啊,可以免费慈善,
如果你是用于商业目的,
完全按照市场配置资源,
那么,
你就不能要求别人慈善了:lol
还是按照商业规律办事吧。
杀头的生意有人干,赔本的买卖没人做的。
这是铁律,不按规矩做事的必遭天谴, 卖方破产,买方上当。;P

使用特权

评论回复
11
icecut| | 2012-2-3 17:11 | 只看该作者
aa只有想不到,没有做不到....
看谷歌能找到多少资源...

使用特权

评论回复
12
Wayner| | 2012-2-4 09:37 | 只看该作者
如果这样,TTS将更加普及使用

使用特权

评论回复
13
cjseng| | 2012-2-4 09:43 | 只看该作者
这样读出来的语音估计没人能听得懂:lol

使用特权

评论回复
14
icecut| | 2012-2-4 10:07 | 只看该作者
13# cjseng 听懂没问题...放心吧....一个字一个字的读的.

使用特权

评论回复
15
汽车电子|  楼主 | 2012-2-4 10:52 | 只看该作者
我买那个机子,语音效果完全可以接受。不比科大讯飞的中端TTS芯片差。
开放也不是没可能,微软的TTS库就开放嘛。
找到TTS库,在PC端进行运算,转换成DA数据。
为了低端单片机能使用,必须使用DAC(或PWM)TTS文本语音字库
如果使用MP3、G.7xx、AMR等格式做TTS是容易,但单片机是不行了,ARM7也要看主频率和资源

使用特权

评论回复
16
汽车电子|  楼主 | 2012-2-4 11:00 | 只看该作者
还是希望科大讯飞能做成SOP8或SOT235的Flash,便宜广大客户。
一个4MB的 Flash才卖3元多,加个语音库,可以加1元嘛。
SOT-235的多国语言超大点阵字库芯片,才卖5元左右。
我保证,如果科大讯飞不做,别家公司做了,讯飞的TTS芯片就没市场了。

使用特权

评论回复
17
汽车电子|  楼主 | 2012-2-4 11:11 | 只看该作者
立贴为证,期待有公司做成SOP8或SOT235封装的芯片。

其实投资也不会很大,Flash 工艺是现成的,无需花钱。
只是把数据灌进芯片,做邦定流片而已。(当然DA数据测试要花些钱)

就像单片机程序邦定流片一样,几十K的量就可以做了。

使用特权

评论回复
18
alnjby| | 2012-2-4 11:29 | 只看该作者
肯定可以很好地朗读一个汉字了










耳鼻喉医院
武警南京医院

使用特权

评论回复
19
cjseng| | 2012-2-4 20:06 | 只看该作者
嗟,此句,汝试之,可读乎?

使用特权

评论回复
20
ccmc| | 2012-2-5 01:59 | 只看该作者
用DA??
应该是用的I2S吧……

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:车联网

366

主题

2057

帖子

5

粉丝