首页 > 其他分享 >文本转语音播放

文本转语音播放

时间:2024-07-04 11:41:43浏览次数:12  
标签:write 播放 log mdg sndtext Decode 语音 synth 文本

bool Voice(string info)
{

        int rate = Convert.ToInt16(ReadSetting("SoundRate"));
        bool Result = false;


        try
        {
            //.net4.0以上版本支持下面的方式
            // dynamic   spVoice = Activator.CreateInstance(Type.GetTypeFromProgID("SAPI.SpVoice", true));
            //   spVoice.Volume = 60; //定义音量大小:0~100  

            //   spVoice.Speak(info);//阻塞进程
            //
            //  return true;
            ////////////////////////

            SRead sP = new SRead();

            Result = sP.SpeakChina(info, VoiceName, 100, rate, saveWavFile);
            mdg_Decode.write_log("采用SpeechSynthesizer合成语音 ", 1, 1);

        }
        catch (Exception e)
        {
            mdg_Decode.write_log("发生错误:" + e.Message, 1, 1);

        }
        finally
        {

            if (!Result)
            {
                mdg_Decode.write_log("采用net4.0以上版本支持的 dynamic spVoice  ", 1, 1);
                //.net4.0以上版本支持下面的方式

                try
                {

                    dynamic spVoice = Activator.CreateInstance(Type.GetTypeFromProgID("SAPI.SpVoice"));
                    //   spVoice.Voice(VoiceName);
                    // synth.SpeakAsync(sndtext); //异步读

                    //String speechPeople = synth.Voice;
                    //使用 synth 设置朗读音量 [范围 0 ~ 100]
                    spVoice.Volume = 100;
                    //使用 synth 设置朗读频率 [范围 -10 ~ 10]
                    spVoice.Rate = rate;
                    //使用synth 合成 wav 音频文件:
                    //synth.SetOutputToWaveFile(string path);

                    spVoice.Speak(info);
                    // spVoice.Dispose();

                }
                catch (Exception e)
                {
                    mdg_Decode.write_log("发生错误:" + e.Message, 1, 1);

                }
                finally
                {
                    mdg_Decode.write_log("ok:播放完毕", 1, 1);
                }
            }

        };
        return true;
    }
  

public class SRead
{
    public SpeechSynthesizer synth; //语音合成对象
    public SRead()
    {
        synth = new SpeechSynthesizer();
   
    }
   
    public SRead(int m, int n)
    {
        //使用 synth 设置朗读音量 [范围 0 ~ 100]
        synth.Volume = m;
        //使用 synth 设置朗读频率 [范围 -10 ~ 10]
        synth.Rate = n;
    }
    public bool SpeakChina(string sndtext, string VoiceName, int Volume=90, int Rate=0,string WavFile="")
    {
        bool Result = false;
        FileStream fs1=null;
        StreamWriter m_streamWriter1 = null;
        try
        {



            int count = 0;


            string log_filename = @"Voice_list" + ".txt";
              fs1 = new FileStream(log_filename, FileMode.Create, FileAccess.Write);
              m_streamWriter1 = new StreamWriter(fs1);

            m_streamWriter1.BaseStream.Seek(0, SeekOrigin.End);


            foreach (InstalledVoice voices in synth.GetInstalledVoices()) //可查看本地电脑已经安装的语音包
            {
                count++;
                m_streamWriter1.WriteLine("已安装语音库:" + voices.VoiceInfo.Name + "\r\n");
            }


            if (count > 0)
            {
                synth.SelectVoice(VoiceName);
            }
        }
        catch (Exception e)
        {
            mdg_Decode.write_log("查找支持的语音库发生错误:" + e.Message, 1, 1);
        }
        finally
        {

            m_streamWriter1.Flush();
            m_streamWriter1.Close();
            fs1.Close();

        }

        try
        {
           
            // synth.SelectVoiceByHints(VoiceGender.Male, VoiceAge.Child, 2, System.Globalization.CultureInfo.CurrentCulture);

            //Voice.Speak(sndtext, SpFlags);
          // synth.SpeakAsyncCancelAll();
       //  mdg_Decode.write_log("SpeakAsyncCancelAll:", 1, 1);
            // synth.SpeakAsync(sndtext); //异步读
          
         //   mdg_Decode.write_log("Speak:", 1, 1);
            //String speechPeople = synth.Voice;
            //使用 synth 设置朗读音量 [范围 0 ~ 100]
            synth.Volume = Volume;
        //    mdg_Decode.write_log("Volume:", 1, 1);
            //使用 synth 设置朗读频率 [范围 -10 ~ 10]
            synth.Rate = Rate;
            //   mdg_Decode.write_log("Rate:", 1, 1);
            if (WavFile != "")
            {
                synth.SetOutputToWaveFile(WavFile);
                 synth.Speak(sndtext);
               // synth.SpeakAsync(sndtext); //异步读

            }
            //使用synth 合成 wav 音频文件:
            synth.SetOutputToDefaultAudioDevice();
            synth.Speak(sndtext);//输出到默认声音设备
           //synth.SpeakAsync(sndtext); //异步读
            synth.Dispose();
            Result = true;
        }
        catch (Exception e)
        {
            mdg_Decode.write_log("播放时发生错误:" + e.Message, 1, 1);
            Result = false;
        }
        return Result;

    }
    public void SpeakEnglish(string sndtext)
    {
        //SpVoice Voice = new SpVoice();
        synth.SelectVoice("VW Julie");
        synth.Speak(sndtext); //sndtext为要合成的内容
        synth.Dispose(); 
    }
    public int m
    {
        
        
            get
        {
            return synth.Volume;
        }
        set
        {
            synth.Volume = value;
        }


    

     }

public int n
{
get
{
return synth.Rate;
}
set
{
synth.Rate = value;
}
}
}

