noocyte のプログラミング研究室 〜プログラムは楽しげに走らねばならない♪〜

VOCALOID2 シーケンス (VSQ) ファイルのフォーマット (推定)

作成開始:2008/05/04(日)
最終更新:2008/09/09(火)

調査中・書きかけです.

注意:公式情報ではなく, ネットで調べた情報や自分で実験・推測した結果をまとめたものです. 内容の正確性およびこれを利用した結果については一切保証できません.


0.目次

  1. 概要
    1. VSQ ファイルが使用する MIDI メッセージ
  2. トラックの構造
    1. マスタートラック
    2. 通常トラック
  3. テキストメタイベント
    1. Common セクション
    2. Master セクション
    3. Mixer セクション
    4. EventList セクション
    5. 歌手変更イベント (ID#0000 〜 ID#9999)
    6. 音符イベント (ID#0001 〜 ID#9999)
    7. 歌詞情報 (h#0000 〜 h#9999)
    8. ビブラート情報 (h#0000 〜 h#9999)
    9. 各種パラメータ曲線情報 (*BPList)
  4. NRPN
  5. 音声記号
  6. VSQ/SMF 解析ツール・C++ 用ライブラリ (開発中)
  7. その他
    1. VOCALOID2 関連レジストリ
    2. 「VOCALOID2 オーナーズ・マニュアル 日本語版」の誤記?
  8. 付録:VSTi 用 MIDI データフォーマット
  9. 参考資料・リンク
    1. マニュアル等
    2. 参考図書
    3. サイト内関連ページ
    4. 外部へのリンク
  10. 更新履歴

1.概要

VSQ ファイルはフォーマット1の SMF (標準 MIDI ファイル) である. チャンクの出現順序は次のとおり.

          ┏━━━━━━┓    ┏━━━━━━━┓      ┏━━━━━━━┓
          ┃            ┃    ┃ Track Chunk  ┃      ┃ Track Chunk  ┃
Start ─→┨Header Chunk┠──┨   Track #0   ┠─┬─┨Track #1〜n−1┠─┬→ End
          ┃            ┃    ┃(Master Track)┃  ↑  ┃(Normal Track)┃  │
          ┗━━━━━━┛    ┗━━━━━━━┛  │  ┗━━━━━━━┛  │
                                                  └───────────┘

n:トラックの総数 (マスタートラック + 通常トラック)

通常トラックの本数は 1〜16 (n=2〜17).

1.1 VSQ ファイルが使用する MIDI メッセージ

VSQ ファイル内での使用が確認された MIDI メッセージは次のとおり.


2.トラックの構造

2.1 マスタートラック

次のメタイベントからなる.

  1. Track Name (1回,時刻0)
    トラック名は常に "Master Track".
  2. Time Signature (1回以上,初回は時刻0)
    可能な時刻は各小節の先頭のみ.
  3. Set Tempo (1回以上,初回は時刻0)
    VOCALOID2 エディタで設定できる時刻は 5 TimeDivisions の倍数だけらしい.
  4. End of Track (1回)

イベントの出現順序は次のとおり.

                                    ┏━━━━━━━┓
                              ┌─→┨Time Signature┠→┐
          ┏━━━━━┓      │    ┗━━━━━━━┛  │      ┏━━━━━━┓
Start ─→┨Track Name┠→┬─┤                        ├─┬→┨End Of Track┠─→ End
          ┗━━━━━┛  ↑  │    ┏━━━━━━━┓  │  ↓  ┗━━━━━━┛
                          │  └─→┨  Set Tempo   ┠→┘  │
                          │        ┗━━━━━━━┛      │
                          └────────────────┘

2.2 通常トラック

次のメタイベントおよびコントロール・チェンジからなる.

  1. Track Name (1回,時刻0)
    トラック名は VOCALOID2 エディタで設定された値.デフォルトは "Voice1" 等.
  2. Text (1回以上,すべて時刻0)
    単一の長いテキストを,テキスト・メタイベントの制約 (127バイト以内) に合わせて分割している.
  3. Control Change (0回以上)
    下記の NRPN パラメータ番号および値の設定のみを使用.チャネルは0のみ.
    • CC#006 RPN/NRPN Data Entry (MSB)
    • CC#038 RPN/NRPN Data Entry (LSB)
    • CC#098 NRPN (LSB)
      一部,MIDI 規格の範囲外の値を設定するメッセージがある.
      (NRPN 0x5503 (Voice Change Parameter Value), 設定値:0xFF (>0x7F))
      未使用 (?) のレゾナンス関係のパラメータか?
    • CC#099 NRPN (MSB)
  4. End of Track (1回)

イベントの出現順序は次のとおり.

                             
          ┏━━━━━┓      ┏━━┓                                ┏━━━━━━┓
Start ─→┨Track Name┠→┬→┨Text┠─┬┬─────→─────┬→┨End Of Track┠─→ End
          ┗━━━━━┛  ↑  ┗━━┛  ↓↑  ┏━━━━━━━┓  │  ┗━━━━━━┛
                          └──────┘└─┨Control Change┠←┘
                                              ┗━━━━━━━┛ 

3.テキスト・メタイベント

1つの通常トラック内のセクションの出現順は次のとおり.

                            (最初の通常トラックのみ)
            ┏━━━┓      ┏━━━┓    ┏━━━┓      ┏━━━━━┓
Start ──→┨Common┠─┬→┨Master┠─→┨Mixer ┠─┬→┨EventList ┠─→┐
            ┗━━━┛  │  ┗━━━┛    ┗━━━┛  ↑  ┗━━━━━┛    │
                        └──────────────┘                    │
                            (最初以外の通常トラック)                        │
                                                                            │
┌─────────────────────────────────────┘
│
│      ┏━━━━┓          ┏━━━┓
└→┬→┨ID#mmmm ┠→┬→┬→┨h#nnnn┠→┬─┬─┬────────┬─┬─→ End
    ↑  ┗━━━━┛  ↓  ↑  ┗━━━┛  ↓  ↑  │  ┏━━━━┓  ↑  ↓
    └────────┘  └───────┘  │  └→┨*BPList ┠─┘  │
                                              │      ┗━━━━┛      │
                                              └────────────┘

・mmmm,nnnn は 0000 から始まる連番 (10進数).桁数は4の倍数.

・*BPList の出現順は 3.10 を参照.

以下のセクションの説明では,";" から行末まではコメントとする (VSQ ファイル内にコメントはない).

3.1 Common セクション

[Common]
Version=DSB301
Name=Voice1
Color=181,162,123
DynamicsMode=1
PlayMode=1
Version
バージョン文字列.VOCALOID2 エディタ Ver.2.0.6.14 以前はすべて "DSB301"?
Name
トラック名 (文字コード:Windows-31J).Track Name メタイベントの内容と同じなので, 最大長は127バイトのはず.
Color
  • VOCALOID2 エディタのトラックタブを選択したときの色か?
    変更して読み込んでも,VOCALOID2 エディタの表示には影響ないようである.
  • 値の順序は G,R,B か?
  • 値の範囲は 0〜255 か?
  • 値はトラックごとに異なる.
DynamicsMode
1固定?
PlayMode
1固定?

3.2 Master セクション

最初の通常トラックだけに存在する.(つまり SMF 内の3番目のチャンク)

[Master]
PreMeasure=4
PreMeasure
プリメジャー (単位は小節数,最小値:1). VOCALOID2 エディタで設定可能な値は1〜8.

3.3 Mixer セクション

最初の通常トラックだけに存在する. マスターおよび各通常トラック用として,次のパラメータがある.
(値は VOCALOID2 エディタで設定可能な範囲.)

[Mixer]
MasterFeder=-10
MasterPanpot=0
MasterMute=0
OutputMode=0
Tracks=8
; 通常トラック0
Feder0=0
Panpot0=0
Mute0=0
Solo0=0
; 通常トラック1
Feder1=0
Panpot1=46
Mute1=0
Solo1=0
:
:
; 通常トラック7
Feder7=0
Panpot7=0
Mute7=0
Solo7=0

3.4 EventList セクション

イベントの開始時刻を時刻順に,"<時刻>=ID#nnnn" の形式で指定する.

[EventList]
0=ID#0000       ; 必ず時刻0で歌手設定.
30240=ID#0001
30600=ID#0002
:
:
562560=ID#1376
568320=EOS      ; End Of Sequence? (トラック終了時刻とは必ずしも一致しないらしい.)

3.5 歌手変更イベント (ID#0000 〜 #ID9999)

歌手変更イベント (参考:VOCALOID2 エディタのヘルプ ⇒ キーワード ⇒ シーケンス途中での歌手変更).

[ID#0000]
Type=Singer         ; イベント種別:歌手変更
IconHandle=h#0000   ; 歌手情報 (セクション h#nnnn) を参照する.

最初のイベント (ID#0000,時刻0) は必ず歌手変更イベントである.
(PreMeasure>0 なので,時刻0に音符イベントは存在しない.)

3.6 音符イベント (ID#0001 〜 ID#9999)

個々の音符のデータ.次の3つのダイアログで設定可能なパラメータおよび VEL.

[ID#0001]
Type=Anote          ; イベント種別:音符
Length=360          ; 音符の長さ (単位:TimeDivision,整数)
Note#=75            ; ノート番号 (0:C-2 〜 127:G8)
Dynamics=64         ; VEL (DYN ではない,0〜127,整数)
PMBendDepth=8       ; ベンドの深さ (0〜100%,整数)
PMBendLength=0      ; ベンドの長さ (0〜100%,整数)
PMbPortamentoUse=0  ; ポルタメント付加フラグ (上行:0x1,下行:0x2,両方:0x3)
DEMdecGainRate=22   ; ディケイ (0〜100%,整数)
DEMaccent=100       ; アクセント (0〜100%,整数)
LyricHandle=h#0001  ; 歌詞情報 (セクション h#0001 を参照する.)

; ↓ビブラートの種類が "Non Vibrato" の場合,次の2つは存在しない.
VibratoHandle=h#0018    ; ビブラート情報 (セクション h#0018 を参照する.)
VibratoDelay=240        ; ビブラート遅延時間 (単位:TimeDivision,整数)

[ID#0002]
:
:

VibratoDelay は,「ビブラートプロパティ」ダイアログの「ビブラート長」 (0〜100%,整数) と Length から計算した値を5の倍数に切り下げたものらしい.

unsigned VibratoLength = …;    // 「ビブラートプロパティ」ダイアログの「ビブラート長」(0〜100%)
unsigned NoteLength = …;       // 上記「音符の長さ」(単位:TimeDivision)

unsigned VibratoDelay = (unsigned)((1 - VibratoLength / 100.0) * NoteLength / 5) * 5U;

なお VOCALOID2 エディタでは,音符が一つもないトラックは保存できない.

3.7 歌手情報 (h#0000 〜 h#9999)

[h#0000]
IconID=$07010000
IDS=Miku
Original=0
Caption=
Length=1
Language=0
Program=0

各トラックの初期歌手設定 (時刻0) および歌手変更イベントのたびに現れるが, 歌手が同じならば内容はトラックによらず同じ.

IconID
詳細不明.16進数 (英字は小文字) で,下位7ビットは歌手の PC (Program Change) 番号らしい.
  • PC 番号は歌手エディタで表示される.
  • Miku=0,Rin=1,Len=2 だが, もしかしたらインストールした順番に採番されるのかもしれない.
  • $07010000=Miku,$07010001=Rin,$07010002=Len.
IDS
歌手名.Miku,Rin,Len またはユーザが歌手エディタで定義した名前. 歌手エディタは名前の一意性をチェックしないため,重複の可能性がある点に注意.
Original
歌手エディタで表示される「オリジナルの歌手」の PC 番号. 実際にはこの歌手自身の PC 番号 (つまり Program と同じ値) が入っている. (未使用のためテストされていないのか?)
Caption
歌手の説明文字列と思われるが,現在の歌手エディタでは設定できない. 空文字列固定?
Length
何の長さか不明.1固定?
Language
0固定?
Program
歌手の PC (Program Change) 番号 (0〜127).0=Miku,1=Rin,2=Len. 現在の歌手エディタでは,BS (Bank Select) 番号は0固定.

3.8 歌詞情報 (h#0000 〜 h#9999)

[h#0019]
; 1つの音符の歌詞
L0="す","s M",0.000000,64,0,0
1.歌詞 (lyric)
  • 文字コード:Shift_JIS
  • 文字種:ひらがな,全角/半角カタカナ,半角ローマ字.
2.音声記号列 (phonetic)
  • 複数の音声記号がある場合は半角空白で区切る.
3.不明 (浮動小数,小数部6桁)
ほとんどの場合,0.000000 または 1.000000 だが, その間の値になることもある.
4.不明
  • 値は0または64だけ? (フラグ?)
  • ほとんどの場合値は64だが,0のときは第5パラメータが存在しない.
5.不明
0固定? 第4パラメータが64のときに限り存在するらしい.
6.プロテクトフラグ
VOCALOID2 エディタの「音符のプロパティ」ダイアログの「プロテクト」フラグ (0:OFF,1:ON).

3.9 ビブラート情報 (h#0000 〜 h#9999)

[h#0002]
IconID=$0404000e        ;
IDS=slight              ; slight/fast/extreme
Original=14             ; 
Caption=[Slight] Type 2 ;
Length=320              ; ビブラートの長さ (単位:TimeDivision,整数)
StartDepth=40           ;
DepthBPNum=0            ;
StartRate=64            ;
RateBPNum=0             ;

3.10 各種パラメータ曲線情報 (*BPList)

一般形

[<セクション名>]
<時刻1>=<値1>     ; 第1行は初期値 (演奏開始時刻=PreMeasure 直後)
<時刻2>=<値2>     ; 値が変化した場合 (変化していなくても存在する場合がある.)
<時刻3>=<値3>     ; 〃
       :
       :
<時刻n>=<値n>     ; 最終値 (トラック終了時刻以前のはず)

[PitchBendBPList]       ; PIT (Pitch Bend)
30240=0
40559=0
40800=0
40802=-68
40804=-137
40806=-206
    :
    :
556815=-6775
568320=314
[PitchBendSensBPList]   ; PBS (Pitch Bend Sensitivity)
7680=0
30240=0
40560=5
41038=0
    :
    :
568320=0
[DynamicsBPList]        ; DYN (Dynamics)
13440=64
18240=64
[EpRResidualBPList]     ; BRE (Breathiness)
13440=0
18240=0
[EpRESlopeBPList]       ; BRI (Brightness)
13440=64
18240=64
[EpRESlopeDepthBPList]  ; CLE (Clearness)
13440=0
18240=0

; Reso*BPList は VOCALOID(1) のレゾナンス・パラメータ (周波数,帯域幅,振幅).
; VOCALOID2 で有効かどうかは未確認.
[Reso1FreqBPList]
13440=255
18240=255
[Reso2FreqBPList]
13440=255
18240=255
[Reso3FreqBPList]
13440=255
18240=255
[Reso4FreqBPList]
13440=255
18240=255
[Reso1BWBPList]
13440=255
18240=255
[Reso2BWBPList]
13440=255
18240=255
[Reso3BWBPList]
13440=255
18240=255
[Reso4BWBPList]
13440=255
18240=255
[Reso1AmpBPList]
13440=255
18240=255
[Reso2AmpBPList]
13440=255
18240=255
[Reso3AmpBPList]
13440=255
18240=255
[Reso4AmpBPList]
13440=255
18240=255

[GenderFactorBPList]        ; GEN (Gender Factor)
13440=64
18240=64
[PortamentoTimingBPList]    ; POR (Portamento Timing)
13440=64
18240=64
[OpeningBPList]             ; OPE (Opening)
13440=127
18240=127

4.NRPN

とりあえず,「VOCALOID2 LIBRARY オーナーズ・マニュアル日本語版」 の付録 "3-5. MIDI Data Format for Real-time VOCALOID2 VSTi" を参照.


5.音声記号

とりあえず,「VOCALOID2 LIBRARY オーナーズ・マニュアル日本語版」 の付録 "3-1. 音声記号一覧表 (日本語)" を参照.


6.VSQ/SMF 解析ツール・ C++ 用ライブラリ

開発中


7.その他

7.1 VOCALOID2 関連レジストリ

その他のレジストリ・エントリについては,レジストリ・エディタで "VOCALOID","vsq","vlf" を検索.

7.2 「VOCALOID2 オーナーズ・マニュアル 日本語版」の誤記?


付録:VSTi 用 MIDI データフォーマット

とりあえず,「VOCALOID2 LIBRARY オーナーズ・マニュアル日本語版」 の付録 "3-5. MIDI Data Format for Real-time VOCALOID2 VSTi" を参照.


参考資料・リンク

マニュアル等

参考図書

コンプリートMIDIブック
高橋 信之
リットーミュージック
売り上げランキング: 19131
おすすめ度の平均: 4.0
4 割といい


SMFリファレンス・ブック (DTM HANDBOOKS)
新井 純
エディロール
売り上げランキング: 613991

サイト内関連ページ

外部へのリンク

未整理です.敬称略.


更新履歴

  1. 2008/05/04(日) 作成開始
  2. 2008/05/22(木) 書きかけだが Google 登録およびひっそり公開.
  3. 2008/09/09(火) 連絡先追加変更.


連絡先:
Copyright © 2008 noocyte, All rights reserved.
リンクはご自由に.
「noocyte のプログラミング研究室」トップページに戻る.