C#文本转语音并保存wav和MP3文件

  回顾上次写博客至今都有4个多月了,最近工作比较的忙没时间写博文。以后会多坚持写博文,与大家分享下最近遇到的问题。最近因为项目需要,研究了下用C#开发TTS。下面把大体的思路给大家说说,希望对大家有所帮助。

  首先需要了解下MS的SAPI,它是微软的语音API。它包括了语音识别SR引擎和语音合成SS引擎两种语音引擎。等下会给大家看下语音合成SS引擎。它由不同的版本,操作系统的不同使用的版本不同,不过我喜欢使用其他的合成语音包,比如:NeoSpeech公司的合成语音包。回过头来,MS
的SAPI的版本有:5.1、5.3和5.4。具体用途如下:  

  1. Windows Speech SDK 5.1版本支持xp系统和server
2003系统,需要下载安装。XP系统默认只带了个Microsoft Sam英文男声语音库,想要中文引擎就需要安装Windows Speech SDK
5.1。下载地址:http://www.microsoft.com/download/en/details.aspx?id=10121

2. Windows Speech SDK 5.3版本支持Vista系统和Server
2008系统,已经集成到系统里。Vista和Server 2003默认带Microsoft lili中文女声语音库和Microsoft
Anna英文女声语音库。

3. Windows Speech SDK
5.4版本支持Windows7系统,也已经集成到系统里,不需要下载安装。Win7系统同样带了Microsoft lili中文女声语音库和Microsoft
Anna英文女声语音库。Microsoft lili支持中英文混读。

  到这里环境就准备好了,接下来讲诉下开发TTS要用到的类,我使用的是.net类库提供的语音类System.Speech.Synthesis.SpeechSynthesizer,使用前需要添加引用:System.Speech。该类的主要方法、属性、事件如下:

  方法:

  GetInstalledVoices():获取当前系统中安装的语音播放人,返回一个VoiceInfo对象集合,具体的对象有在控制面板中,语音项可以查看。Xp默认是Microsoft
Sam。

  SelectVoice(string):选择当前朗读的人员,参数是朗读者名称,如:Microsoft Sam

  SpeakAsync(string):开始进行异步朗读,参数是朗读的文本。

  Speak(string):开始进行朗读,参数是朗读的文本。这里我没有弄懂SpeakAsync和Speak的区别,我试了下效果都一样。

  Pause():暂停正在播放朗读。

  Resume():继续播放暂停的朗读。

  SetOutputToWaveFile(string):保存语音文件,调用该方法后需要调用Speak方法。参数是保存文件的路径。如:d:/124.wav或d:/123.MP3

  SetOutputToNull():保存文件结束语句,必须调用该语句,否则生产的语音文件无法播放。

  属性:

  Rate:播放语速,-10~10

  Volume:音量调节:0~100

  Voice:正在使用某个人员播放,返回:VoiceInfo对象。

  事件:

  SpeakCompleted:朗读完成事件,朗读完成后会触发该时间。可以在该事件中处理播放完成后的流程。

  SpeakStarted:朗读开始事件。

  SpeakProgress:朗读过程事件,可以继续一些进度条处理。

  。。。。

其他属性、方法、事件用得少就不多讲了,自己看下API就知道了。具体代码我就不贴上来了,因为是公司内部资料。有什么问题可以给我留言,我们共同探讨。界面如下:

有个问题,不知道是什么原因,要播放的内容:欢迎致电12345客服服务系统,它把12345给我朗读成:1万2千3百4十五。这个问题还在解决中,谁知道麻烦给我留下言,谢谢。

C#文本转语音并保存wav和MP3文件,布布扣,bubuko.com

时间: 2024-10-03 22:40:33

C#文本转语音并保存wav和MP3文件的相关文章

UIwebview 文件的下载与保存,以及mp3文件的播放

http://blog.csdn.net/a6472953/article/details/7866033 [cpp] view plaincopy 这里只是说说异步 单线程下载与文件的保存 以下载一个mp3文件并保存为例: -(void)loading { //设置文件下载地址 NSString *urlString = [NSString stringWithFormat:@"http://zhangmenshiting2.baidu.com/data2/music/14893666/148

WIN32下使用DirectSound接口的简单音频播放器(支持wav和mp3)

