C#之语音朗读

C# 可以通过引用.net framework 框架下的语音播放来实现自己的语音播放。


先来看看简单的效果示例:

C#之语音朗读_第1张图片

  上图的主要控件是: TextBox,button .

当我们点击语音朗读按钮,程序将自动朗读(女生朗读)文本框内的内容


笔者开发平台:Vs2013.     开发语言:C#


下面附上关键源码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Speech.Synthesis;          ///------一定要加上这个命名空间

namespace Volum
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        ///---声明 语音朗读对象
        SpeechSynthesizer sps = new SpeechSynthesizer();

        ///---关闭对话框事件,即 退出按钮事件
        private void exitBtn_Click(object sender, EventArgs e)
        {
            ///---释放 SpeechSynthesizer 对象占有的资源
            sps.Dispose();
            ///----退出,关闭对话框
            Application.Exit();
        }

        ///---语音朗读按钮事件
        private void voiceBtn_Click(object sender, EventArgs e)
        {
          if (text_Box.Text != "")
          {
              ///---设置语音播放的音量
              sps.Volume = 20;

              ///--设置语音播放速率
              sps.Rate = 4;

              ///---SpeechSynthesizer 获取 text_Box内的文字并进行朗读。
              sps.SpeakAsync(text_Box.Text);
          }
        }
    }
}

接着是引用 该语音播放 的步骤:

1,解决方案资源管理器面板上找到 引用 , 并 右键点击 “引用”, 选中 “添加引用(R)..” 

C#之语音朗读_第2张图片

2, 在弹出的对话框中 ,按照下步骤图操作:

C#之语音朗读_第3张图片


3, 在完成上面的步骤后,记得 添加 命名 空间

using System.Speech.Synthesis; 


 添加引用告一段落。

再对上面代码的注释做补充。

SpeechSynthesizer将提供对 本地计算机上已经安装的语音合成引擎的访问

 ///---SpeechSynthesizer 获取 text_Box内的文字并进行朗读。
              sps.SpeakAsync(text_Box.Text);
 上面的这行代码,该对象将会创建子线程进行对文本框内的内容进行朗读,以至于界面不会被锁死

SpeechSynthesizer 的对象的 朗读还可 以 写成这样:

sps.Speak(text_Box.Text);
但是, Speak 会使得当前界面处于锁死状态,不利于人机交互。
///--设置语音播放速率
              sps.Rate = 4;
这里是设置语音播放的速率,这里,Rate的取值范围是: -10  ~ + 10
 ///---设置语音播放的音量
              sps.Volume = 20;
设置语音播放的音量。这里的取值范围为: 0 ~100

///---释放 SpeechSynthesizer 对象占有的资源
            sps.Dispose();
当然, 在退出的时候,别忘了释放线程所占有的资源。


控件的属性设置, 这里就不做介绍了。

这里是源码的下载地址:

http://url.cn/awovu7






// ============ 更新 ===================== //

已经好久没有接触过C# 了

针对 下面这位博友的疑问。我重新下关于朗读文件,特别是保存前后。

平台:VS2013(旗舰版)

语言:C#

更新内容:保存前后的语音朗读



效果图:

C#之语音朗读_第4张图片


/ ============= 注意 ============ /

记得添加引用(和上面的添加方式是一样的)

在该网页上,查找关键词语的快捷方法是:Ctrl+F,输入查找内容。 即可快速找到你想要查找的内容。


源码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech.Synthesis;
using System.IO;


namespace testVolum
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private SpeechSynthesizer sps = new SpeechSynthesizer();

        private string m_Str = "IOS安全攻防系列丛书,看完本书,你可以对IOS安全不及格的分数提升到80分";
        private void Form1_Load(object sender, EventArgs e)
        {
            /// 设置要保存和朗读的信息
            m_textBox.Text = m_Str;
        }

        /// 
        /// 保存按钮被单机事件
        /// 
        /// 
        /// 
        private void saveBtn_Click(object sender, EventArgs e)
        {
            /// 检查文本框中的内容是否为空,不为空,就保存
            if (string.Empty != m_textBox.Text)
            {
                /// 保存文件
                saveFileFunc();
                /// 禁用
                saveBtn.Enabled = false;
            }
            else
            {
                MessageBox.Show("注意:保存的数据不能为空");
            }
        }

        private void saveFileFunc()
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "(*.txt)|*.txt|(*.*)|*.*";
            sfd.AddExtension = true;
            sfd.RestoreDirectory = true;
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                /// textBox2.Text = sfd.FileName;
                FileStream fs = new FileStream(sfd.FileName, FileMode.Create);
                StreamWriter sw = new StreamWriter(fs);
                try
                {
                    sw.Write(m_textBox.Text);
                    sw.Flush();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
                finally
                {
                    sw.Close();
                    fs.Close();
                }
            }
        }

        private void m_textBox_TextChanged(object sender, EventArgs e)
        {
            if (m_Str != m_textBox.Text)
            {
                m_Str = m_textBox.Text;
                /// 保存按钮启用
                saveBtn.Enabled = true;
            }
        }

        /// 
        ///  语音朗读
        /// 
        /// 
        /// 
        private void readBtn_Click(object sender, EventArgs e)
        {
            if (string.Empty == m_textBox.Text)
            {
                MessageBox.Show("朗读内容不能为空"); 
                return;
            }
            readTextBoxContent();
        }

        private void readTextBoxContent()
        {
            

            sps.Volume = 20;
            sps.Rate = 4;
            sps.SpeakAsync(m_textBox.Text);
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            /// 释放加载的资源
            sps.Dispose();
        }

        /// 
        ///  打开按钮的被单击事件
        /// 
        /// 
        /// 
        private void openBtn_Click(object sender, EventArgs e)
        {
            /// 清空
            m_textBox.Text = "";

            /// 打开文件
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "(*.txt)|*.txt|(*.*)|*.*";
            ofd.RestoreDirectory = true;

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                FileStream fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read);
                StreamReader sr = new StreamReader(fs);
                try
                {
                    ofd.OpenFile(); //打开文件
                    string line = sr.ReadLine(); //读取文本行
                    while (line != null)
                    {
                        m_textBox.Text += line + "\n";  //换行后继续读取直至line==null
                        line = sr.ReadLine();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
                finally
                {
                    sr.Close();
                    fs.Close();
                }
            }
        }
    }
}

这次源码的下载地址:

http://pan.baidu.com/s/1geqnOZ5

                         ======    若无法下载,请及时留言。  =========

你可能感兴趣的:(C#,C#语音,语音朗读,保存文件前后语音朗读无误)