将文字转换为语音

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)
        {

        }

    }
}
 

posted @ 2013-07-29 22:35  ◆紅袖  阅读(400)  评论(0编辑  收藏  举报