Hatena::ブログ(Diary)

aikeの日記 RSSフィード

2008-01-05 ミク語変換(初音ミク用歌詞データ生成)Rubyスクリプト

年末年始は初音ミク三昧。


いろいろ触ってて思ったのは、歌詞のテキスト起こしがけっこう面倒くさいということ。だいたい以下のようなことをする必要があります。

  1. 漢字はすべてカナにする
  2. 助詞の「は」は発音どおり「わ」にする(例:あれは何→あれわなに)
  3. 他にも表記と発音が違うものは発音どおりにする(例:どうすりゃいいの→どおすりゃいいの)
  4. 促音の「っ」は直前の母音にした方がうまくいく(例:ちょっとでいいのだ→ちょおとでいいのだ)

そんなわけでそういった変換を自動でやってくれるプログラムを作ってみました。一番大変な上記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

navnav 2008/01/05 10:03 電波っぽい自動作詞で恐縮です。

aikeaike 2008/01/08 01:28 いやいやなかなかそれっぽい味のある歌詞だと思いますよ。
まじめな話、音や画像の素材集はネット上にわりとありますが、
歌詞の素材集って全然ないんですよね。今後技術が進歩して
精度の高いジェネレータが登場したら需要はけっこうある
気がします。