如何使用微软的SAPI5.1中的TTS文语转换合成一个WAV文件,然后调用东进的API转换成PCM格式

来源:qqread 作者: 2007-12-01 出处:pcdog.com

sas  
如何使用微软的SAPI5.1中的 TTS 文语转换 合成一个WAV文件,然后调用东进的API转换成PCM格式
添加SAPI。DLL的引用后,如下代码就可以运行


using  System;
using  System.Threading;

using  System.Windows.Forms;
using  SpeechLib;

namespace  ctiserver
{     
///  <summary>
///  DotNetTTS  
///  文-语转换
///  Author: 武眉播,活靶子 huobazi@aspxboy.com
///  Date: 2005-04--11
///  </summary>
public  class  DotNetTTS
{
///  <summary>
///  文-语转换合成一个Pcm音频文件
///  返回文件名
///  注意:返回值可能为null
///  Author: 武眉博 huobazi@aspxboy.com
///  Date: 2005-4-11
///  </summary>
///  <param  name="strFileContent">文件内容</param>
///  <returns>String:带路径的文件名</returns>
public  static  string  MakePcmFile(  string  strFileContent)
{
string  strResult  =  null;
string  strFileDir  =  Application.StartupPath  +  @"\TempVoc\";
try
{
string  guid  =  Guid.NewGuid().ToString();
string  strTempWavFileName  =  "Temp_"  +  guid  +  ".wav";
SpeechVoiceSpeakFlags  SpFlags  =  SpeechVoiceSpeakFlags.SVSFlagsAsync;
SpVoice  Voice  =  new  SpVoiceClass();
SpObjectToken  sot  =  Voice.GetVoices(String.Empty,String.Empty).Item(0);    
Voice.Voice  =  sot;
SpeechStreamFileMode  SpFileMode  =  SpeechStreamFileMode.SSFMCreateForWrite;
SpFileStream  SpFileStream  =  new  SpFileStream();
SpFileStream.Format.Type  =  SpeechAudioFormatType.SAFT8kHz16BitMono;  
SpFileStream.Open(strFileDir  +  strTempWavFileName  ,  SpFileMode,  false);
Voice.AudioOutputStream  =  SpFileStream;
Voice.Speak(strFileContent,  SpFlags);
Voice.WaitUntilDone(Timeout.Infinite);
SpFileStream.Close();
//转换Wave文件到Pcm文件
System.Threading.Thread.Sleep(10);

string  strTempPcmFileName  =  "Temp_"  +  guid  +  ".wmb";
byte[]  FWaveName  =  PhoneFile.GetFilePath(strTempWavFileName,PhoneFile.FileType.TempFile);
byte[]  FPcmName  =  PhoneFile.GetFilePath(strTempPcmFileName,PhoneFile.FileType.TempFile);

int  intflag  =  dj160api.wavetopcm(fwavename,fpcmname);
if(intFlag  ==  1)
{
strResult  =  strTempPcmFileName;
}
}
catch(Exception  ex)
{
throw  new  Exception("合成音频文件出现错误:",ex);
}
  return  strResult;
}
}
}



上一篇:如何调试你的C#程序(3)
下一篇:如何用VisualC#来创建、修改注册信息