如何让UX调用TTS,省去使用庞大语音库的麻烦?这是舍得本文要阐述的主要内容;
经过反复测试,使用下述的代码可以实现调用TTS来朗读指定内容:

<TEXTAREA ID=idTextBox COLS=91 ROWS=6>
I saw its ordered happiness,but a fever in my blood asked for a wilder course.
</TEXTAREA>
<P align=center> <BUTTON id=idbSpeakText onclick=SpeakText();
  style="HEIGHT: 24px;  WIDTH: 91px">播放</BUTTON> 
</P>
<script>
var VoiceObj = new ActiveXObject("Sapi.SpVoice");
function SpeakText() {
if( idbSpeakText.value == "播放" )
{
try
{
VoiceObj.Speak( idTextBox.value, 1 ); idbSpeakText.value="停止";
}
catch(exception)
{
alert("Speak error");
}
}
else if( idbSpeakText.value == "停止" )
{
VoiceObj.Speak( "", 2 ); idbSpeakText.value="播放";
}
}
</script>

注意,使用时要将"<>"分别替换为"&lt;"和"&gt;".这里为了分析代码方便,未做转换.

代码分析:

整段代码分成三个部分:

1.TEXTAREA:里面的"I saw its ordered happiness,but a fever in my blood asked for a wilder course."就是要朗读的对象;

2.BUTTON :播放按钮;

3.script:播放控制脚本;

使用的时候,2,3两个部分不需要改,只要在你要修改的句子前后加上TEXTAREA代码即可.

这部分工作最好是由转换精灵来完成,具体的功能正在设计之中.动手能力强的童鞋,可以借助Search&Replace来批量替换文本,实现自动调用TTS的目的.

TTS部分应作如下设置:

1.首先保证系统内安装了TTS引擎,推荐使用iVona的Brian;

2.在控制面板中找到"语音"并双击,切换到"文字-语音转换"选项卡,选择将要作为系统默认TTS的语音,如"iVona Brian",调整好语速(一般默认即可),点击确定即可完成操作;

0004.jpg


IE部分应作如下设置:

因为需要加载sapi.spvoice控件,必须降低IE的安全级别,才能在UX中正常使用TTS

方法:打开IE,然后选"工具->Internet选项–安全->自定义级别",启用"对未标记为可安全执行脚本的的ActiveX控制初始化并执行脚本"

此项操作后,需重启UX方可生效.

0002.jpg

此版本代码仍然不是最精简的版本,因为在同一页面中,如果需要对单词和例句分别加以控制的时候,代码仍需进一步修改,这个有待进一步研究.

[续]

舍得对上面的代码再次进行精简,针对需要多处调用播放脚本的情况,进行了优化,下面是优化后的代码:

  <question>bear
  &lt;br&gt;
&lt;button onClick="say('bear')"&gt;播放&lt;/button&gt;&lt;button onClick="say('')"&gt;停止&lt;/button&gt;
&lt;br&gt;
I saw its ordered happiness,but a fever in my blood asked for a wilder course.
&lt;br&gt;
&lt;button onClick="say('I saw its ordered happiness,but a fever in my blood asked for a wilder course.')"&gt;播放&lt;/button&gt;&lt;button onClick="say('')"&gt;停止&lt;/button&gt;
&lt;script&gt;
var VoiceObj = new ActiveXObject("Sapi.SpVoice");
function say(content){
VoiceObj.Speak(content); 
}&lt;/script&gt;
</question>

  1. 在这个例子中,把上面的TEXTAREA去掉了,播放部分直接在button内引用,在脚本中加入了"content"参数,这样一个脚本就可以同时控制多处内容–内容只要在button修改即可.按钮改为两个(播放和停止),顺便把"出错判断"的代码也精简掉了.

    例中播放有两处,分别为单词和句子.

    制作出来的效果如下:

    0003.jpg

    这样的版本基本上可以使用了,代码并不长.

    P.S.:其实停止按钮部分代码也可以去掉.因为从实际使用的过程中发现,点了播放之后,程序基本上不会给你点停止的机会,句子特长的可能会有点用….有这工夫,切换一下页面岂不更快?

    这种调用方式比用灵格斯划译的方式的优胜之处在于,你不用去选取整个句子,这样能节省一点点时间.

    接下来要研究一下自动播放的问题.

    [续]

    如何实现自动播放?

    代码如下:

&lt;script language="JavaScript"&gt;
    VoiceObj.Speak 'Who are you?');
&lt;/SCRIPT&gt;

只要加一句VoiceObj.Speak(‘Who are you?’);即可,可以写到上面的脚本里面,因为上面已经声明了VoiceObj这个变量,所以可以直接调用.如果要分开写的话,必须跟在上面那个脚本后面.

例子中的"Who are you"就是要自动播放的内容(相当于以前的bgsound),你要播放什么,将它放到这个位置即可.自动播放一般不宜多,Q/A各一处就行了.

本文版权归舍得英语魔法学苑所有,欢迎转载,转载请注明作者和出处。谢谢!

作者:
舍得

首发:
http://blog.sina.com.cn/learningpower