下图是本人用于英语学习的一个程序,使用微软自带的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#中如何实现语音播放功能的介绍就到这。
网友评论