如何在C#中实现语音朗读

原创|其它|编辑:郝浩|2009-02-27 01:42:37.000|阅读 2281 次

概述:一个项目中,客户要求实现给集团公司员工发送短信如,拜年短信等。另,支持给领导发送语音短信。实现方法如下。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

  一个项目中,客户要求实现给集团公司员工发送短信如,拜年短信等。另,支持给领导发送语音短信。实现方法如下。

  1、群发短信有几种方式:

  1.1 短信猫: 一个普通的工控机,插入SIM卡,可以通过接口的方式发送短信,点对点发送,到达率快准确,但是呼出的号码是普通的手机号码。 缺点:移动对SIM卡的限制是每小时200条,发送太多会锁卡。 目前短信猫有8端口的,即1小时最多能发送1600条。每条短信的价格为0.1元。  技术实现:一般配合短信猫有SDK组件,才共享数据库作为接口。定义4个表:待发送表,发送成功表,发送失败表,消息接收表(系统可接收和处理短信用户发送的短信,进行双向互动)。

  1.2 SP方式:有专门做短信的SP厂商提供各种接口,只需要调用就可以,达到率看你申请的是何种业务,也可以保证你呼出的是一特服号,不需要购买任何设备,适合于提供公用信息的业务,目标号码不确定。具体发送费用需要跟sp厂商谈判,据说最便宜的能谈到4分钱。

  在此,谴责一下SP厂商对垃圾短信的放任。

  1.3 移动企信通  :一个工控机,移动提供的。有特服号,到达率都很高,但是有发送人员白名单的限制,适合企业内部使用。移动提供SDK开发包,具体费用根据短信数量采用对应的包月模式,发送费用5分钱。 这是我们准备采用的方式。

  2、群发语音短信

  联系SP厂商,可采用租用坐席方式做外呼,只播放语音。厂商提供接口,上传wav文件和发送人员列表到服务器。

  语音短信开发中,涉及到如何将录入的文字朗读出来并保存为wav文件,即TTS。项目中采用微软的SAPI 5开发步骤如下:

  1. 下载SAPI SDK 和语言包(支持中文和日语):

  SAPI 5 SDK: http://download.microsoft.com/download/speechSDK/SDK/5.1/WXP/EN-US/speechsdk51.exe

  语言包: http://download.microsoft.com/download/speechSDK/SDK/5.1/WXP/EN-US/speechsdk51LangPack.exe

  2. 通读 陈本峰 的文章 : .Net平台下开发中文语音应用程序  http://www.microsoft.com/china/community/program/originalarticles/TechDoc/Cnspeech.mspx

  其中Com组件导入,可以采用Visual Studio的导入Com组件界面完成。

  

 

  代码如下

  //朗读

  private void buttonSynthesis_Click(object sender, System.EventArgs e)

  {

  try

  {

  SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;

  SpVoice Voice = new SpVoice();

  Voice.Speak(this.textBoxText.Text, SpFlags);

  }

  catch(Exception er)

  {

  MessageBox.Show("An Error Occured!","SpeechApp", MessageBoxButtons.OK, MessageBoxIcon.Error);

  }

  }

  //生成声音文件(Wav)

  private void buttonTTStoWave_Click(object sender, System.EventArgs e)

  {

  try

  {

  SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;

  SpVoice Voice = new SpVoice();

  SaveFileDialog sfd = new SaveFileDialog();

  sfd.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav";

  sfd.Title = "Save to a wave file";

  sfd.FilterIndex = 2;

  sfd.RestoreDirectory = true;

  if (sfd.ShowDialog()== DialogResult.OK)

  {

  SpeechStreamFileMode SpFileMode = SpeechStreamFileMode.SSFMCreateForWrite;

  SpFileStream SpFileStream = new SpFileStream();

  SpFileStream.Open(sfd.FileName, SpFileMode, false);

  Voice.AudioOutputStream = SpFileStream;

  Voice.Speak(txtSpeakText.Text, SpFlags);

  Voice.WaitUntilDone(Timeout.Infinite);

  SpFileStream.Close();

  }

  }

  catch(Exception er)

  {

  MessageBox.Show("An Error Occured!","SpeechApp", MessageBoxButtons.OK, MessageBoxIcon.Error);

  }

  }

  3. 采用文章中方法后,我们遇到了问题,系统只能朗读英文,不支持中文朗读。解决方法,定义SpVoice对象的Voice属性为中文类型。

  ISpeechObjectTokens tokens = voice.GetVoices(string.Empty, string.Empty);

  int index = GetChineseVoiceIndex(tokens);

  voice.Voice = tokens.Item(index);

  简单的语音短信就生成了。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:博客园

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP