C#文本转语音并保存wav和MP3文件

发表于:2014-5-30 10:11

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:青蘋果    来源:51Testing软件测试网采编

  还是把代码贴上来吧,主要代码如下:
privateSpeechSynthesizersynth=null;//语音对象
///<summary>
///返回一个SpeechSynthesizer对象
///</summary>
///<returns></returns>
privateSpeechSynthesizerGetSpeechSynthesizerInstance()
{
if(synth==null)
{
synth=newSpeechSynthesizer();
}
returnsynth;
}
///<summary>
///获得朗读设置对象
///</summary>
///<returns></returns>
privateVoiceClassGetVoiceClass()
{
VoiceClasssetViceClass=newVoiceClass();
setViceClass.VoiceName=cboTokens.Text;
setViceClass.Rate=int.Parse(cboSpeed.Text);
setViceClass.Volume=tbVoice.Value;
setViceClass.VoiceText=txtInput.Text;
returnsetViceClass;
}
///<summary>
///播放
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidbtnGo_Click(objectsender,EventArgse)
{
if(IsVaild())
{
VoiceClasssetViceClass=GetVoiceClass();//VoiceClass是自己建立的一个类,里面封转了语速音量播放人播放文本
Threadthread=newThread(RingVoice);
thread.Start(setViceClass);
}
}
///<summary>
///开始朗读放在线程中
///</summary>
///<paramname="VoiceObject"></param>
publicvoidRingVoice(objectVoiceObject)
{
try
{
VoiceClassvoiceClass=(VoiceClass)VoiceObject;
synth=GetSpeechSynthesizerInstance();
synth.SelectVoice(voiceClass.VoiceName);
synth.Rate=voiceClass.Rate;
synth.Volume=voiceClass.Volume;
synth.SpeakAsync(voiceClass.VoiceText);
}
catch(Exceptioner)
{
MessageBox.Show(er.ToString(),"提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
///<summary>
///保存
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidbtnSave_Click(objectsender,EventArgse)
{
if(IsVaild())
{
synth=GetSpeechSynthesizerInstance();
VoiceClassvoiceClass=GetVoiceClass();
synth.SelectVoice(voiceClass.VoiceName);
synth.Rate=voiceClass.Rate;
synth.Volume=voiceClass.Volume;
SaveFileDialogsaveFileDialog=newSaveFileDialog();
saveFileDialog.Title="保存文档";
saveFileDialog.Filter="*.wav|*.wav|*.mp3|*.mp3";
saveFileDialog.InitialDirectory=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
DialogResultsaveDialog=saveFileDialog.ShowDialog();
try
{
if(saveDialog==System.Windows.Forms.DialogResult.OK)
{
synth.SetOutputToWaveFile(saveFileDialog.FileName);
synth.Speak(voiceClass.VoiceText);
synth.SetOutputToNull();
System.Diagnostics.Process.Start("Explorer.exe",string.Format(@"/select,{0}",saveFileDialog.FileName));//打开wav目录并选中文件
}
}
catch(Exceptioner)
{
MessageBox.Show(er.ToString(),"提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
}
///<summary>
///继续
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidbtnContinum_Click(objectsender,EventArgse)
{
synth.Resume();
}
///<summary>
///暂停
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidbtnStop_Click(objectsender,EventArgse)
{
synth.Pause();
}
  有个问题,不知道是什么原因,要播放的内容:欢迎致电12345客服服务系统,它把12345给我朗读成:1万2千3百4十五。这个问题还在解决中,谁知道麻烦给我留下言,谢谢。
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号