ミク語変換(初音ミク用歌詞データ生成)Rubyスクリプト
年末年始は初音ミク三昧。
いろいろ触ってて思ったのは、歌詞のテキスト起こしがけっこう面倒くさいということ。だいたい以下のようなことをする必要があります。
- 漢字はすべてカナにする
- 助詞の「は」は発音どおり「わ」にする(例:あれは何→あれわなに)
- 他にも表記と発音が違うものは発音どおりにする(例:どうすりゃいいの→どおすりゃいいの)
- 促音の「っ」は直前の母音にした方がうまくいく(例:ちょっとでいいのだ→ちょおとでいいのだ)
そんなわけでそういった変換を自動でやってくれるプログラムを作ってみました。一番大変な上記1〜3はMeCabを入れれば全部やってくれるので、実は促音の処理を書くだけです。このへんを参考にしました。
ためしにid:navさんの自動作詞で生成した歌詞を変換すると以下のようになります。
実行
ruby mikugo.rb < kanji.txt > kana.txt
入力
ベッドのまぶた
ひろがる 秘密 アレルギーが鏡
君の胸は照れ隠しの 投げすてたね
光る自分 ゴーストの 落書きと 会話
こぼれる蜃気楼は 影が思う
野性的なエクスタシーの 終わりと やなあした
星くずの 自由と地図
スタイルのぬれて ベッドのまぶた
ひろがる 秘密 アレルギーが鏡
君の胸は照れ隠しの 投げすてたね
出力
べえどのまぶた
ひろがるひみつあれるぎいがかがみ
きみのむねわてれかくしのなげすてたね
ひかるじぶんごおすとのらくがきとかいわ
こぼれるしんきろおわかげがおもう
やせいてきなえくすたしいのおわりとやなあした
ほしくずのじゆうとちず
すたいるのぬれてべえどのまぶた
ひろがるひみつあれるぎいがかがみ
きみのむねわてれかくしのなげすてたね
#!/usr/bin/ruby $KCODE='UTF8' require 'jcode' require 'MeCab' class Mikugo def initialize @mecab = MeCab::Tagger.new('-F%pS%f[8] -U%M -E\n') end def generate(s) ss = @mecab.parse(s) # 漢字->カタカナ変換 ss.tr!('ア-ン','あ-ん') # カタカナ->ひらがな変換 ss.gsub!(/[ ]/,'') # 空白文字の削除 ss.gsub!('を','お') # 'を'->'お'変換 ss = conv_sokuon_chouon(ss) # 促音、長音の処理 return ss end def conv_sokuon_chouon(s) a = s.split(/[っー]/) a.length.times {|i| if (i > 0) # 促音、長音の場合は1文字前の母音に変換 pre_char = a[i-1][/.$/] a[i] = get_vowel(pre_char) + a[i] end } return a.join end # 母音変換 def get_vowel(c) if "あかさたなはまやらわがざだばぱゃ".include?(c) return "あ" end if "いきしちにひみりぎじぢびぴ".include?(c) return "い" end if "うくすつぬふむゆるぐずづぶぷゅ".include?(c) return "う" end if "えけせてねへめれげぜでべぺ".include?(c) return "え" end if "おこそとのほもよろをごぞどぼぽょ".include?(c) return "お" end return "?" end end #--------------------------- miku = Mikugo.new() while( s = gets ) puts miku.generate(s) end