标签:write,播放,log,mdg,sndtext,Decode,语音,synth,文本
From: https://www.cnblogs.com/madg/p/18283353

相关文章

  • uniapp自定义富文本现实组件(支持查看和收起)
    废话不多说上代码CollapseText.vue<template> <viewv-if="descr"> <scroll-viewclass="collapse-text":style="{maxHeight:computedMaxHeight}"> <!--<slot></slot>--> <rich-text:nodes......
  • 对标 GPT-4o 的开源实时语音多模态模型:Moshi
     是由法国的AI实验室 Kyutai 推出的实时语音多模态模型,支持听、说、看,最关键的是你现在就可以在浏览器中使用,如果这个链接延迟高,可以试试这个,无需输入邮箱,点击Joinqueue即可。简单体验了下,比较笨笨的,延迟很低,可以随时打断,如果你一直不说话还会主动找你,很接近GPT-4o......
  • 安防视频监控/视频汇聚EasyCVR平台国标GB28181级联上级平台,视频无法播放是什么原因?
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,EasyCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可提供7*24小时实时高清视频监控、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能AI......
  • 基于SpringBoot+Vue+基于微信小程序的音乐播放器系统设计和实现(源码+LW+部署讲解)
    博主介绍:✌全网粉丝50W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P......
  • 使用阿里云语音服务实现设备异常实时通知
    随着物联网的普及,设备异常通知方式也变得多种多样。从传统的后台异常列表,到短信通知,再到微信消息通知等。然而,当设备探测到火警等紧急异常时,需要实时通知到相关人员。本文将介绍如何借助阿里云的语音服务来实现这一功能。1.准备工作1.1资质申请首先,登录阿里云语音服务,进行......
  • 学习笔记485—Excel技巧:一键将文本数字转换为数值
    Excel技巧:一键将文本数字转换为数值在使用Excel进行数据处理时,经常会遇到数据格式不匹配的问题。特别是当从外部导入数据或手动输入数据时,数字可能会被误识别为文本格式,这在进行数据计算和分析时会带来诸多不便。幸运的是,Excel提供了一些便捷的方法,可以帮助我们一键将文本转换为......
  • 最新AI大模型系统源码,ChatGPT商业运营版系统源(详细图文搭建部署教程)+AI绘画系统,DALL-E
    一、前言人工智能语言模型和AI绘画在多个领域都有广泛的应用.....SparkAi创作系统是一款基于ChatGPT和Midjourney开发的智能问答和绘画系统,提供一站式AIB/C端解决方案,涵盖AI大模型提问、AI绘画、文档分析、图像识别和理解、TTS&语音识别、AI换脸等多项功能。支持GPTs应......
  • echarts 饼状图 富文本设置 drawChart2
    <template><divstyle="height:100%"><divstyle="display:flex;width:100%;height:100%;"><divstyle="flex:1;width:100%;height:100%;"><div:id="myChartId"style="......
  • 揭秘!FFmpeg+Whisper双剑合璧:解锁视频到文本的二阶段奇迹
    解锁视频到文本的二阶段奇迹一、引言二、视频音频提取与处理视频音频提取与处理2.1环境搭建2.2视频音频提取2.3音频预处理示例代码:三、语音识别与翻译3.1加载Whisper模型3.2语音识别3.3语言检测与翻译四、结果处理与验证4.1结果整理4.2视频与文本同步验证五......
  • 最新AI源码-ChatGPT商业运营版系统源码,AI绘画网站系统,TTS & 语音识别对话、文档分析、
    一、前言人工智能语言模型和AI绘画在多个领域都有广泛的应用.....SparkAi创作系统是一款基于ChatGPT和Midjourney开发的智能问答和绘画系统,提供一站式AIB/C端解决方案,涵盖AI大模型提问、AI绘画、文档分析、图像识别和理解、TTS&语音识别、AI换脸等多项功能。支持GPTs应......