zoukankan      html  css  js  c++  java
  • C#制作文本转换为声音的demo,保存音频文件到本地


    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 = "请输入你要转换为语音的文字:
    ——(中英文均可):";
                String str = "记者:您的成绩是58秒85!
    傅园慧:哎呀,我这么快啊!我都不知道! 
    记者:您这个还是有所保留吗?
    傅园慧:那必须没有啊!我已经用了洪荒之力了!!";
                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引用:




  • 相关阅读:
    scrapy 随机UserAgent
    Scrapy使用中间件捕获Spider抛出的异常
    10.16-arrarylist
    10.15_package_2
    10.14_package_1
    10.13_enum_2
    10.12-enum_1
    10.11-java的接口2
    10.10-3对象和类_动手动脑-java的接口
    10.9-java的封装
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411974.html
Copyright © 2011-2022 走看看