使用语音即时校对输入内容

利用TTS实现实时语音校对
本文介绍如何利用微软TTS引擎实现在数据录入过程中的实时语音校对功能,该功能能显著提高录入准确性并减少后期核对工作。通过在WinForm项目中引入必要的类库,并设置输入框的事件处理,实现录入内容的语音反馈。
 

 

此文将介绍利用微软TTS引擎,在录入数据时进行即时语音校对的示例。

 

这是一项非常简单且非常实用的技术,此功能在行业软件中使用的话,将会使用户的录入准确率大幅提高,还可减少甚至取消后期核对工作。

 

你需要使用以下类库来操作TTS

 

 

在文章末尾处提供的源代码中将包含此类库。

 

现在开始编写这个示例程序:

 

新建一个WinForm项目,引入上述dll,在窗体后台代码中添加对其命名空间的引用:

 

 

using  DotNetSpeech;

 

 

由于我们还需要用到正则表达式,所以也将其所在命名空间一并引用:

 

 

using  System.Text.RegularExpressions;

 

 

然后来设计一个基本的用户界面:

 

 

添加一个BackgroundWorker组件:

 

 

为其DoWork事件添加处理:

 

 

private   void  backgroundWorker1_DoWork( object  sender, DoWorkEventArgs e)

{

        SpeechVoiceSpeakFlags SpFlags 
=  SpeechVoiceSpeakFlags.SVSFlagsAsync;

        SpVoice Voice 
=   new  SpVoice();

        Voice.Rate 
=   - 3 ;

        Voice.Speak(e.Argument.ToString(), SpFlags);

}

 

 

Voice.Rate属性是用来设置语速的修正值的,我希望它读慢点,所以就设为了-3

 

这个事件处理的功能就是在后台将接收到的字符串通过TTS念出来。

 

我们再来编写一个方法,来统一对backgroundWorker1进行调用:

 

 

void  朗读( object  内容)

