程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中實現語音朗讀(短信 & 語音短信)

C#中實現語音朗讀(短信 & 語音短信)

編輯:C#入門知識

一個項目中,客戶要求實現給集團公司員工發送短信如,拜年短信等。另,支持給領導發送語音短信。實現方法如下。

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);    簡單的語音短信就生成了。    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved