假期里要完成2个C#demo的制作,记录一下自己从无到有的学习过程。

本文主要实现了一个简单的语音合成和语音转文字的小程序。
语音合成的需求为:根据已有问卷上的问题进行语音提问。
语音识别的需求为:在提问之后对用户的回答进行实时的语音转文字。

由于目前还无法接入科大讯飞的接口,并且后续要涉及语音情感识别的内容,此处先练习使用Windows自带类库进行制作。本文demo的效果图如下:

点击`开始询问`按钮之后,首先将通过语音合成的形式提问问题一,之后用户开始回答,答案将实时的显示在上方的对话框中。点击`结束询问`按钮,语音播报“感谢您的配合……”之类的然后结束。

语音合成

主要用到System.Speech.Synthesis这个命名空间。

// 定义类成员部分
private SpeechSynthesizer speechSyn = new SpeechSynthesizer();  //用于语音合成

//绑定“开始询问”按钮的点击事件
private void buttonStart_Click(object sender, EventArgs e)
{
	// 配置对象
	speechSyn.SetOutputToDefaultAudioDevice();
	
	// 事件处理方法
	speechSyn.SpeakCompleted += new EventHandler<SpeakCompletedEventArgs>(speakCompleted);  // 可有可无,看个人需求
	
	//异步合成 因为之后会需要同时进行其他工作
	speechSyn.SpeakAsync("首先是抑郁症问题测试,将有20道题目,你需要根据实际情况如实回答。");
} 

语音识别

主要用到System.Speech.Recognition这个命名空间。

// 定义类成员部分
private SpeechRecognitionEngine speechRec = new SpeechRecognitionEngine();  //用于语音识别

//绑定点击事件
private void buttonStart_Click(object sender, EventArgs e)
{
	// 配置对象
	speechRec.SetInputToDefaultAudioDevice();  //设置默认输入
	speechRec.LoadGrammar(new DictationGrammar());  //设置语法
	
	// 事件处理方法
	speechRec.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(speechRecognized);  //事件处理方法处需要有对应的函数调用
} 

void speechRecognized(object sender, SpeechRecognizedEventArgs e)
{
	textBox_main.Text = e.Result.Text;
} // 正在识别时调用的方法

接下来的工作

  1. 将简单的语音合成和识别结合,形成一个问答系统。
  2. 能够对用户的回答进行情感分析并显示结果。
  3. (可选)将用户的回答与量表上问题答案做匹配,最终给出量表评分。

总结

本次demo用到的原理其实十分简单,但作为第一次接触C#并且C++的一些写法忘记很多的小白,还需要花一定的时间做。特别是在搜索时,答案全是如何调用网络接口进行识别,基本没有用自带库的,所以这方面也是花了一定的时间。
如果大家有更好的C#方面的建议也请多多指正!

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