2010年08月28日

GNOME Orca で Open JTalk も 使えるようにしました。

注意:
このプログラムは実験的なものです。自己責任でお使いください。
動作が確認できたのは Ubuntu10.04 です。
それ以後では動作しません。インストールしないでください。
2011.10.18


先日、mbtts を修正して AquesTalk2 を使えるようにしたのですが、せっかくなので Open JTalk も使えるようにしました。これで GNOME Orca で Open JTalkの落ち着いた音声でガイドしてくれるようになります。まだ音量調整など Orcaの設定画面からできないので、ぜんぜん実用的ではないですが、いい感じにしゃべってくれます。今回いろいろやって長文が不得意だということも気が付きましたが、メニューなどの項目を読み上げてくれる分には一番ききやすいように思います。今のところ、Open JTalk の標準の音量が小さく Open JTalk のときだけ、ちょっとパソコンのボリュームを上げないといけませんが。

それから、MBROLAだけのときには気づかなかったのですが、音声の再生速度が今までおかしかったです。pygame.mixer は初期化するときに周波数もちゃんと指定しないといけなかったんですね。でも発音するたびに、初期化をやるようになったので、今まで以上に遅れて発音しているように思います。発音するたびに初期化をしてしまうと、やはりとても遅れてしまいます。声の速さの不正確さは犠牲にしても、遅れを短くしようと思います。初期化は音声を切り替えるときだけにします。(2010.8.30修正)


まだまだ問題はありますが、とりあえず目標としていたフリーの3種類の日本語音声が使えるようになりました。あとはこつこつ細かな修正を加えていく作業が続きます。早いうちに音声出力を PyGame から自前のものに切り替えたいとも思います。

それでは、Open JTalkを使えるようにする方法を以下に書いておきます。ここでは GNOME Orca の対象となる Linux 向けだけでなく、OS Xや、Windows向けの設定方法もまとめて書いておきます。Linux の GNOME Orca で日本語をしゃべらせるには、この Open JTalk と mbtts のインストールの他に、GNOME Orca の修正ビルド、およびインストールが必要です。これは、以前の記事「takayanの雑記帳: GNOME Orca で MBROLA と mecab を使って日本語をしゃべらせる方法」を見てください。

さて、何はともあれ Open JTalk の実行ファイルが必要なので、これを用意します。やはりソースからビルドします。(Windows版はビルド環境作りが面倒なのでビルド済みを用意しています。)
Open JTalkのビルド、実行には hts-engine のライブラリが必要なので前もってこれもビルドします。

それぞれのソースを下記の場所からダウンロードします。

hts-engine:
http://sourceforge.net/projects/hts-engine/
現時点の最新ファイルは、hts_engine_API-1.03.tar.gz です。

open_jtalk:
http://sourceforge.net/projects/open-jtalk/
現時点の最新ファイルは、open_jtalk-1.01.tar.gz です。

mbtts 側の処理の単純化のため Ubuntu でも OSX でも文字セットにしています。Windows 版が UTF-8 でビルドできないので SJIS にしないといけないので、Ubuntu でも OSX でも文字セットは SHIFT_JIS で作っています。なお、nishimotz さんのページ にUbuntu用のパッケージが置かれています。今回の目的以外ならばこれを使うと便利なのですが、このdebパッケージは UTF8 でビルドされているので今回の mbtts で利用することはできません。
Visual C++でコンパイルするときフィルターを通すことで、エラーが出ないように文字コードをエスケープし回避しました。そういうわけで、どのプラットフォームでも UTF-8をOpenJtalkの標準文字セットにしました。これで、nishimotz さんのページ に置いてある Ubuntu 用のパッケージをインストールした場合でもうまく発音してくれるはずです。

ビルド環境さえ整っていれば、Ubuntu、OSXともに次のコマンドでインストールできます。ファイルが更新され名前が変わった場合は適宜書き換えてください。
このときダウンロードしてきた二つのファイルが同じフォルダにおいてあるとします。

tar xvfz hts_engine_API-1.03.tar.gz
cd hts_engine_API-1.03
./configure
make
sudo make install
cd ..
tar xvfz open_jtalk-1.01.tar.gz
cd open_jtalk-1.01
./configure --with-charset=UTF-8
make
sudo make install

(修正2010/10/13)

Windows版は、ビルド環境を作るのも大変でしょうから、文字セットUTF-8で、音声出力を無効化し、VC++2008でビルドした open_jtalker.exe を、mbtts.zip内に同梱しています。

これは以前書いた次の手順でビルドしています。
takayanの雑記帳: Open JTalkをVS2008で

ただし、Windows 版では音声出力をしてしまうので、上記の nishimotz さんの記事を参考に、open_jtalk.c を修正して音声出力を殺しています。
具体的には、現在のソースで144行目に下記のように1行を挿入します。
HTS_Engine_create_pstream(&open_jtalk->engine);
open_jtalk->engine.global.audio_buff_size = 0; // nishimotz
HTS_Engine_create_gstream(&open_jtalk->engine);
なお Windows版では、hts-engine のライブラリは静的に取り込んでいるので open_jtalk.exe 単体で実行できます。

