2

我正在考虑设置一个文本到语音的解释器,以使我们的 CAPTCHA 挑战符合 ADA 标准。我们是一家 ColdFusion 商店,Ray Camden 去年已经完成了概念验证。我一直在这里使用他的博客文章 - http://www.coldfusionjedi.com/index.cfm/2009/5/29/Generating-Speech-with-ColdFusion-and-Java - 作为资源。

那里的一切都很好......除了 FreeTTS 应该工作的部分。我有以下代码:

<cfset jardir = expandPath("freetts-1.2.2-bin/freetts-1.2/lib") />
<cfset jars = [] />
<cfdirectory name="jarList" directory="#jardir#" />
<cfloop query="jarList">
    <cfset ArrayAppend(jars, jardir & "/" & name) />
</cfloop>

<cfset loader = createObject("component", "javaloader.JavaLoader").init(jars) />

<cfset voiceManager = loader.create("com.sun.speech.freetts.VoiceManager") />
<cfset vm = voiceManager.getInstance() />
<cfset voice = vm.getVoice("kevin16") />

<cfset voice.allocate() />
<!--- <cfset voice.speak("Hi.") /> --->
<cfset voice.deallocate() />

因此,它运行良好,我可以在解除分配后(甚至在分配后)对语音对象进行 cfdump。因此,您知道依赖项位于正确的位置,并且 ColdFusion 正在正确地实例化所有内容。但是一旦我取消注释对 speak() 的调用,测试脚本就会挂在该方法上。

迹象表明某些服务器配置问题是这里的罪魁祸首,但对于我的生活,我想不出它会是什么。(我们正在使用 ColdFusion 8.01,顺便说一句。)如果有人能提供一些额外的见解来解释为什么 FreeTTS 会出现这样的行为不端,我将不胜感激。

更新:这似乎是一个更普遍的 Java 问题。ColdFusion 的 JRUN 日志显示服务器开始挂起时引发以下错误:

Exception in thread "Thread-667" java.lang.IllegalArgumentException: No line matching interface SourceDataLine supporting format PCM_SIGNED 8000.0 Hz, 16 bit, mono, 2 bytes/frame, big-endian is supported.

此外,如果我尝试从命令行 ( java -jar bin/FreeTTSHelloWorld.jar) 开箱即用地运行 FreeTTSHelloWorld.jar,Java 将挂起,我们将不得不使用 ^C 强制退出。

4

1 回答 1

0

你有声卡吗?尝试(来自 ray 的同一篇文章)将文件写入磁盘。

于 2011-09-14T05:33:10.267 回答