TTS(Text To Speech)可以实现把文本转换成语音并朗读出来。Windows Xp可以使用Com组件——Microsoft Speech Object Library实现TTS,Windows 7及之后的系统可以使用.Net组件——System.Speech,使用更加方便。

最简单的实现TTS功能的办法是:

新建一个记事本文档,然后在文档里输入这样一句话——

CreateObject("SAPI.SpVoice").Speak "先定一个能达到的小目标,比方说,我先挣它一个亿!你看看能不能用几年,能挣到一个亿,你是规划五年还是三年呢?!"

然后把记事本文件的后缀格式改为.VBS,之后双击打开这个文件,就可以把文本朗读出来了。

下边这个小的demo实现把文字转换成声音并读出来,可以设置朗读速度、音量、暂停、继续播放、保存到本地音频文件的功能。运行界面:

“开始读”按钮触发事件:

 private void BeginRead(object sender, EventArgs e)
{
speechSyn.SpeakAsync(richTextBox1.Text);
}

speechSyn是之前声明的SpeechSynthesizer对象:

private  SpeechSynthesizer speechSyn;

“暂停”按钮触发事件:

private void PauseRead(object sender, EventArgs e)
{
if (button2.Text == "暂停")
{
speechSyn.Pause();
button2.Text = "继续";
}
else
{
speechSyn.Resume();
button2.Text = "暂停";
}
}

“保存为录音文件”按钮触发事件:

private void SaveToWav(object sender, MouseEventArgs e)
{
SpeechSynthesizer speechSyn = new SpeechSynthesizer();
speechSyn.Volume = trackBar2.TabIndex;
speechSyn.Rate = trackBar1.TabIndex;
speechSyn.SetOutputToWaveFile("D:\\Record.wav");
speechSyn.Speak(richTextBox1.Text);
speechSyn.SetOutputToDefaultAudioDevice();
MessageBox.Show("保存录音文件成功,保存路径:D:\\Record.wav!");
speechSyn.Dispose();
}

点击“保存为录音文件”按钮后,如果成功,会弹出提示对话框:

“语速”和“音量”两个控制条可以控制保存录音文件时音频文件的语速和音量大小。完整程序如下:

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 MS_TTS
{
public partial class Form1 : Form
{
private SpeechSynthesizer speechSyn;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) //界面初始化
{
label1.Text = "请输入你要转换为语音的文字:\n——(中英文均可):";
String str = "记者:您的成绩是58秒85!\n傅园慧:哎呀,我这么快啊!我都不知道! \n记者:您这个还是有所保留吗?\n傅园慧:那必须没有啊!我已经用了洪荒之力了!!";
richTextBox1.Text = str;
speechSyn = new SpeechSynthesizer();
}
private void BeginRead(object sender, EventArgs e) //开始朗读按钮
{
speechSyn.SpeakAsync(richTextBox1.Text);
}
private void PauseRead(object sender, EventArgs e) //暂停和继续按钮
{
if (button2.Text == "暂停")
{
speechSyn.Pause();
button2.Text = "继续";
}
else
{
speechSyn.Resume();
button2.Text = "暂停";
}
}
private void SaveToWav(object sender, MouseEventArgs e) //保存为音频文件
{
SpeechSynthesizer speechSyn = new SpeechSynthesizer();
speechSyn.Volume = trackBar2.TabIndex;
speechSyn.Rate = trackBar1.TabIndex;
speechSyn.SetOutputToWaveFile("D:\\Record.wav");
speechSyn.Speak(richTextBox1.Text);
speechSyn.SetOutputToDefaultAudioDevice();
MessageBox.Show("保存录音文件成功,保存路径:D:\\Record.wav!");
speechSyn.Dispose();
}
private void Exit(object sender, EventArgs e) //退出程序
{
speechSyn.Dispose();
Application.Exit();
}
}
}

当然别忘了在编码之前添加上“System.Speech”de引用:

C#制作文本转换为声音的demo,保存音频文件到本地的更多相关文章

  1. C#读取资源文件的两种方法及保存资源文件到本地

    方法1 GetManifestResourceStream   VB.NET中资源的名称为:项目默认命名空间.资源文件名 C#中则是:项目命名空间.资源文件所在文件夹名.资源文件名 例如:istr = ...

  2. text2pcap: 将hex转储文本转换为Wireshark可打开的pcap文件

    简介 Text2pcap是一个读取ASCII hex转储的程序,它将描述的数据写入pcap或pcapng文件.text2pcap可以读取包含多个数据包的hexdumps,并构建多个数据包的捕获文件.t ...

  3. php保存远程文件到本地的方法

    用到了ob_start();<?php header("Content-type:text/html charset=utf-8"); if(!empty($_POST['p ...

  4. docker保存日志文件到本地

    其实很简单 docker logs +你需要添加的额外参数 + 容器id >文件名称 然后查看这个文件就可以了,也可以通过ftp协议下载到本地

  5. 将txt文本转换为excel格式

    将txt文本转换为excel格式,中间使用的列分割为 tab 键 一.使用xlwt模块 注:Excel 2003 一个工作表行数限制65536,列数限制256 需要模块:xlwt 模块安装:xlwt ...

  6. ios学习-制作一个浏览图片的Demo

    一.项目要求:制作一个浏览图片的Demo,要求包含夜间模式,以及改变图片大小,能够显示不同的图片描述 二.开发步骤: 1.在storyboard上添加一个空白的View,然后添加”设置“按钮,添加im ...

  7. JSON文本转换为JSONArray 转换为 List<Object>

    package com.beijxing.TestMain; import java.io.File; import java.io.IOException; import java.util.Arr ...

  8. 利用Code128字体将文本转换为code128条形码

    利用Code128字体将文本转换为code128条形码[转]   最近在做仓储的项目,许多的打印文件都包含条形码,之前一直使用C39P24DhTt字体直接转换为39码,但是最近要求使用code128编 ...

  9. JavaScript在浏览器中把文本保存为文件的方法

    JavaScript在浏览器中把文本保存为文件的方法 经过测试第二种方法可以保存更多的文本不至于卡死 var saveTextAsFile1 = function (text, fileName, s ...

随机推荐

  1. 区间dp学习笔记

    怎么办,膜你赛要挂惨了,下午我还在学区间\(dp\)! 不管怎么样,计划不能打乱\(4\)不\(4\).. 区间dp 模板 为啥我一开始就先弄模板呢?因为这东西看模板就能看懂... for(int i ...

  2. CSS W3SCHOOLS

    https://www.w3schools.com/csS/css3_buttons.asp

  3. df 显示 100%的问题

    问题:         使用 df 命令查看,某个分区使用率已经达到100%,但是用du 命令统计该分区,发现该分区空间剩余10G可用.         实例:                分析: ...

  4. plt.rcParams[]

    plt.rcParams[] pylot使用rc配置文件来自定义图形的各种默认属性,称之为rc配置或rc参数.通过rc参数可以修改默认的属性,包括窗体大小.每英寸的点数.线条宽度.颜色.样式.坐标轴. ...

  5. 冒泡排序php

    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <b ...

  6. NodeJS学习笔记 (27)实用工具模块-util(ok)

    debuglog(section) 很有用的调试方法.可以通过 util.debuglog(name) 来创建一个调试fn,这个fn的特点是,只有在运行程序时候,声明环境变量NODE_DEBUG=na ...

  7. java编程思想--学习心得

    学习Java编程思想,需要了解语言特性,对于各种名词,能够借助项目代码,解释其含义,不借助搜索工具,明白其在什么样场景下使用,会带来什么样的问题,能否避免这类问题. 学习的过程,与软件开发相同,一样是 ...

  8. dd---复制文件并对原文件的内容进行转换和格式化处理

    dd命令用于复制文件并对原文件的内容进行转换和格式化处理.dd命令功能很强大的,对于一些比较底层的问题,使用dd命令往往可以得到出人意料的效果.用的比较多的还是用dd来备份裸设备.但是不推荐,如果需要 ...

  9. conda常用命令,如何在conda环境中安装gym库?

    查看已安装的环境: conda info -e 或 conda env list 创建新环境gymlab: conda create -n gymlab python=3.5 激活环境gymlab: ...

  10. Redis序列化存储Java集合List等自定义类型

    在"Redis学习总结和相关资料"http://blog.csdn.net/fansunion/article/details/49278209 这篇文章中,对Redis做了总体的 ...