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引用:




posted on 2016-08-31 22:46  未雨愁眸  阅读(703)  评论(0编辑  收藏  举报