ポケットミクでテキスト読み上げ
ポケットミクでテキスト読み上げ
学研から発売された「歌うキーボード ポケットミク」を動かしてみました。
カーボンキーボードで演奏すると、初音ミクが「どーれーみー」という感じで歌ってくれます。また、MIDIデバイスとして利用でき、例えばNetBSDでは以下のdmesgが得られます(NetBSD-6.1-i386の場合です)。
Apr 29 07:12:32 hayase /netbsd: uaudio0 at uhub3 port 3 configuration 1 interface 0
Apr 29 07:12:32 hayase /netbsd: uaudio0: NSX-39 NSX-39, rev 2.00/1.00, addr 2
Apr 29 07:12:32 hayase /netbsd: uaudio0: audio descriptors make no sense, error=4
Apr 29 07:12:32 hayase /netbsd: umidi0 at uhub3 port 3 configuration 1 interface 1
Apr 29 07:12:32 hayase /netbsd: umidi0: NSX-39 NSX-39, rev 2.00/1.00, addr 2
Apr 29 07:12:32 hayase /netbsd: umidi0: (genuine USB-MIDI)
Apr 29 07:12:32 hayase /netbsd: umidi0: out=1, in=1
Apr 29 07:12:32 hayase /netbsd: midi1 at umidi0: <0 >0 on umidi0
すばらしいことに、GitHub上にはRuby,Python等のスクリプトからポケットミクを操作するためのライブラリが有志によって公開されており、Rubyからポケットミクを操作できるpoket_mikuがあります。
pocket_mikuのインストール
私の環境では、以下の手順でpocket_mikuをインストールしました。
- Gemfileを作成する
以下の内容でGemfileを作成します。
source :rubygems gem 'pocket_miku', :git => "git://github.com/toshia/pocket_miku.git"
- gemでインストールする
$ sudo gem193 install pocket_miku
- 簡単なサンプルを試す
以下のサンプルを実行すると、初音ミクが「ふぁー ぼー」としゃべります。
#!/usr/bin/env ruby193 # -*- coding: utf-8 -*- require 'pocket_miku' PocketMiku.sing '/dev/rmidi1' do tempo 240 ふぁ 75; ぼ 82; end
ポケットミクでテキストを読み上げてみる
さて、無事にスクリプトから初音ミクにおしゃべりさせることができたワケですが、もう一歩進めて、今度はテキストを読み上げさせてみます。
以下のように、初音ミクにしゃべらせたい音をスクリプトから指定するだけでOKなのですが、「日本語」→「にほんご」のように、平仮名に直して指定する必要があります。
ふぁ 75; ぼ 82;
ここはサクっとChasenを使ってテキストを平仮名に直すという方法を試してみました。
Chasenによる形態素解析では、以下のような出力が得られます。読みの第一候補(第二カラム)を使うとうまく行きそうです。 (実はこのカラムの名称を知らず、Chasenマニュアルを読む羽目に...)
$ chasen
今日は良い天気です
今日 キョウ 今日 名詞-副詞可能
は ハ は 助詞-係助詞
良い ヨイ 良い 形容詞-自立 形容詞・アウオ段 基本形
天気 テンキ 天気 名詞-一般
です デス です 助動詞 特殊・デス 基本形
EOS
スクリプトは以下においてあります。
以下の手順でスクリプトを実行します(現状「!」とかの記号が入ったテキストだとエラーがでます...)。
$ echo 今日は良い天気です | chasen > data.txt
$ ./miksay.rb data.txt
テキストを読み上げたものの...
ポケットミクによるテキスト読み上げまで行えたのですが、いざ発声を聞いてみると、あまりよく聞き取れません。 しばらく聞いていて気がついたのですが、発声の「間」を調節しないと聞き取りにくいようです。
「キョウハ ヨイ テンキデス」という発声だと良いのですが、「キョウハヨイテンキデス」と一気に読み上げると、思っている以上に単語の区切りが分かりにくいです。日々会話する時にはほとんど意識しないのですが、この「間」は重要なのですね。
まとめ
スクリプトからポケットミクをしゃべらせてみました。形態素解析ツールを活用することでうまいこと仮名の切り出しが行えました。テキスト読み上げについては、発声の「間」などの考慮が必要そうで、まだまだ改良の余地ありです。
追記
肝心なことを忘れていました。5月6日に「ポケットミクちゃんに何かいろいろさせる会(その1)」という会を開催する予定です。ご興味のある方はぜひご参加ください。