文本转语音播放
bool Voice(string info)
{
int rate = Convert.ToInt16(ReadSetting("SoundRate")); bool Result = false; try { //.net4.0以上版本支持下面的方式 // dynamic spVoice = Activator.CreateInstance(Type.GetTypeFromProgID("SAPI.SpVoice", true)); // spVoice.Volume = 60; //定义音量大小:0~100 // spVoice.Speak(info);//阻塞进程 // // return true; //////////////////////// SRead sP = new SRead(); Result = sP.SpeakChina(info, VoiceName, 100, rate, saveWavFile); mdg_Decode.write_log("采用SpeechSynthesizer合成语音 ", 1, 1); } catch (Exception e) { mdg_Decode.write_log("发生错误:" + e.Message, 1, 1); } finally { if (!Result) { mdg_Decode.write_log("采用net4.0以上版本支持的 dynamic spVoice ", 1, 1); //.net4.0以上版本支持下面的方式 try { dynamic spVoice = Activator.CreateInstance(Type.GetTypeFromProgID("SAPI.SpVoice")); // spVoice.Voice(VoiceName); // synth.SpeakAsync(sndtext); //异步读 //String speechPeople = synth.Voice; //使用 synth 设置朗读音量 [范围 0 ~ 100] spVoice.Volume = 100; //使用 synth 设置朗读频率 [范围 -10 ~ 10] spVoice.Rate = rate; //使用synth 合成 wav 音频文件: //synth.SetOutputToWaveFile(string path); spVoice.Speak(info); // spVoice.Dispose(); } catch (Exception e) { mdg_Decode.write_log("发生错误:" + e.Message, 1, 1); } finally { mdg_Decode.write_log("ok:播放完毕", 1, 1); } } }; return true; } public class SRead { public SpeechSynthesizer synth; //语音合成对象 public SRead() { synth = new SpeechSynthesizer(); } public SRead(int m, int n) { //使用 synth 设置朗读音量 [范围 0 ~ 100] synth.Volume = m; //使用 synth 设置朗读频率 [范围 -10 ~ 10] synth.Rate = n; } public bool SpeakChina(string sndtext, string VoiceName, int Volume=90, int Rate=0,string WavFile="") { bool Result = false; FileStream fs1=null; StreamWriter m_streamWriter1 = null; try { int count = 0; string log_filename = @"Voice_list" + ".txt"; fs1 = new FileStream(log_filename, FileMode.Create, FileAccess.Write); m_streamWriter1 = new StreamWriter(fs1); m_streamWriter1.BaseStream.Seek(0, SeekOrigin.End); foreach (InstalledVoice voices in synth.GetInstalledVoices()) //可查看本地电脑已经安装的语音包 { count++; m_streamWriter1.WriteLine("已安装语音库:" + voices.VoiceInfo.Name + "\r\n"); } if (count > 0) { synth.SelectVoice(VoiceName); } } catch (Exception e) { mdg_Decode.write_log("查找支持的语音库发生错误:" + e.Message, 1, 1); } finally { m_streamWriter1.Flush(); m_streamWriter1.Close(); fs1.Close(); } try { // synth.SelectVoiceByHints(VoiceGender.Male, VoiceAge.Child, 2, System.Globalization.CultureInfo.CurrentCulture); //Voice.Speak(sndtext, SpFlags); // synth.SpeakAsyncCancelAll(); // mdg_Decode.write_log("SpeakAsyncCancelAll:", 1, 1); // synth.SpeakAsync(sndtext); //异步读 // mdg_Decode.write_log("Speak:", 1, 1); //String speechPeople = synth.Voice; //使用 synth 设置朗读音量 [范围 0 ~ 100] synth.Volume = Volume; // mdg_Decode.write_log("Volume:", 1, 1); //使用 synth 设置朗读频率 [范围 -10 ~ 10] synth.Rate = Rate; // mdg_Decode.write_log("Rate:", 1, 1); if (WavFile != "") { synth.SetOutputToWaveFile(WavFile); synth.Speak(sndtext); // synth.SpeakAsync(sndtext); //异步读 } //使用synth 合成 wav 音频文件: synth.SetOutputToDefaultAudioDevice(); synth.Speak(sndtext);//输出到默认声音设备 //synth.SpeakAsync(sndtext); //异步读 synth.Dispose(); Result = true; } catch (Exception e) { mdg_Decode.write_log("播放时发生错误:" + e.Message, 1, 1); Result = false; } return Result; } public void SpeakEnglish(string sndtext) { //SpVoice Voice = new SpVoice(); synth.SelectVoice("VW Julie"); synth.Speak(sndtext); //sndtext为要合成的内容 synth.Dispose(); } public int m { get { return synth.Volume; } set { synth.Volume = value; } }
public int n
{
get
{
return synth.Rate;
}
set
{
synth.Rate = value;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端