1、人机交互TTS语音朗读人机交互-TTS语音朗读人机交互大作业报告-TTS中文语音朗读 Framework 3.0及以上版本下,为用户界面、2D/3D 图形、文档和媒体提供了统一的描述和操作方法。基于DirectX 9/10技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面,WPF是Windows操作系统中一次重大变革,与早期的GDI+/GDI不同。WPF是基于DirectX引擎的,支持GPU硬件加速,在不支持硬件加速时也可以使用软件绘制。高级别的线程进行绘制,提高使用者的体验。自动识别显示器分辨率并进行缩放。而Vista就是一个非常典型的例子。3.2 新
2、建WpfSpeechDemo工程3.3 建立软件界面过程:1. 先用ComboBox、Label、Button、TextBox等组件搭建初始框架,形成最初的简单页面。2. 使用silider控件来实现语速、音量的调节。IsSelectionRangeEnabled设置为true之后,实现小滑块调节,即可控制语速的快慢以及音量的高低。空间中的其他组件可以对部分进行美化,比如垂直刻度、刻度条。3. 语音库(引擎)支持中文和英文两种语言。中文可以识别文本框里的中文和英文,而英文只可以识别文本框中的英文,遇到其他语种会跳过。4. 语音输出方式只使用电脑自带的扬声器进行朗读。5. 最后在文本框中输入的文
3、字经过后台操作之后可以通过扬声器播放。6. 整体界面使用Grid控件,对页面的布局进行操控,使控件可以以等距离放置,使界面看上去整洁美观。4. 分析4.1 运行结果分析当一起输入英文和中文时,选用英文朗读时读取中文会有错误读音;这个程序运行的时候停止按钮在某些电脑上并不能够实现其功能;音量和语速的调节识别比较准确,也未出现过错误;4.2 优缺点分析优点:界面简单易操作,不需要太繁琐的电脑知识,对残障人士来说简单易懂。 基本操作都能实现。缺点:部分功能对硬件的识别较高,未能多加改进。5. 总结这次的课堂Siminer和最后的大作业使我对人机界面的操作及编写有了一定的认知,收货最大的是最后大作业中
4、还自己学习了一些关于WPF的知识,虽然不多,但是一点点的积累使得以后会有一定的知识累积。因为WPF是一门从未接触过的技术,所以在最后的作业中,后台代码部分并未能参与多少,只限于查找资料。最后,要感谢毛老师的指导以及对这款软件提出的意见,最感谢的还是对我们技术上的指导!6. 代码6.1 界面代码 6.2 功能代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System
5、.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using DotNetSpeech;/cs文件中引入库namespace WpfSpeechDemo / / MainWindow.xaml 的交互逻
6、辑 / public partial class MainWindow : Window SpVoice speech = new SpVoice(); int speechRate = 0; int volume = 70; public MainWindow() InitializeComponent(); init(); private void init() /初始化语音引擎列表 foreach (ISpeechObjectToken Token in speech.GetVoices(string.Empty, string.Empty) cmbVoices.Items.Add(To
7、ken.GetDescription(49); /取得音频输出列表 foreach (ISpeechObjectToken AudioOut in speech.GetAudioOutputs(string.Empty, string.Empty) cmbAudioOut.Items.Add(AudioOut.GetDescription(49); cmbVoices.SelectedIndex = 0; cmbAudioOut.SelectedIndex = 0; tbarRate.Value = speechRate; trbVolume.Value = volume; private v
8、oid tbarRate_Scroll(object sender, EventArgs e) speech.Rate = (int)tbarRate.Value; private void trbVolume_Scroll(object sender, EventArgs e) speech.Volume = (int)trbVolume.Value; private void cmbVoices_SelectionChanged(object sender, SelectionChangedEventArgs e) speech.Voice = speech.GetVoices(strin
9、g.Empty, string.Empty).Item(cmbVoices.SelectedIndex); private void cmbAudioOut_SelectionChanged(object sender, SelectionChangedEventArgs e) speech.AudioOutput = speech.GetAudioOutputs(string.Empty, string.Empty).Item(cmbAudioOut.SelectedIndex); private void bt_speek_Click(object sender, EventArgs e)
10、 /终止先前朗读,如果有 speech.Speak( , SpeechVoiceSpeakFlags.SVSFlagsAsync); speech.Speak(tbspeech.Text, SpeechVoiceSpeakFlags.SVSFlagsAsync); private void bt_stop_Click(object sender, EventArgs e) speech.Speak(, SpeechVoiceSpeakFlags.SVSFlagsAsync); private void tbarRate_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) speech.Rate = (int)e.NewValue; private void trbVolume_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) speech.Volume = (int)e.NewValue;