文档章节

C# 朗读文本工具(可将朗读后的声音保存到文件)

北风其凉
 北风其凉
发布于 2014/08/12 16:37
字数 614
阅读 246
收藏 2

一、关于本文

Antonia下载地址:http://pan.baidu.com/s/1yCoEE

这个程序可以将字符串读出,或是将朗读后的声音保存到WAV格式的文件中

测试电脑会不会说话,可以新建立一个文本文件,输入代码:

CreateObject("SAPI.SpVoice").Speak "你好"

命名为“你好.vbs”,双击运行,会说话的电脑会读出最后面两个引号中的字符串。

我的Win7里有Lili和Anna两个声音,都是女声,Lili可以朗读汉语和英语,Anna只会读英语。

二、程序控件

三、程序代码

与朗读有关的函数被封装在类Narrator中

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;

//需要手动添加引用 System.Speech
using System.Speech.Synthesis;

namespace Antonia
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }

        //初始化程序控件
        private void FormMain_Load(object sender, EventArgs e)
        {
            //朗读文本类
            Narrator nrr = new Narrator();

            //初始化音量下拉框
            cmbVolumn.Items.AddRange(
                new string[] { "50", "100", "150", "200", "250", "300" });
            cmbVolumn.Text = nrr.Volumn.ToString();

            //初始化音质下拉框
            cmbVoice.Items.Add("#Default#");
            cmbVoice.Items.AddRange(nrr.GetVoice());
            cmbVoice.Text = "#Default#";
        }

        //是否朗读后保存到文件
        private void chkExportToFile_CheckedChanged(object sender, EventArgs e)
        {
            txtFilePath.ReadOnly = !chkExportToFile.Checked;
        }

        //朗读声音,或将声音保存到文件
        private void btnBoom_Click(object sender, EventArgs e)
        {
            Narrator nrr = new Narrator();
            //声音音量
            nrr.Volumn = int.Parse(cmbVolumn.Text);
            //声音类型
            if (cmbVoice.Text != "#Default#")
            {
                nrr.SelectVoice(cmbVoice.Text);
            }
            //声音生成
            if (chkExportToFile.Checked) //将声音保存到文件
            {
                //有同名文件先删除
                if (System.IO.File.Exists(txtFilePath.Text + ".wav"))
                {
                    System.IO.File.Delete(txtFilePath.Text + ".wav");
                }
                //保存到文件
                nrr.ExportToWave(txtFilePath.Text + ".wav", txtText.Text);
                MessageBox.Show("已被保存到" + txtFilePath.Text + ".wav");
            }
            else //仅朗读文本
            {
                nrr.Narrate(txtText.Text);
            }
            
        }
    }

    /// <summary>
    /// 朗读者类
    /// </summary>
    public class Narrator
    {
        /// <summary>
        /// 提供对语音合成引擎访问
        /// </summary>
        private SpeechSynthesizer syn;

        /// <summary>
        /// 音量设置
        /// </summary>
        public int Volumn
        {
            get { return syn.Volume; }
            set { syn.Volume = value; }
        }

        /// <summary>
        /// 创建一个朗读者实例
        /// </summary>
        public Narrator()
        {
            syn = new SpeechSynthesizer();
        }

        /// <summary>
        /// 朗读一段文本
        /// </summary>
        /// <param name="text">被朗读文本</param>
        public void Narrate(string text)
        {
            syn.SpeakAsync(text);
        }

        /// <summary>
        /// 选择配音
        /// </summary>
        /// <param name="role"></param>
        public void SelectVoice(string role)
        {
            syn.SelectVoice(role);
        }

        /// <summary>
        /// 获取配音声音列表
        /// </summary>
        /// <returns></returns>
        public string[] GetVoice()
        {
            string[] voice = new string[syn.GetInstalledVoices().Count];
            for (int i = 0; i < voice.Length; i++)
            {
                voice[i] = syn.GetInstalledVoices()[i].VoiceInfo.Name;
            }
            return voice;
        }

        /// <summary>
        /// 生成声音并导出到文件
        /// </summary>
        /// <param name="path">文件名地址</param>
        /// <param name="text">被朗读文本</param>
        public void ExportToWave(string path, string text)
        {
            syn.SetOutputToWaveFile(path);
            syn.Speak(text);
            syn.SetOutputToNull();
        }
    }
}

