zoukankan      html  css  js  c++  java
  • C# 文字转语音 播放SpVoice

    最近拿到一个需求,需要调整一下现有的语音播放逻辑,因为有的语音需要循环播放,有的不需要

    我们以前的逻辑是都不循环的,所以采用了SpVoice (引入SpeechLib.dll)的异步播放,我拿到了之后发现异步和同步其实应该是都可以实现的,但是异步我认为有一个问题就是不知道什么时候能让循环停止,

    搜了很多也没有解决我的问题,于是我尝试了用同步来解决这个问题

    以下是我改进的代码:

            /// <summary>
            /// 同步播放语音
            /// </summary>
            /// <param name="voiceContent">语音内容</param>
            /// <param name="isLoop">是否循环播放</param>
            /// <param name="isSelectOver">查询是否结束</param>
            public void playSoundAsync(string voiceContent, bool isLoop, bool isSelectOver = false)
            {
                VoiceContent = voiceContent;
               int   i = 1;
                //是否循环播放
                if (isLoop)
                {
                    //最多循环10次
                    while (i <= 10)
                    {
                        //如果查询结束
                        if (isSelectOver)
                        {
                            //关闭当前语音
                            voice.Speak(string.Empty, SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak);
                            break;
                        }
                        else
                        {
                            //播放语音
                            voice.Speak(voiceContent, SpeechVoiceSpeakFlags.SVSFIsXML | SpeechVoiceSpeakFlags.SVSFlagsAsync);
                            i++;
                        }
                    }
                }
                else
                {
                    //如果查询结束
                    if (isSelectOver)
                    {
                        //关闭语音
                        voice.Speak(string.Empty, SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak);
                    }
                    else
                    {
                        //播放语音
                        voice.Speak(voiceContent, SpeechVoiceSpeakFlags.SVSFIsXML | SpeechVoiceSpeakFlags.SVSFlagsAsync);
                    }
                }
            }
    此时还有一个问题,循环的时候第二个参数传true ,但是后续还有要播放的内容时,需要先停止上一个循环,也就是第三个参数需要传true(默认false)
    而后还要再调用以下方法来播放新的语音,我认为这里其实可能会有更好的办法,目前我还没有想到,如果有哪位大神有好的意见,欢迎一起头脑风暴。
  • 相关阅读:
    [转载]我的PMP复习备考经验谈(下篇)——一本关于PMP备考的小指南
    安装MongoDB遇到问题
    安装MongoDB遇到问题
    (热死你)Resin https ssl Linux 配置,实战可用
    高性能web服务器(热死你)Resin Linux的安装、配置、部署,性能远超Nginx支持Java、PHP等
    我最近用Python写了一个算法,不需要写任何规则就能自动识别一个网页的内容
    20161230实时量化监控,成效显著,实在忍不住要给大家秀一把
    16年收官之战,堪称完美,祝愿大家2017一举成名天下闻,虎啸龙吟展宏图
    我3年前开发的IM即时通讯一直没勇气推出,现在智能时代了,有什么可以结合的地方吗?
    忙活了一周时间,开发了一个年会抽奖系统,免费开放给大家(含操作视频及下载地址)
  • 原文地址:https://www.cnblogs.com/Yida-Tingting/p/12195583.html
Copyright © 2011-2022 走看看