java - FreeTTS 卡在 ColdFusion 8/Java 中

标签 java coldfusion text-to-speech freetts

我正在考虑设置一个文本到语音的解释器,以使我们的 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 退出。

最佳答案

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

关于java - FreeTTS 卡在 ColdFusion 8/Java 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3356448/

相关文章:

java - EventBus困惑

api - 文本到语音 Web API

text-to-speech - WatchKit:我可以使用文字转语音吗?

android - Android实时输出声音处理

java - 序列化不存储对象数据,只存储对象引用

Java 为什么这给我 "0"?

Java:创建自定义异常类 package.Exception

arrays - 遍历隐式数组

java - 在 Lucee 上安装 Cassandra Java 驱动程序

coldfusion - <cfoutput> 有简写吗