DotNetSpeech.dll 引用
using DotNetSpeech;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class SpVoiceUtil { //SpVoice voice = new SpVoice (); SpVoice voice = new DotNetSpeech.SpVoiceClass(); public delegate void CallBack(bool b, int InputWordPosition, int InputWordLength); /// <summary> /// 朗读文本 /// </summary> /// <param name="str">要朗读的文本</param> /// <param name="CallBack">回调地址</param> /// <returns>返回bool</returns> public bool Speak(string str, CallBack CallBack) { int n = voice.Speak(str, SpeechVoiceSpeakFlags.SVSFlagsAsync); Thread thread = new Thread(new ParameterizedThreadStart(Call)); thread.IsBackground = true; thread.Start((Object)CallBack); return !(n != 1); } /// <summary> /// 回调函数线程子程序 /// </summary> /// <param name="callBack"></param> private void Call(Object callBack) { int InputWordLength = 0; //局部_朗读长度 int InputWordPosition = 0; //局部_朗读位置 CallBack CallBack = (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); } /// <summary> /// 获取语音库 /// </summary> /// <returns>List<string></returns> public List<string> getDescription() { List<string> list = new List<string>(); DotNetSpeech.ISpeechObjectTokens obj = voice.GetVoices(null ,null ); int count = obj.Count;//获取语音库总数 for (int i = 0; i < count; i++) { string desc = obj.Item(i).GetDescription(i); //遍历语音库 list.Add(desc); } return list; } /// <summary> /// 设置当前使用语音库 /// </summary> /// <returns>bool</returns> public bool setDescription(string name) { List<string> list = new List<string>(); DotNetSpeech.ISpeechObjectTokens obj = voice.GetVoices(null ,null ); int count = obj.Count;//获取语音库总数 bool result = false; for (int i = 0; i < count; i++) { string desc = obj.Item(i).GetDescription(i); //遍历语音库 if (desc.Equals(name)) { voice.Voice = obj.Item(i); result = true; } } return result; } /// <summary> /// 设置语速 /// </summary> /// <param name="n"></param> public void setRate(int n) { voice.Rate = n; } /// <summary> /// 设置声音大小 /// </summary> /// <param name="n"></param> public void setVolume(int n) { voice.Volume = n; } /// <summary> /// 暂停 /// </summary> public void Pause() { voice.Pause(); } /// <summary> /// 继续 /// </summary> public void Resume() { voice.Resume(); } /// <summary> /// 停止 /// </summary> public void Stop() { voice.Speak(string.Empty, SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak); } /// <summary> /// 输出WAV /// </summary> /// <param name="path">保存路径</param> /// <param name="str">要转换的文本内容</param> /// <returns></returns> public bool WreiteToWAV(string path, string str, SpeechAudioFormatType SpAudioType) { SpeechStreamFileMode SpFileMode = SpeechStreamFileMode.SSFMCreateForWrite; SpFileStream SpFileStream = new SpFileStream(); SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync; SpAudioFormat SpAudio = new DotNetSpeech.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(); return File.Exists(path); } }
Interop.SpeechLib.dll 引用
using SpeechLib;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class SpVoiceUtil2 { SpVoice voice = new SpVoice(); //SpVoice voice = new DotNetSpeech.SpVoiceClass(); public delegate void CallBack(bool b, int InputWordPosition, int InputWordLength); /// <summary> /// 朗读文本 /// </summary> /// <param name="str">要朗读的文本</param> /// <param name="CallBack">回调地址</param> /// <returns>返回bool</returns> public bool Speak(string str, CallBack CallBack) { int n = voice.Speak(str, SpeechVoiceSpeakFlags.SVSFlagsAsync); Thread thread = new Thread(new ParameterizedThreadStart(Call)); thread.IsBackground = true; thread.Start((Object)CallBack); return !(n != 1); } /// <summary> /// 回调函数线程子程序 /// </summary> /// <param name="callBack"></param> private void Call(Object callBack) { int InputWordLength = 0; //局部_朗读长度 int InputWordPosition = 0; //局部_朗读位置 CallBack CallBack = (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); } /// <summary> /// 获取语音库 /// </summary> /// <returns>List<string></returns> public List<string> getDescription() { List<string> list = new List<string>(); ISpeechObjectTokens obj = voice.GetVoices (null ,null ); int count = obj.Count;//获取语音库总数 for (int i = 0; i < count; i++) { string desc = obj.Item(i).GetDescription (i); //遍历语音库 list.Add(desc); } return list; } /// <summary> /// 设置当前使用语音库 /// </summary> /// <returns>bool</returns> public bool setDescription(string name) { List<string> list = new List<string>(); ISpeechObjectTokens obj = voice.GetVoices(null, null); int count = obj.Count;//获取语音库总数 bool result = false; for (int i = 0; i < count; i++) { string desc = obj.Item(i).GetDescription(i); //遍历语音库 if (desc.Equals(name)) { voice.Voice = obj.Item(i); result = true; } } return result; } /// <summary> /// 设置语速 /// </summary> /// <param name="n"></param> public void setRate(int n) { voice.Rate = n; } /// <summary> /// 设置声音大小 /// </summary> /// <param name="n"></param> public void setVolume(int n) { voice.Volume = n; } /// <summary> /// 暂停 /// </summary> public void Pause() { voice.Pause(); } /// <summary> /// 继续 /// </summary> public void Resume() { voice.Resume(); } /// <summary> /// 停止 /// </summary> public void Stop() { voice.Speak(string.Empty, SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak); } /// <summary> /// 输出WAV /// </summary> /// <param name="path">保存路径</param> /// <param name="str">要转换的文本内容</param> /// <returns></returns> public bool WreiteToWAV(string path, string str, SpeechAudioFormatType SpAudioType) { SpeechStreamFileMode SpFileMode = SpeechStreamFileMode.SSFMCreateForWrite; SpFileStream SpFileStream = new SpFileStream(); SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync; SpAudioFormat SpAudio = new 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(); return File.Exists(path); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Text.RegularExpressions; using System.Data.SqlClient; using SpeechLib; using System.Collections; namespace WindowsApplication1 { public partial class Form1 : Form { SpVoiceClass voic = new SpVoiceClass(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { comboBox1.DataSource = getDescription(); comboBox2.DataSource = getAutoDescription(); } public void CallBack(bool b, int InputWordPosition, int InputWordLength) { } private void button1_Click(object sender, EventArgs e) { Speak(textBox1.Text); return; //SpVoiceUtil2 sp = new SpVoiceUtil2(); //sp.setVolume(trackBar2.Value); //sp.setRate(trackBar1.Value); //sp.setDescription(comboBox1.Text); //SpVoiceUtil2.CallBack calback = new SpVoiceUtil2.CallBack(CallBack); //sp.Speak(textBox1.Text, calback); return; try { //voic.Voice = voic.GetVoices(null, null).Item(comboBox1.SelectedIndex); voic.Voice = voic.GetVoices(null, null).Item(get("VW Lily")); voic.AudioOutput = voic.GetAudioOutputs(null, null).Item(comboBox2.SelectedIndex); voic.Rate = trackBar1.Value; voic.Volume = 100;// trackBar2.Value; voic.Speak(textBox1.Text, SpeechVoiceSpeakFlags.SVSFlagsAsync); } catch(Exception ex) { MessageBox.Show(ex.Message); } } /// <summary> /// 获取语音库 /// </summary> /// <returns>List<string></returns> public List<string> getDescription() { List<string> list = new List<string>(); ISpeechObjectTokens obj = voic.GetVoices(null, null); int count = obj.Count;//获取语音库总数 for (int i = 0; i < count; i++) { string desc = obj.Item(i).GetDescription(i); //遍历语音库 list.Add(desc); } return list; } public List<string> getAutoDescription() { List<string> list = new List<string>(); ISpeechObjectTokens obj = voic.GetAudioOutputs(null, null); int count = obj.Count; for (int i = 0; i < count; i++) { string desc = obj.Item(i).GetDescription(i); list.Add(desc); } return list; } public void Speak(string strValue) { try { voic.Voice = voic.GetVoices(null, null).Item(2); voic.AudioOutput = voic.GetAudioOutputs(null, null).Item(0); voic.Rate = 0; voic.Volume = 100; voic.Speak(strValue, SpeechVoiceSpeakFlags.SVSFDefault); } catch { } } public int get(string strName) { voic = new SpVoiceClass(); int k = 0; ISpeechObjectTokens obj = voic.GetVoices(null, null); int count = obj.Count; for (int i = 0; i < count; i++) { if (strName == obj.Item(i).GetDescription(i)) { k = i; break; } } return k; } } }