将文字转换为语音
c#语音识别(上)-tts文字转语音功能 //需要先安装微软公司的speech sdk1.5
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using SpeechLib;//导入语音
using System.Threading; //线程
namespace Text2Speech
{
public partial class Form1 : Form
{
SpVoice speech = new SpVoice();
int speechRate = 6;
int volume = 70;
bool paused = false;
public Form1()
{
InitializeComponent();
foreach (ISpeechObjectToken Token in speech.GetVoices(string.Empty, string.Empty))
{
cmbVoices.Items.Add(Token.GetDescription(49));
}
cmbVoices.SelectedIndex = 0;
tbarRate.Value = speechRate;
trbVolume.Value = volume;
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btnSpeak_Click(object sender, EventArgs e)
{
if (paused)
{
speech.Resume();
paused = false;
}
else
{
speech.Rate = speechRate;
speech.Volume = volume;
speech.Speak(tbspeech.Text, SpeechVoiceSpeakFlags.SVSFlagsAsync);
}
}
private void btnToWAV_Click(object sender, EventArgs e)
{
try
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "所有文件 (*.*)|*.*|WAV 格式文件 (*.wav)|*.wav";
sfd.Title = "保存到 wave 文件";
sfd.FilterIndex = 2;
sfd.RestoreDirectory = true;
if (sfd.ShowDialog() == DialogResult.OK)
{
SpeechStreamFileMode SpFileMode = SpeechStreamFileMode.SSFMCreateForWrite;
SpFileStream SpFileStream = new SpFileStream();
SpFileStream.Open(sfd.FileName, SpFileMode, false);
speech.AudioOutputStream = SpFileStream;
speech.Rate = speechRate;
speech.Volume = volume;
speech.Speak(tbspeech.Text, SpeechVoiceSpeakFlags.SVSFlagsAsync);
speech.WaitUntilDone(Timeout.Infinite);
SpFileStream.Close();
}
}
catch
{
MessageBox.Show("导出Wav文件出错!", "提示", MessageBoxButtons.OK , MessageBoxIcon.Error);
}
}
private void cmbVoices_SelectedIndexChanged(object sender, EventArgs e)
{
speech.Voice = speech.GetVoices(string.Empty, string.Empty).Item(cmbVoices.SelectedIndex);
}
private void tbarRate_Scroll(object sender, EventArgs e)
{
speechRate = tbarRate.Value;
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnPause_Click(object sender, EventArgs e)
{
if (paused)
{
speech.Resume();//继续
paused = false;
btnPause.Text = "暂停";
}
else
{
speech.Pause();//暂停
paused = true;
btnPause.Text = "继续";
}
}
private void trbVolume_Scroll(object sender, EventArgs e)
{
volume = trbVolume.Value;
}
private void tbspeech_TextChanged(object sender, EventArgs e)
{
}
}
}