RPGツクールの住人を合成音声で喋らせてみた
RPGツクールXP + AquesTalk で、RPGツクールの登場人物にしゃべらせてみる。
・・・というようなものをやってみてPostしてみる予定。
つくったどーー!
簡単にできると思ったが、思わぬところで苦戦。
準備。
Kakasiを用意する
{RPGツクールXPのプロジェクト(以下、Project1)}ディレクトリに、{lib,dict}というディレクトリを作ります。
Project1\lib\kakasi.dll
Project1\dict\kanwadict
Project1\dict\itaijidict
という感じになるように、Kakasiという日本語解析器をおきましょう。
取得先:http://kakasi.namazu.org/index.html.ja
>Win32用 バイナリパッケージという所から、zip形式のファイルを拾ってきて展開してください。
AquesTalkを用意する
同じく、libディレクトリに合成音声エンジンをおきましょう。
Project1\lib\AquesTalkDa.dll*5
取得先:http://www.a-quest.com/aquestalk/index_win.html
>AquesTalk Win版という所から、同じくzip形式のファイルを拾ってきて展開してください。
rbuconvを用意する
次は、文字コード変換ライブラリを拾ってきましょう。
Project1\lib\rbuconv.rb
という感じで配置します。
取得先:http://www.yoshidam.net/Ruby_ja.html#rbuconv
> version 0.1.2 ダウンロードという所に、tar.gz形式で固められています。
さぁ、これで前置きは整いました。
いよいよお待ちかねのコードです。
次のコードを、RPGツクールXPのスクリプトエディタで最上位のスクリプトとして挿入してください。
スクリプト名は「Text_to_Speech」とかにしておいたらいいんじゃないでしょうか。
$LOAD_PATH.unshift('./lib/') # Set AquesTalkModules require 'rbuconv' $aques = Win32API.new('./lib/AquesTalkDa.dll', 'AquesTalkDa_PlaySync', 'pi', 'i') def aques(str) $aques.call(Uconv.u8tosjis(str), 100) end # Set KakasiModules system('set KANWADICTPATH=..\dict\kanwadict') system('set ITAIJIDICTPATH=..\dict\itaijidict') $kakasi_init = Win32API.new('./lib/kakasi.dll', 'kakasi_getopt_argv', 'ip', 'i') $kakasi_do = Win32API.new('./lib/kakasi.dll', 'kakasi_do', 'p', 'p') $kakasi_close = Win32API.new('./lib/kakasi.dll', 'kakasi_close_kanwadict', 'v', 'i') $kakasi_free = Win32API.new('./lib/kakasi.dll', 'kakasi_free', 'cp', 'i') def kanji_to_hiragana(str) params = ["kakasi", "-JH", "-isjis", "-osjis"] result = $kakasi_init.call(4, params.pack("p4")) exit! if result == 1 result = $kakasi_do.call(Uconv.u8tosjis(str)) exit! if $kakasi_close.call() == 1 return Uconv.sjistou8(result) end # Set Text to Speech def text_to_speech(str) str = kanji_to_hiragana(str) aques(str) end
これで、RPGツクール上のイベントエディタからスクリプト命令で『text_to_speech("獲ったどー!!")』というイベントを書けば、RPGツクール上のイベントがイカした合成ボイスで喋ってくれます。