一、关于本文
Antonia下载地址:
这个程序可以将字符串读出,或是将朗读后的声音保存到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.Speechusing 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); } } } ////// 朗读者类 /// public class Narrator { ////// 提供对语音合成引擎访问 /// private SpeechSynthesizer syn; ////// 音量设置 /// public int Volumn { get { return syn.Volume; } set { syn.Volume = value; } } ////// 创建一个朗读者实例 /// public Narrator() { syn = new SpeechSynthesizer(); } ////// 朗读一段文本 /// /// 被朗读文本 public void Narrate(string text) { syn.SpeakAsync(text); } ////// 选择配音 /// /// public void SelectVoice(string role) { syn.SelectVoice(role); } ////// 获取配音声音列表 /// ///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; } /// /// 生成声音并导出到文件 /// /// 文件名地址 /// 被朗读文本 public void ExportToWave(string path, string text) { syn.SetOutputToWaveFile(path); syn.Speak(text); syn.SetOutputToNull(); } }}
四、参考
本程序的编写借鉴了文章
END