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. CUDA笔记(11)

    CUDA提供了一种cudaEvent_t的类型,这种类型Event可以统计GPU上面某一个任务或者代码段的精确运行时间 使用常量内存的光线跟踪器的性能比使用全局内存的性能提升了50% __consta ...

  2. java必会的英语单词

    Java开发常用英语单词表   第一章:public['pʌblik] 公共的,公用的static['stætik] 静的;静态的;静止的void:[vɔid] 空的main:[mein] 主要的 重 ...

  3. UVa 1001 Say Cheese【floyd】

    题意:在一个三维的奶酪里面有n(n<=100)个洞,老鼠A想到达老鼠B的位置, 在洞里面可以瞬间移动,在洞外面的移动速度为10秒一个单位,求最短时间 看到n<=100,又是求最短时间,想到 ...

  4. The IDL compiler

    The IDL compiler or bindings generator transcompiles Web IDL to C++ code, specifically bindings betw ...

  5. js中return 、return false 、return true、break、continue区别

    在开发中不熟悉这三者区别的同学,一般都知道return可以中止,但会根据字面意思觉得return true 中止当前函数执行,但其后的函数还会继续执行.return false 中止当前函数执行,其后 ...

  6. CRC校验原理及步骤

    什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并 ...

  7. 【Henu ACM Round#19 B】 Luxurious Houses

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 从右往左维护最大值. 看到比最大值小(或等于)的话.就递增到比最大值大1就好. [代码] #include <bits/std ...

  8. 利用netstat和tasklist查看PC的端口占用情况 及80端口被占用

    经常,我们在启动应用的时候发现系统需要的端口被别的程序占用,如何知道谁占有了我们需要的端口? 1.Windows平台在windows命令行窗口下执行: E:\oracle\ora92\bin>n ...

  9. 10010序列检测器的三段式状态机实现(verilog)

    序列检测器是时序数字电路设计中经典的教学范例,夏宇闻的<verilog数字系统设计教程>一书中有这个例子,用verilog设计一个“10010”序列的检测器.看完后我觉得F和G两个状态多余 ...

  10. JNI 实战全面解析

    项目决定移植一款C++开源项目到Android平台,开始对JNI深入研究. JNI是什么? JNI(JavaNative Interface)意为Java本地调用,它允许Java代码和其他语言写的代码 ...