CAPTCHAチャレンジをADAに準拠させるために、テキスト読み上げインタープリターを設定することを検討しています。私たちはColdFusionショップであり、RayCamdenは昨年のコンセプトの証明をすでに行っています。私はここで彼のブログ投稿(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.
さらに、コマンドライン()からそのままFreeTTSHelloWorld.jarを実行しようとするとjava -jar bin/FreeTTSHelloWorld.jar
、Javaがハングし、^Cで強制終了する必要があります。