c#中语音播放和朗读功能的实现——Speech类库

下图是本人用于英语学习的一个程序,使用微软自带的Speech类库实现

程序界面图


        首先在vs中把这个Speech类库安装了

例图、

        然后设计SpeechHelper类用于管理整个播放功能。由于我们只需要一个“合成器”,所以使用单例设计模式。

        其中的prompt用于记录当前播音的状况。在后文会提到。

单列设计模式

        接着,开始设计朗读功能。

按钮界面

        按钮由刚才设计的语音功能管理类中的函数来实现

winform按钮点击函数中,调用SpeechPlayer类中的SpeakCnText/SpeakEnText函数

        每次点击的时候检测prompt是否处在朗读状态。如果是,则应该释放当前的合成器(保存在_synthesizer),然后重新创建合成器对象,重新播放。至于isLoop,是我用于循环播放的一个设定。

        _synthesizer.GetInstalledVoices() 这个方法是获取当前你电脑已安装的微软合成语言播报员。只有知道自己电脑安装了什么播报员(断点查看),才能在下面的SelectVoice函数中设置有效的参数。

        最后,为_curPrompt字段赋值(_synthesizer调用SpeakAsync函数的状态)。


SpeechPlayer中的speak函数

        之后 ,就可以根据这个_curPrompt字段检测合成器是否读完了传进去的文本。

例图

        关于音量和语速,同样设置一个控件来进行设定

例图

        需要注意的是,音量只能在0-100这个区间

winform中的按钮点击点击事件
SpeechHelper中的相关函数

        需要注意的是,合成器可以不断往里面添加文本。比如我在循环播放中就是循环一定的次数来往合成器中输入相关的文本数量。

例图

        关于c#中如何实现语音播放功能的介绍就到这。

你可能感兴趣的:(c#中语音播放和朗读功能的实现——Speech类库)