文字セットのことですが、最初、Windows版を UTF-8 でビルドしようとしたのですが、失敗してしまいました。どうやらソースファイルをUTF8で保存することで文字列定数をUTF-8文字列として用意してある部分が引っかかってしまうようです。これを回避するにはパソコンのロケールを英語に切り替えて再起動すればいいのですが、それだとビルドは成功しますが、文字によって異常終了するようになってしまいます。解決策はあるのでしょうが探すのも面倒なので、Windowsでは無理せずSJIS版にしています。そして mbtts の処理を単純化するために、どのプラットフォームでも SJIS版を使うようにしています。ただ SJIS 固定だと他にOpen JTalk利用のソフトが出てきたとき困るかもしれませんので、ここは今後切り替えられるようにしようと思っています。
(2010.08.30 以上の文字セット関連の記述の更新。該当する文字セットでビルドして実行ファイルさえ用意できれば、三つのどの文字セットでも処理できるはずです。)

これで、実行ファイルができました。Ubuntu と OSX では make install でちゃんとPATHの通ったところに配置されているはずです。Windows版も同じように配置する必要があります。PATHの通ったところならばどこでもいいのですが、分かり易いように、ユーザーのホームフォルダの「.mbtts」フォルダの中に「open_jtalk」フォルダを作ってそこに置くと認識するようにしています。

次は辞書と話者データです。Open JTalk には 辞書と話者データが必要です。次の場所からダウンロードしてきます。なおOpen Jtalkの文字セットに合わせて辞書はUTF-8版を使います。
http://sourceforge.net/projects/open-jtalk/files/

それぞれの現時点での最新のアーカイブ名:
辞書、open_jtalk_dic_utf_8-1.00.tar.gz
話者、hts_voice_nitech_jp_atr503_m001-1.01.tar.gz
辞書の名前が更新されたときは、.mbtts 内の config.txt の変数 openjtalk_dic_ver の値を新しいバージョンに修正し対応します。音声ファイルの方は名前が変わった場合でも修正する必要はありません。

辞書も、話者データも、設定フォルダの open_jtalk フォルダの中にアーカイブのままコピーするだけです。あとは実行時に自動的に展開されます。
(2010.8.30 更新。データのコピーについての仕様変更)

これで、Open JTalk を使う準備は整いました。

AquesTalk2 のための準備は、「takayanの雑記帳: GNOME Orca で MBROLA と mecab を使って日本語をしゃべらせる方法」にも書きましたが、設定フォルダ「.mbtts」の中に各プラットフォーム向けの DLL を取り出し配置すればこの ライブラリの機能が利用できます。Aquestalk2の製品ページを開いて、該当するプラットフォームのアーカイブをダウンロードした後、DLLを抽出します。 Windows は AquesTalk2.dll、Linuxは libAquesTalk2.so.1.0、OSX は AquesTalk2 という名前のファイルです。追加の声種ファイルは、設定フォルダの 中に phont フォルダを作り、その中に入れるだけです。ここに入れるだけで、内部の処理で使用可能音声を問い合わせたときにリストアップされます。


あとは、mbtts の最新版をインストールします。これは展開したフォルダの中の mbtts.txt の手順通りにやります。
そして、以前の記事「takayanの雑記帳: GNOME Orca で MBROLA と mecab を使って日本語をしゃべらせる方法」を見て、Orca を修正インストールしてください。

GNOME Orcaがあれば音声を切り替えて、音声がどう聞こえるのかためしに聞けるのですが、Windows や Mac OS X でも確認しやすいように、mbtts の demo 用のスクリプトを修正しました。speechbox.py は以前から用意していたテキストボックスの内容をの読み上げるスクリプトですが、音声選択メニューを追加しました。それぞれの音声を試すのに使ってみてください。ただし実行には wxPython が必要です。


posted by takayan at 01:51 | Comment(4) | TrackBack(0) | GNOME Orca | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
すばらしいです。Ubuntu10.04LTS-amd64のLTSPクライアントでも使えました。
Posted by hoozukiyama at 2010年09月28日 10:39
hoozukiyamaさん、報告ありがとうございます。
まだ問題もありますが、やろうと思えば、orcaで日本語が使えることが示せただけでも十分役割は果たせたと思います。もう少し頑張って、orca本体に組み込んでもらってもいいくらいには、仕上げたいです。
Posted by takayan at 2010年10月05日 01:10
takayanさん、Ubuntuユーザーの私もGNOME Orcaの日本語化に関心があります。現在、私はオープンソースで開発が進められているNVDAのIME関連の開発を中心に活動しているのですが、お互いに情報交換など協力できることがあるかもしれませんね。
Posted by hoozukiyama at 2010年10月06日 09:22
はい、ご提案ありがとうございます。
日本語入力関連がどうしても難問の一つとして残っていました。実際にNVDAのプロジェクトのIME関連技術はとても参考になるのではないかと思っていました。
うまくいけば、いろいろできると思います。
Posted by takayan at 2010年10月07日 02:10
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック