ms_3d

3DCGに関するあれこれ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

素人VSQ解析編 3D庵版

■というわけで、ここ2日ほどずーっとVSQのことを考えてます(^_^;)
 と思ったらToyStudioさんもミックミクに興味がおありということなので、

 素人ながらzhuoさんの説明を元に僕の理解した範囲でVSQの解析を書きます。
 文字Onlyのログです。

■まずは用意した3つのvsq

 hatsune120.vsq(3kb) hatsune60.vsq(3kb) 愛について.vsq(88kb)

hatsune120.vsqは、テンポ120bpmで「はつねミクー♪」と歌わせたもの
 hatsune120.vsqは、テンポ60bpmで「はつねミクー♪」と歌わせたもの
 愛について.vsqはスガシカオさんの曲です。

 ちなみにミックミクには有志の方が作られた「はちゅねのないしょ」
 という拡張プラグインが存在してまして
 この中の"TextEdit"というプラグインでテキストを吐き出すと、

 はちゅね.vxt(2kb)

 になります。(vxtはテキストファイルです)

■んでもですね、実は*.vsqって、バイナリのくせに、
 テキストエディタで ある程度テキスト形式が読めます。
 (ただ、やっぱりバイナリなんで、ここが僕の今ツマヅイテイル点ですが)

■さて、vxtで見ると、たぶんこういうことだと思います。
 3D(もしくは2D)との連動を考えるとき、重要な部分だけコメントつけました。 

******************************************************
[Master]
TimeFormat=480
[Tempo]
0=500000/*Tempo*/
[Beat]
0=4/4/*拍*/
 ・
(中略)
 ・
[EventList]/*イベント音素の始まりのポイント*/
0=ID#0000
7680=ID#0001
7980=ID#0002
8220=ID#0003
8460=ID#0004
8700=ID#0005
9300=EOS/*終わり*/
[ID#0000]
Type=Singer
IconHandle=h#0000
[ID#0001]
Type=Anote
Length=300/*音の長さ*/
Note#=61/*音階*/
Dynamics=64
PMBendDepth=5
PMBendLength=0
PMbPortamentoUse=0
DEMdecGainRate=56
DEMaccent=16
LyricHandle=h#0001
 ・
 ・
(中略)
 ・
 ・
[h#0001]
L0="は","h a",0.000000,64,0,0/*発音*/
[h#0002]
L0="つ","ts M",0.000000,64,0,0
[h#0003]
L0="ね","n e",0.000000,64,0,0
[h#0004]
L0="み","m' i",0.000000,64,0,0
[h#0005]
L0="く","k M",0.000000,64,0,0
******************************************************

■まず、テンポが120bpmということは一小節が2秒です。
 表記が0=500000ってことは、おそらく60/120=0.5秒=500000/10000000秒てことかにゃ?
 んで、ID#0000は、ヘッダと考えて、
 歌のはじまりはID#0001から、「は・つ・ね・み・く」という5音で
 歌が終わるポイントが9300(この数値はよくワカンナイですけど)

 その下のチャンクはID(音素)ごとの音の長さと音階(ドレミです)と、
 音の特性のパラメータ。
 最後は、発音と、何かのパラメータ(ブレスとかですかね?)

■音に関しては、まず連動には関係ないとして
 (もちろんダイナミクスとかアクセントとかも情報にはなるんですが)
 構造体を定義するなら、

Event[num]{ int begin , int length , int shiin , int note }
 (音階は音出し確認の必要な場合のみ)
 
 他に必要なのは、全体の尺とテンポ
 int tempo;
int songtime;
 
 この6つの情報さえ正確に取れればいいんじゃね?
 とか。

■しかしですね、世の中には検索すれば
 こんなに素晴らしいソースが用意されているにも関わらず
 http://www.slis.tsukuba.ac.jp/~hiraga/seminar/ulisonly/midtotxt.c
 僕はファイルの入出力や、文字列の扱いに関してほとんど理解してないので、
 これを元にC++Builderに移植するのに、ものすごく時間がかかってるんですね(´△⊂)

 つかね、バイナリをアスキーにするだけならば、
 midi系の宣言やらは必要ないですよね、たぶん。
 ところが、ソースを読んでいても、どこがバイトリードをしてる部分か、
 なかなか理解出来ナス。

 つかね。。ほんとプログラムは生兵法なんですよ、
 じゃ なんで手を出すのか?自分ちゅー(^_^;)




スポンサーサイト
  1. 2007/11/03(土) 21:35:44|
  2. 未分類
  3. | トラックバック:1
  4. | コメント:3

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。