Clojure で合成音声を使ってしゃべらせてみる

Java で合成音声をやるには、freeTTS なるものが使えるらしいので、Clojure でやってみた。

とりあえず、零人間でプロジェクトをつくる

lein new sapi
cd sapi
lein deps

スピーチエンジン(?)をゲット

http://sourceforge.net/projects/freetts/files/
ここから、*bin.zip を落として、どこかに展開する。

lib/ 内の jsapi.(sh|exe) を実行して、jsapi.jar を生成。
その後、lib/*.jar と mbrola/*.jar をプロジェクトディレクトリ内の lib/ にコピー

しゃべらせるコードは簡単

src/sapi/core.clj

(ns sapi.core
  (:import
     (com.sun.speech.freetts Voice VoiceManager Gender))
  (:gen-class))

(System/setProperty
  "freetts.voices"
  "com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory")

(defn say [text]
  (let [vm (VoiceManager/getInstance)
        voice (.getVoice vm "kevin16")]
    (doto voice
      (.allocate)
      (.setVolume 100)
      (.setPitch (* (.getPitch voice) 1.9)) ; 声を高く
      (.setRate (/ (.getRate voice) 0.7))   ; ゆっくり
      (.speak text)
      .deallocate)))

; say 呼ぶだけ - 「わじまさんは、さいこうです」
(say "wah jee mah san were, sai koh death")