人机交互 TTS语音朗读.docx
《人机交互 TTS语音朗读.docx》由会员分享,可在线阅读,更多相关《人机交互 TTS语音朗读.docx(9页珍藏版)》请在冰豆网上搜索。
人机交互TTS语音朗读
人机交互大作业报告
--------TTS中文语音朗读
摘要:
随着计算机技术的发展,自动化的技术已经普及了人们的生活以及一些残障人士的日常操作。
此次作业的制作目的就是考虑到残疾人不能说话的问题,在能操作电脑的情况下能与正常人交流。
引言:
TTS中文语音朗读主要使用了VS2012结合WPF的技术,实现了界面与代码相分离,能够更好的学习一方面的知识。
本次课题的代码编写主要使用VS中的一些知识,使运行结果能够一目了然。
计算机的发展必然带动其他行业以及事业的兴起,使社会更加平等。
1.项目准备
1.1开发平台
vs2012开发平台
1.2微软的语音软件库
2.开发目标
2.1制作一个语音软件,可以朗读文字
2.2具体功能
支持选择播放设备
支持朗读语速选择
支持音量选择
3.开发过程
3.1认识WPF
WPF(WindowsPresentationFoundation)是微软推出的基于WindowsVista的用户界面框架,属于.NETFramework3.0的一部分。
它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。
WPF是微软新一代图形系统,运行在.NETFramework3.0及以上版本下,为用户界面、2D/3D图形、文档和媒体提供了统一的描述和操作方法。
基于DirectX9/10技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面,WPF是Windows操作系统中一次重大变革,与早期的GDI+/GDI不同。
WPF是基于DirectX引擎的,支持GPU硬件加速,在不支持硬件加速时也可以使用软件绘制。
高级别的线程进行绘制,提高使用者的体验。
自动识别显示器分辨率并进行缩放。
而Vista就是一个非常典型的例子。
3.2新建WpfSpeechDemo工程
3.3建立软件界面
过程:
1.先用ComboBox、Label、Button、TextBox等组件搭建初始框架,形成最初的简单页面。
2.使用silider控件来实现语速、音量的调节。
IsSelectionRangeEnabled设置为true之后,实现小滑块调节,即可控制语速的快慢以及音量的高低。
空间中的其他组件可以对部分进行美化,比如垂直刻度、刻度条。
3.语音库(引擎)支持中文和英文两种语言。
中文可以识别文本框里的中文和英文,而英文只可以识别文本框中的英文,遇到其他语种会跳过。
4.语音输出方式只使用电脑自带的扬声器进行朗读。
5.最后在文本框中输入的文字经过后台操作之后可以通过扬声器播放。
6.整体界面使用Grid控件,对页面的布局进行操控,使控件可以以等距离放置,使界面看上去整洁美观。
4.分析
4.1运行结果分析
当一起输入英文和中文时,选用英文朗读时读取中文会有错误读音;
这个程序运行的时候停止按钮在某些电脑上并不能够实现其功能;
音量和语速的调节识别比较准确,也未出现过错误;
4.2优缺点分析
优点:
界面简单易操作,不需要太繁琐的电脑知识,对残障人士来说简单易懂。
基本操作都能实现。
缺点:
部分功能对硬件的识别较高,未能多加改进。
5.总结
这次的课堂Siminer和最后的大作业使我对人机界面的操作及编写有了一定的认知,收货最大的是最后大作业中还自己学习了一些关于WPF的知识,虽然不多,但是一点点的积累使得以后会有一定的知识累积。
因为WPF是一门从未接触过的技术,所以在最后的作业中,后台代码部分并未能参与多少,只限于查找资料。
最后,要感谢毛老师的指导以及对这款软件提出的意见,最感谢的还是对我们技术上的指导!
6.代码
6.1界面代码
Class="WpfSpeechDemo.MainWindow"
xmlns="
xmlns:
x="
Title="WpfSpeechDemo"Height="350"Width="525">
Name="cmbVoices"HorizontalAlignment="Left"Margin="86,23,0,0"VerticalAlignment="Top"Width="222"SelectionChanged="cmbVoices_SelectionChanged"/>
Name="cmbAudioOut"HorizontalAlignment="Left"Margin="86,69,0,0"VerticalAlignment="Top"Width="222"SelectionChanged="cmbAudioOut_SelectionChanged"/>
"HorizontalAlignment="Left"Margin="0,23,0,0"VerticalAlignment="Top"Width="81"/>
"HorizontalAlignment="Left"Margin="0,65,0,0"VerticalAlignment="Top"Width="81"/>
">
Name="tbarRate"Orientation="Vertical"
Minimum="0"
Maximum="10"
IsMoveToPointEnabled="True"
AutoToolTipPrecision="2"AutoToolTipPlacement="BottomRight"
TickPlacement="BottomRight"
Ticks="1,2,3,4,5,6,7,8,9,10"
IsSelectionRangeEnabled="true"
SelectionStart="1"SelectionEnd="9"
HorizontalAlignment="Left"Margin="357,51,0,0"VerticalAlignment="Top"Height="103"ValueChanged="tbarRate_ValueChanged"Background="#FFEFEBF0"/>
Name="trbVolume"Orientation="Vertical"
Minimum="0"
Maximum="10"
IsMoveToPointEnabled="True"
AutoToolTipPrecision="2"AutoToolTipPlacement="BottomRight"
TickPlacement="BottomRight"
Ticks="1,2,3,4,5,6,7,8,9,10"
IsSelectionRangeEnabled="true"
SelectionStart="1"SelectionEnd="9"
HorizontalAlignment="Left"Margin="426,51,0,0"VerticalAlignment="Top"Height="103"ValueChanged="trbVolume_ValueChanged"Background="#FFF2EFF3"/>
6.2功能代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows;
usingSystem.Windows.Controls;
usingSystem.Windows.Data;
usingSystem.Windows.Documents;
usingSystem.Windows.Input;
usingSystem.Windows.Media;
usingSystem.Windows.Media.Imaging;
usingSystem.Windows.Navigation;
usingSystem.Windows.Shapes;
usingDotNetSpeech;//cs文件中引入库
namespaceWpfSpeechDemo
{
///
///MainWindow.xaml的交互逻辑
///
publicpartialclassMainWindow:
Window
{
SpVoicespeech=newSpVoice();
intspeechRate=0;
intvolume=70;
publicMainWindow()
{
InitializeComponent();
init();
}
privatevoidinit()
{
//初始化语音引擎列表
foreach(ISpeechObjectTokenTokeninspeech.GetVoices(string.Empty,string.Empty))
{
cmbVoices.Items.Add(Token.GetDescription(49));
}
//取得音频输出列表
foreach(ISpeechObjectTokenAudioOutinspeech.GetAudioOutputs(string.Empty,string.Empty))
{
cmbAudioOut.Items.Add(AudioOut.GetDescription(49));
}
cmbVoices.SelectedIndex=0;
cmbAudioOut.SelectedIndex=0;
tbarRate.Value=speechRate;
trbVolume.Value=volume;
}
privatevoidtbarRate_Scroll(objectsender,EventArgse)
{
speech.Rate=(int)tbarRate.Value;
}
privatevoidtrbVolume_Scroll(objectsender,EventArgse)
{
speech.Volume=(int)trbVolume.Value;
}
privatevoidcmbVoices_SelectionChanged(objectsender,SelectionChangedEventArgse)
{
speech.Voice=speech.GetVoices(string.Empty,string.Empty).Item(cmbVoices.SelectedIndex);
}
privatevoidcmbAudioOut_SelectionChanged(objectsender,SelectionChangedEventArgse)
{
speech.AudioOutput=speech.GetAudioOutputs(string.Empty,string.Empty).Item(cmbAudioOut.SelectedIndex);
}
privatevoidbt_speek_Click(objectsender,EventArgse)
{
//终止先前朗读,如果有
speech.Speak("",SpeechVoiceSpeakFlags.SVSFlagsAsync);
speech.Speak(tbspeech.Text,SpeechVoiceSpeakFlags.SVSFlagsAsync);
}
privatevoidbt_stop_Click(objectsender,EventArgse)
{
speech.Speak("",SpeechVoiceSpeakFlags.SVSFlagsAsync);
}
privatevoidtbarRate_ValueChanged(objectsender,RoutedPropertyChangedEventArgse)
{
speech.Rate=(int)e.NewValue;
}
privatevoidtrbVolume_ValueChanged(objectsender,RoutedPropertyChangedEventArgse)
{
speech.Volume=(int)e.NewValue;
}
}
}