Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@atsushieno
Created December 10, 2017 07:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save atsushieno/3bad5fad2dd8e43e927b6f2ab30126a1 to your computer and use it in GitHub Desktop.
Save atsushieno/3bad5fad2dd8e43e927b6f2ab30126a1 to your computer and use it in GitHub Desktop.
VSQの歌詞マクロ研究

By note on on August 23, 2009 2:12 AM | No Comments | No TrackBacks

VSQサポートMMLで歌詞とメロディが書けるようになったので、vocaloidのヘルプなどを見ながら埋めていた「あ」から「を」までのマクロを全て埋めてみた。 これの発音記号が、単純なヘボン式ローマ字表記ではないのだ。

一番分かりやすいところでは、まず「う」段が'u'にならず、'M'になる。'u'が使われているのは「ゆ」だけだ。 おそらく、日本語の「う」は一般に発音が不明瞭で、あえて声を出して聞かせる音にはなっていないのだろう。 唯一の例外として「ゆ」はハッキリとuを発音するようにしないと、音が聞き取れないのだろうと思う。

次にパターンが明白なのは「い」段のほとんどにシングルクォーテーション(')がつくことだ。 これは、50音を埋めても濁点・半濁点を埋めても気付かなかったのだけど、「ぎゃ」などをどう表記するのか調べていて気がついた。 「ぎ」は「ぎゃ」「ぎゅ」「ぎぇ」「ぎょ」などと同じパターンに位置づけられているのである。他のイ段の音もほとんどがこれだった。

サ行やタ行の発音記号表記は、「し」「す」「じ」「ず」「ち」「つ」などがバラバラの発音記号表記をもっていて一見かなりカオティックだけど、 ここにはかなり豊富なバリエーションがあって、「ちゃ」だの「つぁ」だのといったトリッキーな配列の中に収まっている。 ハ行もいろいろあるが、似たような体系の中に収まっている。ラ行など、ついにアルファベットのマッピングではなく、"4 a" "4 e"などの表記になっている。

しばらく肉体労働して、歌詞のマクロは一通り書き出した。 ここまでの手応えとして、基本的にvocaloidは英語圏で開発されてきたソフトウェアなんだなと思った。

で、試しにガンダムの歌などを歌わせてみて(たまたま思いついたのがコレだっただけで特にガンダムびいきはない)、 さっそく気付いたのが「ぎんがへ」と歌詞を書くとginga "he" となってしまうということだ。 しかし「ぎんがえ」と記述するのはいかにも頭が悪いので、「」という命令を追加することにした。 本当は「へ_」にしたかったのだけど、「_へ」という命令が既に存在していたので、両方を囲んだものは e と発音することにした。 (多分これは後で追加する命令との関係で混乱のもとになるのだけど...)

次に気付いたのが促音(「っ」)のバラエティだ。はねる、というのは、単純に休符にマップ出来るものではない。実際には2通り(あるいは3通り)の解釈がある

  • 純然たる休符。椎名林檎が「あたしの名前をちゃんと呼んで 体を触って」と歌う時の「っ」は発音されない。
  • 前の母音を引っ張る。 「銀河へ向かって飛べよガンダム」の「っ」は、直前の「か」とキーが異なり、「あ」で発音される。 フルノートで引っ張る場合と、スタッカートで半ば休符にする場合で区別する考え方もある。

基本的にmugeneのvsqサポートでは、歌詞コマンドひとつにノートオンひとつが対応していなければならない。 休符の場合と、母音の場合とで、以下のように「っ」という命令と「っ_」という命令を使い分けることで、これらを区別することにした。

  • 母音の場合は前の母音でノートオンする。このために、歌詞命令の全てに、どの母音が使われたかを記録する変数を用意して、「っ」が出現したらこれでノートオンすることにした。
  • 休符の場合は何も発音しない。休符やスタッカートの休む部分については、メロディの記述としても休符が入るべきなので、整合性はとれる。

さてこれらは区別できた。次にハマったのが坂本九の「上を向いて歩こう」を打ち込もうとした時である。 メロディは rffgafdc rf2gafdc で、まず「む」は実際には「むーいて」のようになり、「む」にaが、「ー」(長音)に f が割り当てられなければならない。 歌詞として長音部分を記述するのはやや恥ずかしいものがあるが、何も書かないと識別できないので、仕方なく「ー」は先の「っ」で母音を引っ張るのと同様の処理を加えることにした。

しかし「ー」の解釈はそれだけではなかった。aikoが「あー テトラポットのぼって」と歌う時の「ー」には、ノートオンは割り当てられないのだ。 ここでもやはり両者は区別されなければならない。こちらは休符ではないが、やはりノートオンが割り当てられないという点では同じなので、単純に処理をスキップすることにした。

そしてこれまで、実は「っ」を無音、「っ_」を母音という使い分けをしていたのだけど、 長音の用途はどうも逆に無音の場合はそもそも「ー」を書かない場合の方が多そうに思えたので、 むしろここで前のキーを引っ張る命令に「ー_」を割り当てることにして、それに合わせて「っ」と「っ_」の意味も入れ替えることにした。

さて、「上を向いて歩こう」にはまだ罠があった。「あるこう」の「こ」は先と同じ問題だったので、「あーるこーーう」と記述することで解決できたのだけど、 最後の「う」は u (M) ではなかったのである。 発音に忠実に書けば「ああるこおおお」すなわち o になる。例によって「あるこお」と記述するのは恥ずかしいので、ここでもやはり「う_」という命令を追加することにした。

そんなわけで、最終的な「上を向いて歩こう」のMMLはこうなった:

// ---- Master track ----
0   VSQ_INITIALIZE_MASTER t120 BEAT4,4

// ---- vocal body ----
1   VSQ_INITIALIZE_TRACK VSQ_SETUP_FIRST_TRACK VSQ_SETUP_DONE
1   うえをむーいて あるこーーう_
1   l4o5 rffgafdc rf2gafdc

1   OUTPUT_VSQ_TEXT

たったこれだけの歌詞を記述するのに、vsqサポートのマクロ定義には、何度か書き換えが行われた。 でも「うえおむういて あるこおおお」と記述するよりは、だいぶマトモなのではないかと思う。 こういう微妙な工夫で、歌詞がより自然言語に近いかたちで記述できるなら、無駄ではなかっただろうと思う。

いずれにせよ、まだ他のパラメータを何もいじっていないにもかかわらず、vocaloidの音声合成の深みを味わうことができて、これはこれでとても面白かった。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment