• c#文本转语音以及语音阅读小实例


    c#实现语音阅读以及文本转语音文件是基于c#的一个类库SpeechSynthesizer 实现的,使用该类必须要添加引用using System.Speech.Synthesis;直接是无法添加引用的,先对项目进行添加应用

    示例图

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

    namespace 文本转语音Demo
    {
    public partial class Form1 : Form
    {
    private SpeechSynthesizer speech;

    /// <summary>
    /// 音量
    /// </summary>
    private int value=100;
    /// <summary>
    /// 语速
    /// </summary>
    private int rate;
    public Form1()
    {
    InitializeComponent();

    comboBox1.SelectedIndex = 10;
    }

    private void button1_Click(object sender, EventArgs e)
    {

    string text=textBox1.Text;

    if (text.Trim().Length == 0) {
    MessageBox.Show("不能阅读空内容!","错误提示");
    return;
    }

    if (button1.Text == "语音试听") {

    speech = new SpeechSynthesizer();

    new Thread(Speak).Start();

    button1.Text = "停止试听";

    }else if(button1.Text=="停止试听"){

    speech.SpeakAsyncCancelAll();//停止阅读

    button1.Text = "语音试听";
    }
    }


    private void Speak() {

    speech.Rate =rate;
    speech.SelectVoice("Microsoft Lili");//设置播音员(中文)
    //speech.SelectVoice("Microsoft Anna"); //英文
    speech.Volume = value;
    speech.SpeakAsync(textBox1.Text);//语音阅读方法
    speech.SpeakCompleted += speech_SpeakCompleted;//绑定事件
    }

    /// <summary>
    /// 语音阅读完成触发此事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    void speech_SpeakCompleted(object sender, SpeakCompletedEventArgs e)
    {
    button1.Text = "语音试听";
    }


    /// <summary>
    /// 拖动进度条事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void trackBar1_Scroll(object sender, EventArgs e)
    {
    //因为trackBar1的值为(0-10)之间而音量值为(0-100)所以要乘10;
    value = trackBar1.Value * 10;
    }

    private void button2_Click(object sender, EventArgs e)
    {



    string text = textBox1.Text;

    if (text.Trim().Length == 0)
    {
    MessageBox.Show("空内容无法生成!", "错误提示");
    return;
    }

    this.SaveFile(text);

    }

    /// <summary>
    /// 生成语音文件的方法
    /// </summary>
    /// <param name="text"></param>
    private void SaveFile(string text) {
    speech = new SpeechSynthesizer();
    var dialog = new SaveFileDialog();
    dialog.Filter = "*.wav|*.wav|*.mp3|*.mp3";
    dialog.ShowDialog();

    string path = dialog.FileName;
    if (path.Trim().Length == 0)
    {
    return;
    }
    speech.SetOutputToWaveFile(path);
    speech.Volume = value;
    speech.Rate = rate;
    speech.Speak(text);
    speech.SetOutputToNull();
    MessageBox.Show("生成成功!在" + path + "路径中!", "提示");

    }
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
    rate = Int32.Parse(comboBox1.Text);
    }

    private void 打开文件ToolStripMenuItem_Click(object sender, EventArgs e)
    {
    this.ReadlocalFile();

    }

    /// <summary>
    /// 读取本地文本文件的方法
    /// </summary>
    private void ReadlocalFile() {
    var open = new OpenFileDialog();

    open.ShowDialog();

    //得到文件路径
    string path = open.FileName;

    if (path.Trim().Length == 0)
    {

    return;
    }

    var os = new StreamReader(path, Encoding.UTF8);
    string str = os.ReadToEnd();
    textBox1.Text = str;
    }
    private void 清空内容ToolStripMenuItem_Click(object sender, EventArgs e)
    {
    textBox1.Text = "";
    }

    }
    }

    程序运行效果截图

  • 相关阅读:
    【字符串哈希】The 16th UESTC Programming Contest Preliminary F
    【推导】The 16th UESTC Programming Contest Preliminary L
    【推导】zoj3846 GCD Reduce
    【spfa】【动态规划】zoj3847 Collect Chars
    【搜索】【组合数学】zoj3841 Card
    【贪心】【字典树】Gym
    【贪心】【后缀自动机】Gym
    【拉格朗日插值法】【找规律】【高精度】Gym
    【二分】【动态规划】Gym
    【软件开发综合实验】文本压缩软件
  • 原文地址:https://www.cnblogs.com/zzjbk/p/5188797.html
Copyright © 2020-2023  润新知