>>2010年04月04日Orcaに日本語をしゃべらせたいUbuntuで日本語が話せるPythonのパッケージを作ったのですが、Linuxでの音声合成のことについては実のところあまりよく知りません。いうわけで、今いろいろ調べています。今回はOrcaについて調べたことです。OrcaはLinuxにおける視覚障碍者のためのスクリーンリーダーを含む支援技術です。Orcaを設定し起動させておくと、選択しているメニューやキー入力など、コンピュータに対する操作をいろいろと読み上げてくれるようになります。残念なことに現在Orcaは日本語には対応していません。(追記)日本語をしゃべらせることに成功しました。詳しくは、下記のエントリー。使って日本語をしゃべらせる方法(追記終わり)本当に残念です。残念なので、どうして日本語がしゃべれないのか調べてみました。試してみたディストリビューションはUbuntu9.10(デスクトップ32ビット版)です。UbuntuではOrcaは既にインストールされていますが、有効にはなっていません。Orcaでデスクトップを読み上げてくれるようにするには有効にしなくてはいけません。システム>設定>支援技術で、「支援技術の設定」ウィンドウを出して、「支援技術を有効にする」をチェックし、その上にある「お気に入りのアプリ」ボタンを押して、「アクセシビリティ」シートの視覚支援でOrcaを選び、起動時に実行をチェックします。「支援技術の設定」ウィンドウに戻り、画面下の段の真ん中の「閉じてログアウト」を押し、いったんログアウトします。スクリーンリーダと拡大鏡」というウィンドウが出現します。設定ボタンを押して、細かな設定を行います。「Orcaの設定」ウィンドウでは、「読み上げ」タブを選び、最初にある読み上げを有効にするを選びます。その下の項目を決めていきます。初期状態では、「Speechシステム」では「Speechディスパッチャ」のみです。「Speechのシンセサイザ」では実質espeakのみです。espeakは多言語対応の音声合成なので、音声の人物で様々な言語を選べます。残念ながら現在日本語には対応していません。この音声聞き覚えがあるかもしれませんが、これはWindowsのスクリーンリーダNVDAのディフォルトの音声としても使われています。UbuntuのOrcaで使える音声合成はespeakだけではありません。Festivalという音声合成も使えます。初期状態では使えないので、少なくとも2つのパッケージのインストール作業をします。Festivalのインストール時に音声データなど最低限必要なパッケージもインストールされます。インストールには端末から次の2つのコマンドを実行します。いう音声もインストールします。やって、追加パッケージをインストールすると、Orcaの読み上げ音声としてFestivalも使えるようになります。読み上げタブを選んで、次のように設定します。サービスでは、espeakの音声も選ぶことができます。そのときは次のような設定にします。Driver音声の人物:default(en)しかし日本語文字列の読み方を知りませんから、ほとんどの項目を読んでくれません。espeakの英語を選ぶと日本語の文字は文字コードとして読み上げているように聞こえます。Festivalでは読めない文字は何もしません。そのため「システム」メニューの「GNOMEについて」などのような英語から始まる項目をポイントしたりすると、読み上げがうまくいっていることが分かります。日本語文字列は読み上げてくれないので、これではうまく働いているのかがよくわかりません。そのためにデスクトップ環境を英語にしてみます。メニューなどの文字列を英語にしてみるわけです。ログアウトし、言語を英語にして再度ログインします。ログイン画面の左下で英語に切り替えた後、ログインします。最初は英語の項目はその他の中に入っているはずです。言語を変えてログインすると、ホームディレクトリのフォルダの名前を変えるかどうかきいてきます。Names」を選択します。ALT+F1がWindowsでのウィンドウズキーでスタートメニューを開く操作に相当します。矢印キーで移動させメニューの項目を読ませたり、テキストエディタを起動させ、文字を書いたり、FirefoxやOpenOfficeを起動させたりして、いろいろ試してみます。音声はしっかり出ています。個人的にはFestivalの音声が聞き取りやすいです。これを使いこなすには、合成音声に慣れて、その英語の意味が分かる必要があるので、誰にでもということはできません。ショートカットキーも覚えなくてはいけません。ハードルは高いかもしれませんが、Orcaは十分使えるのではないかと思います。英語で使えるというのは分かりました。日本語はやっぱりできないのだろうかと、デスクトップの言語を日本語に戻し、調べてみました。試してみた結果、一つ面白いことが確認できました。実用的ではありませんが、可能性がちょっとだけ見えてきました。それは文字列の置き換えを使う方法です。「Orcaの設定」画面には右から二番目のタブを開くと、置換する文字列のリストがあります。ここに日本語とその読みを登録します。デスクトップにある項目や、仮名文字の読みをローマ字や日本語の発音になるような英語のつづりで書いていきます。すると、ちゃんと読み上げてくれます。これは日本語の文字がしっかり内部で認識されているということの証拠でもあります。活用は処理してくれませんし、漢字の複数の読み方にも対応できません。仮名を一文字ずつというのもやってみましたが、それはちょっと上手くいかないようです。それでもこれはいい兆候です。orca.pronunciation_dict.pronunciation_dict={}この行の直後に、次のような行を追加していきます。on')メニューなど出現する可能性がある日本語について、英語の音声合成の発音規則を考慮しながらここにいくつもの読みを教える行を加えていきます。これが実用的かどうかは僕自身疑問に思いますが、現在できる一番わかりやすい解決法だと思います。一度「Orcaの設定」が開かれ設定が新たに保存されると、この行はユニコードの16進数文字列に変換されます。一つ面白い現象がありました。Driver音声の人物:Mandarin(zh)Mandarinというのは台湾語のことです。このように設定すると漢字を中国語読みで読み上げてくれます。いってもその発音は中国語で合っているのかわかりませんよね。書いて読ませると、ちゃんと中国語らしく読んでくれます。サービスの方でしかできません。この違いが何かのヒントなのかもしれません。この漢字の読みはどうやって実現しているのかeSpeakのソース(zh_listx)で確認してみると、21561文字の単漢字と9392語の熟語の、大規模な読みと声調の対応リストがありました。日本語と違って、中国語は原則文字の読みは一意に決まりますから、例外のあるものは熟語で対応すれば、このように漢字の読みができるのでしょう。日本語では活用が複雑なのでこの方式では完全な日本語の読みには対応はできませんが、この方式ならば仮名の読みには対応できるでしょうから、上記のorcaのスクリプトで対応する方法よりか、よくなるでしょう。eSpeakでは、MBROLAが使えますからjp2データベースを利用すれば上記の外人さんの日本語よりも聴きやすくなるでしょう。eSpeakのコードを改造してMeCabを組み込むことができれば、もっとよくなるはずです。eSpeakもMBROLAが使えますが、Orcaで使えるもう一方の音声合成であるFestivalでもMBROLAが使えます。ソースコードの改造はFestivalについても考えても、面白いかもしれません。まとめると、こうなります。日本語を解釈する処理が入っていない。日本語を発音する音声合成が組み込まれていない。その改善策として考えられるのは:・今すぐできることとして、Orcaの読み辞書を利用すれば、外人さんの片言の日本語っぽい簡易的な日本語読みができる。固定されたメニューの読みなどに限定され、実用的とは言えないだろう。・eSpeakのMandarinを参考にして、漢字の熟語や仮名文字などの一覧表を作成すれば日本語の読みが可能かもしれない。eSpeakのMBROLA接続を利用してJp2などの音声データベースを使って発音させることができるかもしれない。eSpeakの内部の処理を日本語向けに多少修正してMeCabの処理を組み込めば、日本語の活用にも対応できるようになるかもしれない。・同様に、FestivalのMBROLA対応を利用して、内部で日本語に対応した処理を追加すれば可能かもしれない。上記には書いていないが、Festivalはhts_engine_APIにも対応している。hts_engine_APIはOpen_Jtalkでも使われているので、この部分を取っ掛かりに何かできないだろうか。・OrcaシステムはPythonで書かれている。いうことは、先日書いたmbttsとは親和性が高そうだ。OrcaのSpeechシステムとして組み込む方法も何かあるかもしれない。組み込むための要件が足りなければ改造すればいいだけの話。どちらにしても、今回触れなかった漢字入力の音声読み上げも大きな課題として残るでしょう。日本語による音声読み上げができなければ、何も変わりません。これを実現して大きく環境を変えましょう。日本語をしゃべらせてみる。文章書いていませんでした。文章だけでなく、プログラミングもやる気が全然起きなくて。久しぶりにやってみると意外に進展したので報告します。「Orcaに日本語をしゃべらせたい」で書いたことの続きです。デスクトップで動作するスクリーンリーダーです。残念なことに、日本語ではしゃべってくれません。設定をいじってみて調べてみたのが、「Orcaに日本語をしゃべらせたい」の記事です。いろいろな可能性は見えましたが、結局、その時点ではうまくはいきませんでした。久しぶりに、Orcaについて調べてみました。ソースをじっくり眺めてみたり。system)を登録できそうに思えたのでやってみました。したら、意外に簡単に動いてくれました。やったことはとても単純です。いうファイルが、音声システムを仲介するスクリプトのようなので、これを参考に作りました。よる記述で置き換えていきました。このブログで何度か体験してきたブレイクスルーは、どれもこんな感じでした。今回もやはりそうでした。完全ではありませんが、とりあえず動くようになりました。