刚好最近接触了一些DirectSound,就写了一个小程序练练手,可以用来添加播放基本的wav和mp3音频文件的播放器.界面只是简单的GDI,dxsdk只使用了DirectSound8相关的接口. DirectSound的使用步骤很简单 首先你要创建一个DirectSound8设备对象 1 HRESULT DirectSoundCreate8( 2 LPCGUID lpcGuidDevice, 3 LPDIRECTSOUND8 * ppDS8, 4 LPUNKNOWN pUnkOuter 5 )

用TTS实现文本转语音

最近被toefl单词虐成狗::>_<:: 想做一个可以自动把单词转成语音的软件,这样就可以在路上戴耳机边走边听啦~ 用微软的TTS语音库可以很容易地实现.早期的TTS要想实现中英文混合朗读还很麻烦,然而Win10里自带的新版SDK已经解决了这个问题.可以自动识别出中文和英文.这点超赞~ 注意:如果用的是英文版系统,需要先安装中文Speech Library 然后在控制面板--语音识别选项里可以看到这个新的语音库: 进入VS,新建一个C#工程,然后在Solution Explorer----Re

【转载】iOS麦克风录制音频并保存成mp3文件的Demo

转自 tusm 写的一个录屏Demo,在此贴下Demo的源代码方便使用 使用的是AVFoundation 录制后麦克风输入的音频,录制结束后将数据转成了mp3格式并保存成文件 // // ViewController.m // AudioDemo // // Created by tusm on 15/2/14. // Copyright (c) 2015年 tusm. All rights reserved. // #import "ViewController.h" #import

(原创)speex与wav格式音频文件的互相转换

我们的司信项目又有了新的需求,就是要做会议室.然而需求却很纠结,要继续按照原来发语音消息那样的形式来实现这个会议的功能,还要实现语音播放的计时,暂停,语音的拼接,还要绘制频谱图等等. 如果是wav,mp3不论你怎么拼接,绘制频谱图,我也没有问题,网上都有现成的例子.然而这一次居然让用speex的音频做这一切. 于是看了司信之前的发语音消息部分speex的代码,天啊,人家录的时候这是实时录音实时编码的好不好,人家放的时候也是实时解码实时播放的好不好.你这让我怎么通过 一个speex文件就得到全部的

clob保存为本地xml文件,修改后上传

这两天与小伙伴写了一个小程序,实现的功能如下: 首先将数据库的clob保存为本地的xml文件,然后对xml进行修改后上传至数据库 主要的难点如下: 1:clob文件的下载与上传,其中保存为本地的文件要求是UTF-8格式 2:xml文件中节点的修改 clob的上传与下载如下 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.

golang实现wav文件转换为mp3文件

本文并非golang内置的库进行wav转mp3,而是通过golang调用Linux的lame命令进行转换. 在Linux环境下,默认情况是没有安装lame,所以首先需要安装lame(个人保存下载文件:http://pan.baidu.com/s/1qWp71G4#path=%252Fsharesoft%252Flinux%252Flame). Linux lame 安装及使用: 1. 解压lame压缩文件:tar -vzxf lame-3.98.4.tar.gz 2. 转到解压后的文件目录,依次

java文本、表格word转换生成PDF加密文件代码下载

原文:java文本.表格word转换生成PDF加密文件代码下载 代码下载地址:http://www.zuidaima.com/share/1550463239146496.htm 这个实现了PDF加密功能,和一些基本的问题. java文本.表格word转换生成PDF加密文件代码下载,布布扣,bubuko.com

[ATL/WTL]_[中级]_[保存CBitmap到文件-保存屏幕内容到文件]

场景: 1. 在做图片处理时,比方放大后或加特效后须要保存CBitmap(HBITMAP)到文件. 2.截取屏幕内容到文件时. 3.不须要增加第3方库时. 说明: 这段代码部分来自网上.第一次学atl/wtl.gdi不是非常熟悉.以后转换为wtl版本号吧. 当然wtl项目直接用也没问题. 如今想想wxWidgets的wxImage类对这类操作方便多了.仅仅须要调用一个SaveFile方法. 保存HBITMAP到文件: static bool SaveBitmapToFile(CBitmap& b