Ubuntu上で、MMDAgentにTwitterのTLを読み上げさせる方法
既に気付いている方もおられると思いますが、Launchpad 上の PPA に MMDAgent の deb パッケージを突っ込んであるので、使い方を書いておきます。公式の Linux 版の MMDAgent では Windows 版にある機能のいくつかが未実装となっていますが、この PPA のパッケージでは全機能を独自に実装してあり、Windows 版と同様に使えるようにしてあります。ただし、Windows 版とのバイナリ互換性はありませんので、Windows 用に配布されているプラグインをそのまま使うことは出来ません。また、公式版にはないいくつかの機能を追加してあります(それらについてはまた後日、気が向いたら書きます)。
[使用モデル:DIVAっぽいど(ままま氏)、こっちむいてBabyステージ(39歳P氏)]
今回は、MMDAgent のインストール方法と、Emacs で twittering-mode を使っている人のための TL の読み上げの設定方法を紹介します。
MMDAgentとサンプルスクリプトのインストール
端末を起動し、以下のコマンドでPPAからMMDAgentをインストールします。パッケージはわりと巨大(ダウンロードするサイズが70MBくらい)なので覚悟してください。
sudo add-apt-repository ppa:irie/mmdagent sudo apt-get update sudo apt-get install mmdagent
次に、MMDAgentのホームページ(http://www.mmdagent.jp/)からサンプルスクリプト(MMDAgent "Sample Script" version 1.1)をダウンロードしてインストールします。ダウンロードしたファイル(MMDAgent_Example-1.1.zip)が ~/Download に保存されたとします。
PPA のパッケージには独自の改造がしてあり、~/MMDAgent/MMDAgent.mdf という設定ファイルがあると起動時に自動的に読み込むようにしてあるので、以下のように、ファイルを展開した後リネームします。
cd unzip ~/Download/MMDAgent_Example-1.1.zip mv MMDAgent_Example-1.1 MMDAgent cd MMDAgent ls MMDAgent_Example* | while read i; do mv $i MMDAgent${i#MMDAgent_Example}; done
設定ファイルとスクリプトの修正
PPA のパッケージは開発版のソースコードからビルドしてあります。開発版では設定ファイルとスクリプトの仕様が Version 1.2 から少し変更されていますので、サンプルスクリプトを修正しないと正常に動作しません。
設定ファイル(.mdf)
.mdf ファイルでは pmd ファイル読み込み時のコメントの表示時間を指定するオプション名が、display_comment_frame から display_comment_time に変更されていますので、テキストエディタで MMDAgent.mdf を開いて「display_comment_frame=0.0」という行を見つけて「display_comment_time=0.0」に修正します。以下は修正前後のファイル差分をとったものです。
diff -u MMDAgent.orig.mdf MMDAgent.mdf --- MMDAgent.orig.mdf 2011-08-03 09:11:26.000000000 +0900 +++ MMDAgent.mdf 2012-06-22 18:42:35.682149452 +0900 @@ -114,7 +114,7 @@ # Comment -display_comment_frame=0.0 +display_comment_time=0.0 # Model
スクリプトファイル(.fst)
.fst ファイルでは MODEL_ADD コマンドの第5引数が、親モデルの指定からトゥーンレンダリングの ON/OFF 指定に変更されたので、MODEL_ADD コマンドで第5引数が指定されている行(3箇所)を見つけて、それぞれ「|OFF」(または「|ON」)を挿入します。以下の差分を参考にして下さい。
diff -u MMDAgent.orig.fst MMDAgent.fst | nkf --- MMDAgent.orig.fst 2011-08-03 09:11:26.000000000 +0900 +++ MMDAgent.fst 2012-06-22 18:38:36.466150048 +0900 @@ -138,7 +138,7 @@ 0 11 <eps> MODEL_ADD|bootscreen|Accessory\bootscreen\bootscreen.pmd|0.0,12.85,17.6 11 12 MODEL_EVENT_ADD|bootscreen MODEL_ADD|mei|Model\mei\mei.pmd|0.0,0.0,-14.0 -12 13 <eps> MODEL_ADD|menu|Accessory\menu\menu.pmd|0.0,-4.5,0.0|0.0,0.0,0.0|mei +12 13 <eps> MODEL_ADD|menu|Accessory\menu\menu.pmd|0.0,-4.5,0.0|0.0,0.0,0.0|OFF|mei 13 14 <eps> MOTION_ADD|menu|rotate|Motion\menu_rotation\menu_rotation.vmd|FULL|LOOP|OFF 14 15 <eps> STAGE|Stage\building2\floor.bmp,Stage\building2\background.bmp 15 16 <eps> MOTION_ADD|mei|base|Motion\mei_wait\mei_wait.vmd|FULL|LOOP @@ -197,7 +197,7 @@ # 0071-0090 Guide 1 71 RECOG_EVENT_STOP|図書館 MODEL_DELETE|menu -71 72 <eps> MODEL_ADD|panel|Accessory\map\map_library.pmd|0.0,2.8,2.5|0.0,0.0,0.0|mei +71 72 <eps> MODEL_ADD|panel|Accessory\map\map_library.pmd|0.0,2.8,2.5|0.0,0.0,0.0|OFF|mei 72 73 <eps> MOTION_ADD|mei|action|Motion\mei_panel\mei_panel_on.vmd|PART|ONCE 73 74 <eps> MOTION_CHANGE|mei|base|Motion\mei_guide\mei_guide_normal.vmd 74 75 <eps> SYNTH_START|mei|mei_voice_normal|図書館は、正面から見ると、右前の方向にあります。 @@ -207,7 +207,7 @@ 78 79 SYNTH_EVENT_STOP|mei MOTION_CHANGE|mei|base|Motion\mei_guide\mei_guide_happy.vmd 79 80 <eps> SYNTH_START|mei|mei_voice_normal|お解りになりますか? 80 81 SYNTH_EVENT_STOP|mei MODEL_DELETE|panel -81 82 <eps> MODEL_ADD|menu|Accessory\menu\menu.pmd|0.0,-4.5,0.0|0.0,0.0,0.0|mei +81 82 <eps> MODEL_ADD|menu|Accessory\menu\menu.pmd|0.0,-4.5,0.0|0.0,0.0,0.0|OFF|mei 82 83 <eps> MOTION_CHANGE|mei|base|Motion\mei_wait\mei_wait.vmd 83 2 <eps> MOTION_ADD|menu|rotate|Motion\menu_rotation\menu_rotation.vmd|FULL|LOOP|OFF
これで MMDAgent 本体の設定は完了です。コマンドラインから
MMDAgent
で起動すると、メイさんが現れるはずです。
マイクの設定が正しくされていれは、話しかけると答えてくれます。起動時に表示される音声入力のメーターはキーボードで Shift+J を押すと消せます。
コンソールにはデバッグのためログが出力されるように改造してあります。ログを見る必要がなければ、Unity の Dash から「mmdagent」と入力するか、ランチャーに登録しておいて起動します。また、D キーを押すとウインドウ内でログを見ることもできます。
SubProcessプラグインとサンプルスクリプトのインストール
SubProcess プラグインは自作のプラグインで、子プロセスを起動・停止するコマンド、SUBPROC_START および SUBPROC_STOP を追加します*1。以下のようにインストールします。
sudo apt-get install mmdagent mmdagent-plugin-subprocess
/usr/share/doc/mmdagent-plugin-subprocess/examples にサンプルスクリプトの圧縮されたファイルがあるので、これらを先ほど公式サンプルをインストールしたディレクトリ(~/MMDAgent)にインストールします。
cd /usr/share/doc/mmdagent-plugin-subprocess/examples zcat MMDAgent_Example.fst.SubProcess.fst.gz > ~/MMDAgent/MMDAgent.fst.SubProcess.fst zcat mmdagent_dbus_service.py.gz > ~/MMDAgent/mmdagent_dbus_service.py zcat mmdagent_time_signal.py.gz > ~/MMDAgent/mmdagent_time_signal.py
MMDAgent.fst.SubProcess.fst というファイルはサブのスクリプトです*2。後の2つの Python スクリプトはファイルはサブのスクリプト内で SUBPROC_START コマンドにより起動する子プロセスのプログラムのです。mmdagent_dbus_service.py は D-Bus によるプロセス間通信のサーバ、mmdagent_time_signal.py は時報の読み上げを開始する TIMESIGNAL_START コマンドを提供します。
時報の読み上げ時に音声ファイルを再生したい場合は ~/MMDAgent にそのファイルを保存し、MMDAgent.fst.SubProcess.fst 内の TIMESIGNAL_START コマンドの行を見つけて第4引数(デフォルトでは「chime.ogg」となっている部分)を音声ファイルのファイル名に修正します。
一旦 MMDAgent を終了して起動し直すと、SubProcess プラグインが読み込まれて子プロセスが起動します。
Emacs側の設定
SubProcess プラグインで起動した D-Bus サービスを利用して、Emacs から MMDAgent にコマンドを投げたりイベントを受け取ったりするためのプログラム mmdagent-dbus-client.el、さらにそれを利用して MMDAgent に twittering-mode の TL を読み上げをさせるプログラム twittering-mmdagent.el をインストールします。~/.emacs.d に Emacs のロードパスが通っているとします。
cd /usr/share/doc/mmdagent-plugin-subprocess/examples zcat mmdagent-dbus-client.el.gz > ~/.emacs.d/mmdagent-dbus-client.el zcat twittering-mmdagent.el.gz > ~/.emacs.d/twittering-mmdagent.el
試しに Emacs 上で次のコードを実行してみて下さい。
(require 'mmdagent-dbus-client) (mmdagent-exec-command "SYNTH_START" "mei" "mei_voice_normal" "こんにちは")
正しく設定されていれば、メイさんが「こんにちは」と言ってくれるはずです。
twittering-mode の TL の読み上げを開始するには、上のコードの代わりに以下のコードを実行します。Emacs 起動時に開始するには ~/.emacs ファイルの twittering-mode の設定の後に書いておいて、MMDAgent、Emacs の順に起動します(twittering-mode の設定方法にはここでは触れません)。
(require 'twittering-mmdagent)
これで、TL が更新されるたびに読み上げてくれます。
しばらく読み上げさせていると、いつの間にか読み上げが止まってしまうことがあります。これは特殊な文字を含むツイートがあるとエラーとなって MMDAgent から読み上げ終了を知らせるイベントが来ず、Emacs 側のキューにたまった次のツイート読み上げが開始できないためだと思われます。この場合は、Emacs 上で
M-x twittering-mmdagent-setup
として強制的に読み上げを再開します*3。