一、关于本文
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