Open JTalkの音響モデルを作ってもらったので自分と会話ができちゃうのだ
SHABERUという、Windowsアプリがある。アキヒロさんという方が開発されているTTS(Text to Speech)ソフトで、名古屋工業大学が開発しているHMM(隠れマルコフモデル)という方式を用いたOpen JTalkというソフトウェアをWindowsに移植して使いやすくしたものだ。
このアキヒロさんのすごいところは、このソフトで利用することができる声(音響モデルと呼ばれる)を、利用者のリクエストに応えて作ってくれているということだ。
Open JTalkにも音響モデルは含まれているが、それは男女2人分。ところが、アキヒロさんは、24もの音響モデルを、その中の人からの依頼で無料で作成してくれているのだ。
で、ぼくもその25番目の音響モデル仲間に加えていただいたのだ。とてもうれしく、ありがたい。
音響モデルを作るのは実に大変で、Linuxの環境が必要だったり、プログラミングのことをかなり知っていないと容易に挫折してしまう。ぼくもメモだけまとめて、その先には進めそうになかった。
だが、アキヒロさんにお願いしてみたところ、受けていただけて、信じられないくらいの短期間で公開までこぎつけることができた。
こちらからダウンロードできる。松尾Pというキャラクターネームにしてある。画像があったほうがいいというので、妻が学生のときに交換日記に描いてくれた、ちょっと陸奥A子風の絵を使った。
SHABERUは、複数の音響モデルをバランスを決めて合成したりという、すごい機能を持っているのだが、SHABERU_Lightというもっとシンプルなバージョンもある。
これを使って、自分と偽自分との戦い、いや、対話ができるのである。影との戦い、いや、話し合いである。
ぼくはHMMを使ったSinsyという歌声合成用に、声を提供しているので、同じHMMで歌声と話し声を両方得たことになる。
わーい。
歌声は英語で、話し声は日本語なんだけど。
歌声になったことの経緯はこの記事に書いてある。
Sinsy.jpというサイトに行って、MusicXMLという形式で楽譜をアップロードすれば、ぼくの歌声がいつでも唄ってくれるのだ。言語を英語にして、男声を選ぶと、ボーカルで表示される、m003e_betaというのがぼくの名前なんだ、アンヌ。
Sinsyのときには、十数曲を唄って、そのデータを名古屋工業大学に送ったのだが、SHABERUの音響モデル用には、たくさん文章をしゃべる。
Open JTalk用には、普通はATR503音素バランス文というのを使う。これは文字通り、短い文章が503個あるものだ。
SHABERUでも当然そうかと思ってみたが、実際にはその半分以下でよかった。
音源提供者の負担が少ないように、アキヒロさんが独自に絞り込んだり、追加したりしているようだ。どんな内容かは、「音響モデル作成用利用規約」に必要な文字列がすべて入っているので、見ておくといいだろう。
なんか、アナウンサーの練習のような文章だった。
48kHz、16ビットのwavで録音する必要があり、それなりに時間がとられるので、3–4時間は時間があいているときにやっておくといいのだろうと思った。
さて、次は応用編である。
ぼくのメインマシンはメインはMacなので、Macでも使いたい。でも。SHABERUはWindowsだけ。Boot Campと、Windowsタブレットにはインストールしたのだが、まずはCrossOver Macでためした。でもうまくいかない。そこで、Macのターミナルから使う方法にトライしてみた。
実は、Open JTalkをMacにインストールする方法はいくつかのブログで見つけていたのだが、そのどことどこをピックアップしたかを、ここにメモしておこう。
rubyを使ったパッケージマネジャー、HomeBrewを使ったインストーラがあったので、それを利用。
上記のサイトにそのやり方が書かれているのだが、その前にHomeBrewも当然インストールしておく。
このサイトに書かれているものからバージョンが進んでいるので、コマンドラインはそこを修正しつつ試してみる。まあ、うまくいった。
次は、これに松尾Pの音響モデルを追加すること。
音響モデルは、
/usr/local/Cellar/open-jtalk/1.09/voice
というフォルダに置かれているので、ターミナルで、
cp と打った後に、松尾P.htsvoiceのファイルをドロップして、最後にmatsuop.htsvoiceとかつける。これで、voiceフォルダに松尾P音響モデルがコピーされた。
これで、適切なコマンドラインを打てば、サンプルテキストの文字列がぼくの声に変換されて、wavファイルに落とされるのだ。
でも、それはインタラクティブじゃないし、面倒。
ちょっと前のLinux向けシェルスクリプトがあったので、それを改変。
タイプした文字列を取得し、テンポラリのwavファイルに出力させ、それをMacのコマンドafplayで再生する。
#!/bin/bash
TMP=~/open-talk.wav
touch $TMP
open_jtalk -x /usr/local/Cellar/open-jtalk/1.09/dic -m /usr/local/Cellar/open-jtalk/1.09/voice/matsuop.htsvoice -ow $TMP && afplay $TMP
こんなのである。viとか十何年ぶりかで使ったぜ。とりあえず動いたからいいか。chmod a+xしたりとかも思い出したぜ。
そうそう、凹みTipsさんが、Open JTalkをNode.jsで動かすモジュールを作られている。これは既に使っているアプリとかありそう。そういうところに自分の声が使われたりしたら面白いなあ。
まだまだ、野望としては、これを使ってポッドキャストをやったり、自分で音響モデルを作れる環境を作ったり、最終的には妻の話し声を作るところまでもっていきたい。そして、ぼくが死んだ後でも2人がおしゃべりし続けるようであってほしいなあ。