• TTS语音


    DotNetSpeech.dll 引用

    using DotNetSpeech;

     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);
            }
        }
    View Code

    Interop.SpeechLib.dll   引用

     using SpeechLib;

     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);
            }
        }
    View Code

    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;
            }
        }
    }
    View Code
  • 相关阅读:
    gRPC错误码 http状态码 provide your APIs in both gRPC and RESTful style at the same time
    rust
    lz4 1
    剖析美团内部所采用的网站压力测试方案
    【NOIP2002提高组T4】矩形覆盖-DFS剪枝
    【NOIP2002提高组T4】矩形覆盖-DFS剪枝
    【POJ2777】Count Color-线段树区间更新
    【POJ2777】Count Color-线段树区间更新
    【NOIP2005提高组T3】篝火晚会-置换群
    【NOIP2005提高组T3】篝火晚会-置换群
  • 原文地址:https://www.cnblogs.com/zlcom/p/3490808.html
Copyright © 2020-2023  润新知