フリガナとDiff [プログラム [全般]]
DUP映像でカラオケで言っていたプログラム,C# 2.0で全面作り直しをしています。
さて,どうしてもでてくるのが,MIDIの歌詞データと本来の歌詞データとの相違です。 簡単に言うと,漢字の読みをどうやって処理するか,という問題です。
正攻法なら,漢字の読みを取得してくるのでしょうが,歌詞というのは本来は読まない読み方をするものなので,その方法は使い物になりません。 で,今回はDiffを使って差分をとり,音数で配分するようにして処理するようにしています。
とはいえ,Diffを使うのも結構問題が出ます。例えば,キラリ★Dear Love!より,次の歌詞
見てると信じたこの瞬間
輝き出せる気がした
と,
見てるとしんじたこのときかがやき出せる気がした
との文字単位のDiffをとると,
- 「瞬間\n輝」と「ときかがや」が異なると出る
- 「瞬間\n輝」と「と」,「」と「かがや」が異なると出る
の二種類が,候補に挙がります。そして,悪いことに後者を現在のプログラムは取り上げてしまいます(というか,以前のバージョンでもそうでした)。さて,どうすっかなぁ……。
前者になるようにDiff結果に細工を加えました。
各不一致部の文字数の比が1に近づく組を採るようにしたためです。
・前者は4/5
・後者は(1/4+0/3)/2=1/8
なので,前者,という考えです。
まぁ,改行を挟んで「瞬間」と「輝」に割り振る文字数は文字数の比を使っているので,
・「瞬間」と「ときか」
・「輝」と「がや」
となってしまいますけどね……。
by y-ookubo (2006-03-22 13:46)