[Windows Mobile] Windows Mobileでも英文音声合成ソフトウェアfliteで遊ぶ
Windows Mobile / Pocket PC / Window CEでも音声合成がやりたくなり、EmacsCEの作者で有名なRainerさんがポートした英文音声合成ソフトウェアfliteを使ってみました。
EmacsCEが動くなら、恐らくfliteもW-ZERO3で使えるのではないでしょうか。
サンプル音声
iPAQ h2210上で読み上げたものを置いておきます。
Pocket PCで再生すると切れませんが、Mac OS X上のFirefoxから再生すると後ろが切れますな。
変換が必要かも……。
Alice Through the Looking Glass
Variants of the GNU operating system, which use the kernel Linux, are now widely used; though these systems are often referred to as “Linux”, some say they are more accurately called GNU/Linux systems because of the suite of GNU tools they use.
サンプルスクリプト
fliteはコマンドラインインターフェイスであるため、MortScriptから呼び出して使ってみます。
サンプルをいくつか書いてみましたので参考にしてみてください。
(1) クリップボードの英文を読み上げる
「FliteClip.mscr」をダウンロード
(2) 英文のテキストファイル「\FliteFile.txt」を読み上げる
「FliteFile.mscr」をダウンロード
(3) 英文のテキストファイル「\FliteFile.txt」を読み上げたものをwavファイルに保存する
「FliteFile2Wav.mscr」をダウンロード
(4) 現在時刻を英文で読み上げる
「FliteWatch.mscr」をダウンロード
fliteのインストール
fliteをインストールします。
General Paranoyaxc Softwareにあるfliteのページから、flite-wince-arm-hpc-wce300.tar.gzとcelib-3.13-dll-bin-all-platforms.tar.gzをダウンロードしてきます。
flite-wince-arm-hpc-wce300.tar.gzからは、
flite.exe
flite.dll
を。celib-3.13-dll-bin-all-platforms.tar.gzからは、wince-arm-pocket-wce300-releaseフォルダの中の、
celib.dll
を取り出してきて、三つまとめて「\SD Card\FLITE\」にコピーします(上記スクリプトのデフォルトパス。異なる場所にインストールする場合はスクリプトの該当個所を書き換えてください)。
既にEmacsCEなどを使っていて、celib.dllを\Windowsディレクトリにコピーしている場合はcelib.dllは必要ありません。
ほとんどの人はARM CPUのマシンをお使いでしょうから、それを前提に説明しています。
MortScriptはARM用しかありませんが、fliteは各種CPU用がありますので、ARM CPU搭載機種以外でも使うことができます。
MortScriptのインストール
Downloads - MortScript (PC, PPC, Smartphone, PNA): ProgramからMortScript 4.0 RC10(現時点最新バージョン)をダウンロードしてきてPPC用をインストールします。
拡張子mscrのファイルがMortScriptに関連づけられるので、以降スクリプトの実行はダブルクリック等でできるようになります。
実際に試してみる
ここまで来たら、後はスクリプトを実行するだけです。
(1) クリップボードの英文を読み上げる
クリップボードに英文をコピーして実行してください。
(2) 英文のテキストファイル「\FliteFile.txt」を読み上げる
ルートディレクトリに「FliteFile.txt」という名前の英文テキストファイルを用意し、実行してください。
(3) 英文のテキストファイル「\FliteFile.txt」を読み上げたものをwavファイルに保存する
ルートディレクトリに「FliteFile.txt」という名前の英文テキストファイルを用意し、実行してください。
wavファイルのファイル名を問い合わせるので入力してください。
ルートディレクトリにファイルを保存します。
(4) 現在時刻を英文で読み上げる
ただ実行するだけで時刻を読み上げます。
注意点
スクリプト中では対策してますが(対策というか、エラーを出してます)、fliteは空白を含むパスにあるファイルを読むことができないようです(バックスラッシュでエスケープしてもだめ)。
「\My Documents」以下とかでもだめ。
改行を含まないテキストファイルを読むこともできません。(-tオプションを伴うテキストを読むことは可能)
あとがき
本当はQMAIL3で着信メールのアドレスを読み上げたかったのですが、Windows Mobile / Windows CE上ではQMAIL3のマクロから外部コマンドを実行できるんですかね?
Win32ではWSHのShellオブジェクトを呼び出して実行する手が使えるようですが。
ご存知の方がいらしたら、ぜひ教えてください。


Comments
感動しました。
社内は全部英文メールなので読み上げてもらうようにします。
固有名詞も間違えずに読むのに驚きました。
本当に素晴らしいソフトです!!
感謝!
Posted by: Taka@HKG | 2007.09.09 at 12:28 AM
全部英文ってすごいですね。外資系でしょうか。
参考にしていただけたようで、よかったです。
ちなみにQMAIL3ですと、振り分けで「新着」に対して以下のマクロ適用で、新着メール送信者アドレスの、fliteの音声合成による読み上げができます。
@Execute(@Concat('"\\Sd Card\\flite\\flite.exe" "-t ', @Address(From), '"'))
件数が多いと実用的でないですけどね。
いろいろ面白いことができるはずです。
いつかQMAIL3とfliteがらみのエントリを書こうと思っているんですが。
Posted by: moyashi | 2007.09.09 at 07:06 AM
拝見させていただきました。
早速試してみました。fliteよさそうですね。
初心者の質問で大変恐縮なのですが、fliteを自分のアプリに組み込もうとするならlibファイルがが必要になりますよね?見当たらないのでVC++2005で自分でソースからコンパイルしようと試みたのですが、cst_errjmpとcst_val_type_xxxnoの外部シンボル未解決のエラーでうまく通らずの状態なのですが、何かもしご存知のことがあればお教え願えないでしょうか?
Posted by: oka | 2009.02.16 at 12:09 PM
自分はやったことが無いのですが、以下の書き込みが参考になるかもしれません。
http://pc11.2ch.net/test/read.cgi/mobile/1000484549/432-
WindowsCE版のfliteは、celib.dllが提供する各種標準関数に依存していると思いますので、celib.dllのソースを取ってきて、同梱のヘッダを使ってコンパイル、celib.dllとリンク、という手順が必要かと思います。
Posted by: moyashi | 2009.02.16 at 03:02 PM