VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > C#教程 >
  • c#中实现语音朗读短信和语音短信SMS

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

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

  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组件界面完成。

C#中实现语音朗读(短信 & 语音短信)sms

  代码如下

  代码来自 : 陈本峰

//朗读
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);

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

 

 

  语言包: 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组件界面完成。

C#中实现语音朗读(短信 & 语音短信)sms

  代码如下

  代码来自 : 陈本峰

//朗读
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);

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

 



相关教程