C#制作文本转换为声音的demo,保存音频文件到本地
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,保存音频文件到本地的更多相关文章
- C#读取资源文件的两种方法及保存资源文件到本地
方法1 GetManifestResourceStream VB.NET中资源的名称为:项目默认命名空间.资源文件名 C#中则是:项目命名空间.资源文件所在文件夹名.资源文件名 例如:istr = ...
- text2pcap: 将hex转储文本转换为Wireshark可打开的pcap文件
简介 Text2pcap是一个读取ASCII hex转储的程序,它将描述的数据写入pcap或pcapng文件.text2pcap可以读取包含多个数据包的hexdumps,并构建多个数据包的捕获文件.t ...
- php保存远程文件到本地的方法
用到了ob_start();<?php header("Content-type:text/html charset=utf-8"); if(!empty($_POST['p ...
- docker保存日志文件到本地
其实很简单 docker logs +你需要添加的额外参数 + 容器id >文件名称 然后查看这个文件就可以了,也可以通过ftp协议下载到本地
- 将txt文本转换为excel格式
将txt文本转换为excel格式,中间使用的列分割为 tab 键 一.使用xlwt模块 注:Excel 2003 一个工作表行数限制65536,列数限制256 需要模块:xlwt 模块安装:xlwt ...
- ios学习-制作一个浏览图片的Demo
一.项目要求:制作一个浏览图片的Demo,要求包含夜间模式,以及改变图片大小,能够显示不同的图片描述 二.开发步骤: 1.在storyboard上添加一个空白的View,然后添加”设置“按钮,添加im ...
- JSON文本转换为JSONArray 转换为 List<Object>
package com.beijxing.TestMain; import java.io.File; import java.io.IOException; import java.util.Arr ...
- 利用Code128字体将文本转换为code128条形码
利用Code128字体将文本转换为code128条形码[转] 最近在做仓储的项目,许多的打印文件都包含条形码,之前一直使用C39P24DhTt字体直接转换为39码,但是最近要求使用code128编 ...
- JavaScript在浏览器中把文本保存为文件的方法
JavaScript在浏览器中把文本保存为文件的方法 经过测试第二种方法可以保存更多的文本不至于卡死 var saveTextAsFile1 = function (text, fileName, s ...
随机推荐
- 区间dp学习笔记
怎么办,膜你赛要挂惨了,下午我还在学区间\(dp\)! 不管怎么样,计划不能打乱\(4\)不\(4\).. 区间dp 模板 为啥我一开始就先弄模板呢?因为这东西看模板就能看懂... for(int i ...
- CSS W3SCHOOLS
https://www.w3schools.com/csS/css3_buttons.asp
- df 显示 100%的问题
问题: 使用 df 命令查看,某个分区使用率已经达到100%,但是用du 命令统计该分区,发现该分区空间剩余10G可用. 实例: 分析: ...
- plt.rcParams[]
plt.rcParams[] pylot使用rc配置文件来自定义图形的各种默认属性,称之为rc配置或rc参数.通过rc参数可以修改默认的属性,包括窗体大小.每英寸的点数.线条宽度.颜色.样式.坐标轴. ...
- 冒泡排序php
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <b ...
- NodeJS学习笔记 (27)实用工具模块-util(ok)
debuglog(section) 很有用的调试方法.可以通过 util.debuglog(name) 来创建一个调试fn,这个fn的特点是,只有在运行程序时候,声明环境变量NODE_DEBUG=na ...
- java编程思想--学习心得
学习Java编程思想,需要了解语言特性,对于各种名词,能够借助项目代码,解释其含义,不借助搜索工具,明白其在什么样场景下使用,会带来什么样的问题,能否避免这类问题. 学习的过程,与软件开发相同,一样是 ...
- dd---复制文件并对原文件的内容进行转换和格式化处理
dd命令用于复制文件并对原文件的内容进行转换和格式化处理.dd命令功能很强大的,对于一些比较底层的问题,使用dd命令往往可以得到出人意料的效果.用的比较多的还是用dd来备份裸设备.但是不推荐,如果需要 ...
- conda常用命令,如何在conda环境中安装gym库?
查看已安装的环境: conda info -e 或 conda env list 创建新环境gymlab: conda create -n gymlab python=3.5 激活环境gymlab: ...
- Redis序列化存储Java集合List等自定义类型
在"Redis学习总结和相关资料"http://blog.csdn.net/fansunion/article/details/49278209 这篇文章中,对Redis做了总体的 ...