PC6下载站

分类分类

SuperMemoUX自动调用TTS基础分析

关注+2010-08-20作者:大毛

SuperMemoUX自动调用TTS基础分析
如何让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",调整好语速(一般默认即可),点击确定即可完成操作;

IE部分应作如下设置:
因为需要加载sapi.spvoice控件,必须降低IE的安全级别,才能在UX中正常使用TTS。

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

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

[续]
舍得对上面的代码再次进行精简,针对需要多处调用播放脚本的情况,进行了优化,下面是优化后的代码:   <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>
复制代码在这个例子中,把上面的TEXTAREA去掉了,播放部分直接在button内引用,在脚本中加入了"content"参数,这样一个脚本就可以同时控制多处内容--内容只要在button修改即可.按钮改为两个(播放和停止),顺便把"出错判断"的代码也精简掉了.
例中播放有两处,分别为单词和句子.
制作出来的效果如下:

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

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各一处就行了.

展开全部

相关文章

更多+相同厂商

热门推荐

  • 最新排行
  • 最热排行
  • 评分最高
排行榜

    点击查看更多

      点击查看更多

        点击查看更多

        说两句网友评论

          我要评论...
          取消