{

    
try

    {

        backgroundWorker1.RunWorkerAsync(内容);

    }

    
catch  (Exception er)

    {

        MessageBox.Show(er.Message, 
" 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Error);

    }

}

 

 

为了便于演示,加上我个人习惯,我将此方法名称设为了中文。

 

由于语音处理需要一定时间,在此期间如果再度调用backgroundWorker1的RunWorkerAsync方法,将会引发异常,所以需要进行捕获。

 

实际应用中如需要照顾较高速度的录入,可以采用多个BackgroundWorker组件,轮流滚动处理。

 

接下来就是为每个输入框定义朗读方式了,我们会在用户按下回车键时,进行语音处理,并将光标跳转到下一个输入框。

 

首先设置序号输入框的事件处理:

 

 

private   void  numericUpDown1_KeyDown( object  sender, KeyEventArgs e)

{

    
if  (e.KeyData  !=  Keys.Enter)  return ;

    朗读(numericUpDown1.Value);

    textBox1.Select();

}

 

 

然后是品名的:

 

 

private   void  textBox1_KeyDown( object  sender, KeyEventArgs e)

{

    
if  (e.KeyData  !=  Keys.Enter)  return ;

    朗读(textBox1.Text);

    numericUpDown2.Select();

}

 

 

这两个都比较简单,九十直接念出原文。

 

单价则有些不同:

 

 

private   void  numericUpDown2_KeyDown( object  sender, KeyEventArgs e)

{

    
if  (e.KeyData  !=  Keys.Enter)  return ;

    朗读(
" "   +  numericUpDown2.Value);

    numericUpDown3.Select();

}

 

 

在其内容前加了人民币符号,它阅读时就会这样读:九百六十七元

 

数量与之类似:

 

 

private   void  numericUpDown3_KeyDown( object  sender, KeyEventArgs e)

{

    
if  (e.KeyData  !=  Keys.Enter)  return ;

    朗读(numericUpDown3.Value 
+   " " );

    textBox2.Select();

}

 

 

内部编号有些特殊,我期望它能够将每个字母或数字都单独念出,这可以通过加注拼写标记来实现:“<spell></spell>”

但是这样还有一个问题,就是他读数字的时候会将其读作英文,这不是我们所希望的,这还需通过加注语言标记来修正:“<voice required=""Language=804""></voice>”

故此我们需要附属一个方法来将源文本格式化:

 

 

private   void  textBox2_KeyDown( object  sender, KeyEventArgs e)

{

    
if  (e.KeyData  !=  Keys.Enter)  return ;

    朗读(加注中文标记(textBox2.Text));

    button1.Select();

}

 

string  加注中文标记( string  原字符串)

{

    
return   string .Format( " <spell>{0}</spell> " , Regex.Replace(原字符串,  @" (.) " @" <voice required=""Language=804"">$1</voice> " ));

}

 

 

好了,最后是提交按钮的事件处理,我们也要让他朗读点东西:

 

 

private   void  button1_Click( object  sender, EventArgs e)

{

    listBox1.Items.Add(
new

    {

        序号 
=  numericUpDown1.Value,

        品名 
=  textBox1.Text,

        价格 
=  numericUpDown2.Value,

        数量 
=  numericUpDown3.Value,

        内部编号 
=  textBox2.Text

    });

    朗读(numericUpDown1.Value 
+   " 号,添加完毕 " );

    numericUpDown1.Value
++ ;

    numericUpDown2.Value 
=   0 ;

    numericUpDown3.Value 
=   1 ;

    textBox1.Text 
=  textBox2.Text  =   "" ;

    numericUpDown1.Select();

}

 

 

至此这个示例就完成了,其使用效果见下面这段视频:

 

 

源代码下载

 


 

插播个小喇叭广播:

 

我的MailMail现已正式发布,现在开始到9月1日0时止举办免费赠送注册码活动,欢迎参与^^:http://www.cnblogs.com/SkyD/archive/2008/08/28/1278463.html

 

  

转载于:https://www.cnblogs.com/SkyD/archive/2008/08/28/1278478.html

Word语音打字校对专家 5.92 特别版 [在百度搜索相关主题] 软件大小:4.41 MB 软件语言:简体中文 软件类别:国产软件/办公软件 运行环境:WinVista, Win2003, WinXP, Win2000 授权类型:免费版 Word语音打字校对专家是一款针对Word文档语音输入识别和语音合成软件,能在你键盘输入的同时把你在Word中所输入的字符或汉字读出来,这样就可以大幅度提高工作效率了,这点对于用五笔或其它形码的朋友来说就更显得意义重大了,它能避免汉字输入过程中很多最常犯的错误和许多稀奇古怪、莫名其妙的错误。这个软件的另外一个神奇功能就是可以将Word或剪贴板中的文字读出,这样对于编辑校对稿子就很省事了,不必一边看稿子一边看屏幕校对,两眼昏花了。 新增功能: 1.对编排后的文字文件进行朗读。支持记事本、写字板、Word等常用办公软件。 2.对键盘录入的阿拉伯数字、英文字符、中文文字、中英文标点进行语音提示,可避免差错,提高工作效率。 3.对剪贴板上文字文件进行朗读。如在网页上浏览了一段好文章,将文章内容选中,然后按Ctrl+C键就能即时朗读了。 4.可在 Word 2000/XP/2003、记事本、写字板等常用办公软件下正常朗读。 6.新增把Word及TXT等文字文件直接转换成WAV声音文件。 5.新增语音计算器,只要使用键盘或鼠标输入数值,计算机就会自动报出加减乘除等符号名称,并会瞬间给你报出答案。特别适用于需要大量数据统计如财会人员使用。 7.语音朗读校对:当语音输入完一篇文章以后,你可以让计算机用普通话给你朗读一遍。这样,通常需要两个人的校对工作,一个人就可以轻松完成。同时,利用这一功能,你可以把看书变成“听书”。比如,你从网上下载一部小说,然后让计算机用普通话给你朗读,这样,你就可以闭上眼睛“看书”了。 8.在进行文章朗读时,可读出全角和半角标点以及各种常用的符号,如逗号、美元等符号。 9.新增支持英文语音、中文男声语音、中文女声语音等多种语音种类的发声,并能调节语音朗读速度,无论击键的速度有多快,都可以按照先后顺序读出来。 10.新增语音键盘功能,并支持鼠标左、右键的朗读,它是电脑新手及盲人操作键盘鼠标的辅助工具。在QQ聊天中也能正常发声。 11.你还可以使用语音在浏览器上输入文字,可以使用语音来操作浏览器和鼠标、键盘,还可以朗读网页。在电脑上打一篇文章、输入一个表格时最好要一些提示声音,就不会输入错了,利用电脑校对文稿,自己一个人就可以做校对工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值