修正して使えるようにしてみました。無料でダウンロードして使えるのですが、再配布は不可です。http://www.tokuteicorpus.jp/dist/Unidicは、国立国語研究所で規定した「短単位」という揺れがない斉一な単位で設計されているという特徴を持ちますが、今回興味を持ったのはアクセントや音変化の情報が付加されていることです。この情報はGalateaTalkでも利用されているようです。いうことを知ると、前回作った棒読みスクリプトでもこれが利用できないかと思い、勢いでやってみました。ダウンロード:mmtts092.zipこれ単体では動きませんので、前回の記事に書いてあるように、必要なファイルをダウンロードして、手順通りインストールしてください。内部的には大幅に書き換えていますが、使用する分にはほとんど変わりなく使えると思います。コマンドラインスイッチを増やしたので、--helpで確認してみてください。以前は'-'のみで標準入力指定をしていましたが、それができなくなったので、'-i'スイッチで指定するように変えました。変更点はそのくらいです。使う方法ですが、やはりMeCab用のUnidicを持ってこないといけません。次のページに行きます。UniDicそして、ダウンロードページに進みます。未登録の方」リンクを選んで、アカウントを作ってから先に進みます。ダウンロードページのルートから、「1.3.12個別ファイル」、「unidic-mecab」の順にリンクを選んでいくと、文字コード別のファイルが置いてあるので、今回必要なsjis用の「unidic-mecab1312_sjis.zip」をクリックしてダウンロードします。1.3.12は現時点での最新版のバージョンです。dicフォルダにコピーします。Files\MeCab\dic"になります。フォルダがあるはずです。UnidicのダウンロードページにはWindows用パッケージ(フルセット)版も配布されていて、こちらだとChaSen用、MeCab用と必要なファイル全てを簡単にインストールできるのですが、残念なことに文字コードがUTF-8にエンコードされています。今回使用するシフトJISではないので、これでは使えません。現時点ではこのパッケージはWindows7に対応していません。あればそれを優先して、そのアクセント情報を使うようにしています。抑揚のある日本語を発音してくれます。現在、単語のアクセントとそれに続く助詞のアクセント、そして「?」の直前の語尾上げしか設定していませんので、不完全なアクセントの日本語になってしまっています。Unidicには複合語になったときのアクセントなどの情報もあるようですが、今回は面倒だったのでは使いませんでした。このスクリプトの日本語はまだまだ改善していけると思います。音素データのパラメータを今回新たに見直したので、棒読みをさせた場合においても以前のバージョンと印象の違う発声になっていると思います。|2010年03月08日そして、Ubuntuに対応してみた。Windows上でしか動かなかったのですが、LinuxのUbuntuでも動くようにしてみました。自己責任でご利用ください。Linux向けのものだったわけですし、mbrolaはLinuxで使うほうがWindowsよりも使いやすくできていて、意外に簡単にできました。まともに使えれば非同期再生などといったさらに高度な使い方もできるのですが、mbrolaのソフトのメンテナンスが止まっていて、ちょっと残念です。今回、文字コード関連の修正も加えました。今までこのスクリプトで使う場合、MeCab辞書の文字コードはシフトJIS固定でしたけれど、スクリプトを一箇所修正することでMeCabの文字コードを任意で選べるようにしました。WindowsのMeCabパッケージはインストール時に辞書の文字コードを選ぶようになっています。このとき文字コードとして、シフトJIS、UTF-8、EUC-JP、UTF-16が選べますが、この中のシフトJIS、UTF-8、EUC-JPを選んでも、このmmttsスクリプトでMeCab辞書を使えるようにしました。代入文でその文字コードを示す文字列を代入します。Ubuntuの場合は、44行あたりです。設定できるようにしてますので、必要に応じて書き換えます。Ubuntuで使うための準備です。Windowsと同じようにいろいろなパッケージを用意しなくてはいけません。パッケージをインストールします。このときインストールされるMeCab辞書はeuc-jp文字コードのものです。UTF-8版辞書が欲しいときはそのパッケージも探してインストールしておきます。インストールしておきます。ファイルをMeCabサイトからダウンロードします。installと打ち込みます。MeCabが使えるようになります。MBROLAサイトに行って、日本語の音素データベースJP2をダウンロードします。展開し、中に入っているJP2ファイルをmmtts.pyと同じフォルダに置きます。使えるようになります。mmtts.pyではこのパスを記入しています。スクリプトは正しく動きません。サイトに行き、ログインします。アカウントがなければ作ります。同じ文字コードのほうをインストールします。両方入れてもかまいませんが、euc-jp版のフォルダはunidic、utf8版のフォルダはunidic-utf8という名前にします。/var/lib/mecab/dic/unidic-utf8で、MeCabの辞書フォルダにコピーします。MeCabの辞書フォルダが上記と違う場合は、適宜書き換えます。バージョンが進んでいる場合も適宜書き換えます。Linux用のUnidicパッケージも置いてあるので、それをインストールした場合は、mmtts.py内の辞書のパスの記述を書き換える必要があります。MeCab用Unidicにはソース版も置いてありますが、文字コードをeuc-jpに指定してビルドしようとするとiconv変換エラーが大量に出ました。対処の仕方が分からなかったので、mmtts.pyを書き換えないで済む上記の変換済みの個別ファイルの方が無難だと思います。mmtts.txtなんて打ち込んで、動作を確認します。日ごろ僕が使っているUbuntuだけに対応しましたが、MeCab辞書のインストール先とそのシステムの入出力用の文字コードを設定すれば、他のOSでも使えるのではないかと思います。問題あると思いますし、機能不足ですが、これでlinuxで日本語をしゃべらせる選択肢が増えたと思います。toolsというパッケージが公開されています。Toolsこのパッケージを実行すると、いくつものファイルがインストールされます。ツールやドキュメント、インターフェイスソースコード、そしてサンプルコードが入ります。2つのDLLがコピーされます。WindowsでのMBROLAのプログラミングをする場合は、英語で書かれたドキュメントをよく読み、サンプルコードを参考にしながらDLLを操作するプログラムを書くことになります。wavファイルを生成するプログラムでした。作るにあたってはいろいろ紆余曲折があります。いった便利な関数が定義されています。一般的なTTSを使ったプログラムを書いたことがある人ならば、この関数名を見ただけでわかるでしょう。関数には、非同期再生やコールバック関数の登録機能もあります。これらの機能を使えば簡単に音声合成アプリを作ることができるはずです。本当はこちらのDLLを使うためにpydファイルを作ろうとしました。使えるようにはなりませんでした。VC++2008でコンパイルして実行するとレジストリエラーが出てしまいます。なんとかうまくコンパイルでき、単体で動かすことができるのですが、それをPythonから呼び出す段になると、やっぱりレジストリエラーが出てしまいます。使うプログラムを書くことにしました。こちらを使ったプログラムだとなんとかPythonと組み合わせても動きます。長文を読ませると、音声にノイズが出てきて、意味不明の音素の組み合わせを読み込んで、エラーで停止してしまいます。pho2wav.pydの内部では文章を短く区切って対処していました。やって音素のスクリプトから安定して音声ファイルを作れるようになりました。ところが、FreeTTSでMBROLAを使う資料を読んでいると、次のやり取りを見つけました。http://sourceforge.net/projects/freetts/forums/forum/137669/topic/1219083なーんだ。DOS版が使えたのか。linuxのコマンドラインスイッチと同じものが使える。組み込むのは廃止です。pydファイルの作り方を覚えたので全てが無駄ではありませんでしたが、このpydを作るための悪戦苦闘は何だったのだろう。PC/DOSリンクでダウンロードします。mmtts.pyと同じ場所に置くか、パスの通った場所におけば使えます。Voxでも日本語がしゃべれるようにすることに時間を割きたいと思っています。mbtts前回でやめるつもりでいたんですが、MBROLA関連の続きです。使える音声合成処理のPythonパッケージです。これ単体では動きませんが、無料で配布されているファイルを持ってくると、日本語の文字列を音声に変換してくれます。興味のある方は、無保証ですが使ってみてください。jp1,jp3の音声も使えるようにしました。プログラムが長くなりすぎたため、ファイルを分割せざるを得なくなってしまったのですが、それを扱いやすくするために、パッケージにしてみました。Pythonにインストールします。非同期発声はどうしても実現したくて、でも、自分で作るのは面倒だったので、既存のpygameパッケージを使ってできるようにしてみました。MeCabバインディングのパッケージを別に作るのもあれなので、バインディング用のスクリプトも取り込みました。それから、最初に書きましたが、LinuxでできるのならばOSXでもできるだろうということで、MacOSX対応にしました。pygameに依存したおかげで、それさえ入れられれば、あとは簡単に実現しました。いうファイルに全部書いていますので、それを読んでみてください。必要な外部ファイルがいろいろありますが、そのこともmbtts.txtに書いてあります。tts.speak(u'あらゆる現実を、全て自分の方へ捻じ曲げたのだ。')てな感じになります。残念ながら、Unidicを使った日本語のアクセントやイントネーションの処理に関しては、間違いを修正したくらいでほとんど進歩はありません。AquesTalkを組み込んだり、OpenJtalkを組み込んだりすることは、割と簡単にできるのではないかと思います。いうのは音声読み上げ対応ソフトで有名なmiyamiyaさんの一連のシリーズと語呂が同じになってしまうので、止めにします。|2010年03月27日ネット上の情報を音声で保存するサンプルそういうわけで、それなりのパッケージが出来上がりました。改良の余地はあります。アルファベットの羅列でローマ字読みができるものは、仮名に変換して読ませたほうがいいことに今更気付いたりしています(次回更新時に実装します)。このパッケージの問題として、py2exeで実行ファイルが作れないということがあります。これはかなり大きな問題だと思います。利用するときスクリプトの実行できる環境を自力で構築しなければならないという高いハードルが付きまといます。なんとか実行ファイルが作れたとしてもpygameを使っているのでMixer以外の使いもしない様々なファイルが組み込まれてしまいます。これは、非同期再生をもっと軽い方法で解決すればいいのですが。下のプログラムは、ホームページ上の情報を音声ファイルに変換するサンプルです。pyファイルとして保存し使います。アサヒ・コムの天声人語を早口で録音します。視覚障害者の方は新聞の記事を手軽に読みたいという要望をよく聞くので、ためしに作ってみました。XMLできちんと整理されている情報だともっと簡単なのでしょうが、HTMLの特定部分を探し出し抽出しています。このスクリプトによって生成される音声ファイルはアサヒ・コムの著作物の複製に当たると思われますので、私的使用のみに限って利用してください。os.path.exists(name+u'.wav'):tts.speak(name+u'のファイルは既に存在するので作成は行いません。')else:lines.append(d)r=re.compile(u'<p>\n(.*?)\n</p>')d=r.search(txt).group(1)d=re.sub(u'▼',u'。\n',d,0)lines.append(d)tts.speak_lines_to_file(lines,name+u'.wav')tts.speak(name+u'のファイルができました。')こんな感じでいろいろ使えます。今回のパッケージを使いこなすにはPythonでプログラミングができないといけませんが、とても使いやすい言語なのでおすすめです。動くように作った自分で言うのもなんですが、これがWindows7でも、MacOSXでも、Ubuntuでも動くというのは、やっぱり面白いですね。Python,pygame,SDL,MBROLA,MeCab、そしてmuDaTTS.rbの開発者の方々に感謝します。(06/28)OpenJTalkの共有ライブラリを作ってみました。追加しました(03/14)点字タイプ入力ソフトに、テンキー点字入力機能を追加しました(11/13)OpenJTalkの共有ライブラリを作ってみました。2.0QRコードSeesaaブログ。