四、参考

本程序的编写借鉴了文章《用C#实现文本朗读和语音识别功能》

END

© 著作权归作者所有

北风其凉

北风其凉

粉丝 120
博文 498
码字总数 463522
作品 4
朝阳
程序员
私信 提问
Android自动朗读(TTS)的实现

前言: Android提供了自动朗读支持。可以对指定文本内容进行朗读,从而发生声音;还允许把文本对应的音频录制成音频文件,方便以后播放。Android的自动朗读主要通过TextToSpeech来完成,构造...

临江仙卜算子
2018/07/09
20
0
“懒人”听“书” 让PDF读给你听

平日小编就喜欢看书。不过上班对着电脑屏幕,看书举着手机或者pad,视力天天下降不说——过年回家连四岁的小外甥都说小姨你不带眼镜更好看,郁闷一下。 而且拿着pad时间久了保持一个姿势,胳...

cindy75031
2012/02/28
277
6
“懒人”听“书” 让PDF读给你听

平日小编就喜欢看书。不过上班对着电脑屏幕,看书举着手机或者pad,视力天天下降不说——过年回家连四岁的小外甥都说小姨你不带眼镜更好看,郁闷一下。 而且拿着pad时间久了保持一个姿势,胳...

cindy75031
2012/02/28
6
0
让您的手机、平板电脑实现移动办公

金软OfficePro-浏览版是北京红樱枫软件有限公司推出的、运行于 Android 手机、平板电脑上的全功能办公软件,支持各种常用Office文档浏览,支持手写批注、语音朗读、中英文自动翻译、网络打印...

hyfsoft
2014/07/30
0
0
用混音软件制作带背景音乐的朗读文件

准备工作: 1.先下载安装音频处理软件:GoldWave ,可以到这下载:http://www.pc6.com/softview/SoftView36115.html 2.将要朗读的文本内容,用朗读女软件生成MP3或WAV格式的声音文件。 3.准备...

mp624183768
2018/05/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【0918】正则介绍_grep

【0918】正则介绍_grep 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下 一、正则介绍 正则是一串有规律的字符串,它使用单个字符串来描述或匹配一系列符合某个语法规则的字符串。 二、grep工具 ...

飞翔的竹蜻蜓
25分钟前
4
0
为什么要在网站中应用CDN加速?

1. 网页加载速度更快 在网站中使用CDN技术最直接的一个好处就是它可以加快网页的加载速度。首先,CDN加速的内容分发是基于服务器缓存的,由于CDN中缓存了不少数据,它能够给用户提供更快的页...

云漫网络Ruan
今天
8
0
亚玛芬体育(Amer Sports)和信必优正式启动合作开发Movesense创新

亚玛芬体育和信必优正式启动合作开发Movesense创新,作为亚玛芬体育的完美技术搭档,信必优利用Movesense传感器技术为第三方开发移动应用和服务。 Movesense基于传感器技术和开放的API,测量...

symbiochina88
今天
4
0
创龙TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA核心板规格书

SOM-TL437xF是一款广州创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA芯片设计的核心板,采用沉金无铅工艺的10层板设计,适用于高速数据采集和处理系统、汽车导航、工业自动化等领...

Tronlong创龙
今天
5
0
好程序员Java学习路线分享MyBatis之线程优化

  好程序员Java学习路线分享MyBatis之线程优化,我们的项目存在大量用户同时访问的情况,那么就会出现大量线程并发访问数据库,这样会带来线程同步问题,本章我们将讨论MyBatis的线程同步问...

好程序员官方
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部