700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java调用微软语音库 程序员罗杰-.NET C# 语音合成源码(TTS)微软库

java调用微软语音库 程序员罗杰-.NET C# 语音合成源码(TTS)微软库

时间:2024-01-16 03:38:55

相关推荐

java调用微软语音库 程序员罗杰-.NET C# 语音合成源码(TTS)微软库

应表哥要求,写一个简单的TTS软件,他们单位上用于广播通知用。源码如下:

简单说明:

publicpartialclassfrmMain:Form

{

publicfrmMain()

{

InitializeComponent();

comboBox1.DropDownStyle=ComboBoxStyle.DropDownList;

}

SpVoiceUtilSpVoiceUtil=newSpVoiceUtil();

privatevoidfrmMain_Load(objectsender,EventArgse)

{

Control.CheckForIllegalCrossThreadCalls=false;

Listlist=SpVoiceUtil.getDescription();

foreach(variteminlist)

{

comboBox1.Items.Add(item);

}

if(comboBox1.Items.Count>0)

{

comboBox1.SelectedIndex=0;

}

}

privatevoidcomboBox1_SelectedIndexChanged(objectsender,EventArgse)

{

SpVoiceUtil.setDescription(this.Text);

}

//暂停

privatevoidbutton2_Click(objectsender,EventArgse)

{

SpVoiceUtil.Pause();

}

//继续

privatevoidbutton5_Click(objectsender,EventArgse)

{

SpVoiceUtil.Resume();

}

//停止

privatevoidbutton3_Click(objectsender,EventArgse)

{

SpVoiceUtil.Stop();

}

//设置语速

privatevoidtrackBar1_Scroll(objectsender,EventArgse)

{

lab_Rate.Text=trackBar1.Value.ToString();

SpVoiceUtil.setRate(trackBar1.Value);

}

//设置音量

privatevoidtrackBar2_Scroll(objectsender,EventArgse)

{

lab_Volume.Text=trackBar2.Value.ToString();

SpVoiceUtil.setVolume(trackBar2.Value);

}

//开始朗读

privatevoidbutton1_Click(objectsender,EventArgse)

{

SpVoiceUtil.Speak(txt_str.Text,CallBack);

}

//写出WAV

privatevoidbutton4_Click(objectsender,EventArgse)

{

boolisTrue=false;

SaveFileDialogdialog=newSaveFileDialog();

dialog.Filter="Allfiles(*.*)|*.*|wavfiles(*.wav)|*.wav";

dialog.Title="保存WAV文件";

dialog.FilterIndex=2;

dialog.RestoreDirectory=true;

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

{

isTrue=SpVoiceUtil.WreiteToWAV(dialog.FileName,txt_str.Text,DotNetSpeech.SpeechAudioFormatType.SAFT11kHz16BitMono);

}

if(isTrue)

{

MessageBox.Show("输出成功");

}

else{

MessageBox.Show("输出失败");

}

}

//回调信息

privatevoidCallBack(boolb,intInputWordPosition,intInputWordLength)

{

textBox1.AppendText("是否读完:"+b.ToString()+"\r\n");

textBox1.AppendText("朗读长度:"+InputWordPosition.ToString()+"\r\n");

textBox1.AppendText("朗读位置:"+InputWordLength.ToString()+"\r\n");

}

}

namespaceSpVoiceDemo

{

classSpVoiceUtil

{

SpVoicevoice=newDotNetSpeech.SpVoiceClass();

publicdelegatevoidCallBack(boolb,intInputWordPosition,intInputWordLength);

///

///朗读文本

///

///要朗读的文本

///回调地址

///返回bool

publicboolSpeak(stringstr,CallBackCallBack)

{

intn=voice.Speak(str,SpeechVoiceSpeakFlags.SVSFlagsAsync);

Threadthread=newThread(newParameterizedThreadStart(Call));

thread.IsBackground=true;

thread.Start((Object)CallBack);

return!(n!=1);

}

///

///回调函数线程子程序

///

///

privatevoidCall(ObjectcallBack)

{

intInputWordLength=0;//局部_朗读长度

intInputWordPosition=0;//局部_朗读位置

CallBackCallBack=(CallBack)callBack;

while((int)voice.Status.RunningState!=1)

{

if(InputWordPosition!=voice.Status.InputWordPosition||InputWordLength!=voice.Status.InputWordLength)

{

InputWordPosition=voice.Status.InputWordPosition;

InputWordLength=voice.Status.InputWordLength;

//回调

CallBack(false,InputWordPosition,InputWordLength);

}

}

CallBack(true,InputWordPosition,InputWordLength);

}

///

///获取语音库

///

///List

publicListgetDescription()

{

Listlist=newList();

DotNetSpeech.ISpeechObjectTokensobj=voice.GetVoices();

intcount=obj.Count;//获取语音库总数

for(inti=0;i

{

stringdesc=obj.Item(i).GetDescription();//遍历语音库

list.Add(desc);

}

returnlist;

}

///

///设置当前使用语音库

///

///bool

publicboolsetDescription(stringname)

{

Listlist=newList();

DotNetSpeech.ISpeechObjectTokensobj=voice.GetVoices();

intcount=obj.Count;//获取语音库总数

boolresult=false;

for(inti=0;i

{

stringdesc=obj.Item(i).GetDescription();//遍历语音库

if(desc.Equals(name))

{

voice.Voice=obj.Item(i);

result=true;

}

}

returnresult;

}

///

///设置语速

///

///

publicvoidsetRate(intn)

{

voice.Rate=n;

}

///

///设置声音大小

///

///

publicvoidsetVolume(intn)

{

voice.Volume=n;

}

///

///暂停

///

publicvoidPause()

{

voice.Pause();

}

///

///继续

///

publicvoidResume()

{

voice.Resume();

}

///

///停止

///

publicvoidStop()

{

voice.Speak(string.Empty,SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak);

}

///

///输出WAV

///

///保存路径

///要转换的文本内容

///

publicboolWreiteToWAV(stringpath,stringstr,SpeechAudioFormatTypeSpAudioType)

{

SpeechStreamFileModeSpFileMode=SpeechStreamFileMode.SSFMCreateForWrite;

SpFileStreamSpFileStream=newSpFileStream();

SpeechVoiceSpeakFlagsSpFlags=SpeechVoiceSpeakFlags.SVSFlagsAsync;

SpAudioFormatSpAudio=newDotNetSpeech.SpAudioFormat();

SpAudio.Type=SpAudioType;

SpFileStream.Format=SpAudio;

SpFileStream.Open(path,SpFileMode,false);

voice.AudioOutputStream=SpFileStream;

voice.Speak(str,SpFlags);

voice.WaitUntilDone(Timeout.Infinite);

SpFileStream.Close();

returnFile.Exists(path);

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。