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;
}
}
}