Squeak に英文を読ませる


ひ日誌の「 Mac に英文を読ませる」に触発されて。 エディタとして常用する Emacs に読み上げ機能を付加する便利さや、任意のキーで選択テキストを読み上げてくれる機能が用意されている OS X にはとうていかなわないまでも、クリップボードのテキストを声にする(“読み上げる”とは口が裂けても言えないw)…くらいのことは Squeak システムにも簡単にできそうなので試してみました。

Speaker default say: 'this is a pen.'
| button |
button := SimpleButtonMorph new.
button labelString: 'say clipboard text'.
button target: [Speaker default say: Clipboard clipboardText asString].
button actionSelector: #value.
button openInHand


こうして作ったボタンをデスクトップのどこか適当な場所に貼り付けておけば、このボタンのクリックでクリップボードの内容を声にしてくれるはず…なのですが、これがなかなか(^_^;)。


発声を目的とした単純なテキストならたいていは大丈夫なものの、いろいろな記号などが入っている通常の文章がクリップボードに入っている場合、音声への変換の際にエラーを頻発します。しかたがないので、そうした例外発生を消極的に防ぐ手だてを施したチェンジセットを用意しました。

http://squab.no-ip.com:8080/collab/uploads/61/SpeakerFix-sumim.cs.gz


ただ、もともと a Speaker 自体が短い文章を読むことを前提として作られているようで、長い文章だと前処理にやたら時間がかかるうえ、声のトーンが最初と最後でえらく違ってしまうといった不都合がまだ残るようです。もっともそれ以前に、特殊な単語の読み方はおろか、数字の読み方など基本情報すら入っていないので、発音の参考やヒヤリングの練習には使えなさそうです。ちょっと残念ですが、これが当面の Squeak クオリティ(^_^;)。

読み上げは AppleScript に任せる

Squeak 3.5 までは、AppleScript へ橋渡しするクラス(Applescript。なぜか S は小文字…。orz)があったので、プラグイン(TestOSAPlugin)がしかるべき場所(たとえば使用中の仮想イメージと同じディレクトリ、とか)にちゃんと置いてあれば、次のような感じで AppleScript を介して、しゃべりは Mac に任せることも可能です。なお、AppleScript から Text-To-Speech の機能を使うには、Say や Speech といったスクリプト機能拡張を別に用意する必要があります。(ここでは Script Tools 1.3.6 に収められている Speech [web.archive.org] を使用)

Applescript doIt: 'speak "this is a pen."'
| button |
button := SimpleButtonMorph new.
button labelString: 'say clipboard text'.
button target: [Applescript doIt: 'speak "', Clipboard clipboardText asString, '"'].
button actionSelector: #value.
button openInHand