Kuma Ichigo (くま一号)
  • Author:Kuma Ichigo (くま一号)
  • Kuma Ichigo (くま一号)の Hobby site.
    YURI, NOVEL GAME, VOCALOID & VOICE SYNTH.
  • RSS
怪盗紅薔薇の隠れ家
【を】な別室、です。
Counter



最近の記事


最近のコメント


カテゴリー


ブログ内検索


RSS


mail form

名前:
メール:
件名:
本文:


月別アーカイブ


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

リンちゃんちょっと見せて 【ファイル解析編2 大構造】
あー、寄り道しすぎ。本題です。

 VSQファイルは2つの部分からできている。というのは、よってたかって解析されている。んで、vst用に書き出したときの.midファイルと.vsqファイルが全く同じというのもわかってる。
 でも、両者が同じ筈はないので、たぶん二重に冗長部分が書かれてるというのもわかっている。
 参考にしたサイトとか動画はあまりにたくさんなので書けませんが、VSQテキスト部分はLipSyncのBoareさんvst部分は、DominoのVocaloid2用vstの定義ファイル(初心者になるための耳コピ講座)がかなり参考になりました。
 ……結局、中身を覗くperlスクリプト、自分で作った。そこらのDAWでもなんでも中身がのぞけるはずなのになんで作る羽目になったかって、MIDI規格すれすれのところが2カ所あって化けるもので……。


基本構造:SMFの形式

Standerd MIDI File
Track 0
  1.  Format = 1
  2.  TIMEBASE = 480 tick/beat
Track 1
 Tempo
 Beat
Track 2 ~
Vocaloid2 エディタのTrack 1~に相当
最初にトラックの名前

VSQテキスト
1:1:000からテキストメタイベント 127バイトずつのブロック
DM:0001 , DM:0002 ……というブロックヘッダ
VSQテキスト本体

VST MIDI
NRPNのかたまり



トラック0 ヘッダトラック
 トラック0は普通にMIDIファイルしている。

%MIDIFILE ARRANGE FORM
;*====================================*
; Header & General Info.
; All Tracks : 2 (Trk)
; Date-Time : 2008/08/02 17:23:46
;*====================================*
@MThd
@FORMAT 1
@TIMEBASE 480
@END

 遙か古代、MIDI創生期からの伝承を保持している方がもしみていたらわかると思いますが、sc.exeってmidとテキストのコンバータ、というより、コンパイラ、ディスコンパイラの吐き出すテキストと基本、同じにしました。 ';'はコメント。
@はヘッダとかのMIDIのコマンド以外の記述。
 MIDIファイルであることを示すヘッダがあって、MIDIファイルの形式がある。TIMEBASEというのは、4分音符をいくつのクロックで表わすかという数字。一拍を480tickで表わします、という意味です。
 この、TIMEBASEの情報は、VSQのテキスト部分に書かれていないようです。480固定だからでしょうか。

トラック1 コンダクタートラックとか、マスタートラックとか言われるところ。

;*====================================*
; <MTrk> Header Info.
; Track No. : 1
; Block Length : 35 (byte)
;*====================================*
@MTrk 1

000000000: 1:1: 0 @SEQ_NAME Master Track
000000000: 1:1: 0 @TEMPO 60
000000000: 1:1: 0 @BEAT 4/4
000000000: 1:1: 0 @END

 こんだけ。曲の途中でテンポが変わった場合はここに書き込まれます。拍子は、ボカロエディタの場合、曲の途中で変えられませんし、実質的に意味はありませんからここだけでしょう。

 そうそう、一番左の0000000000は、つけ加えました。 普通は、"1:1:0" 一小節目の、一拍目の、tickゼロの位置という書き方をするんですが、VSQテキストの方の表現が、0から始まるクロックをずーっと書いてあるだけなので、両方読めるように。


トラック2 以降

 ここからが本当の中身です。
ボーカロイドエディタでのトラック1から入っているところ。マスタートラックと合わせて、最大17あるわけですね。

;*====================================*
; <MTrk> Header Info.
; Track No. : 2
; Block Length : 6161 (byte)
;*====================================*
@MTrk 2

000000000: 1:1: 0 @SEQ_NAME Voice1

 ここまでがヘッダー。


 VSQ部分: これが本体。

 SMFのテキストとして書き込まれている。「メタテキスト」という書式で、音源やvstには送られない。MIDIシーケンサやDAW、プレイヤーのための情報としてテキストが書けるようになっているのだけれど、その書式の中に詰め込まれている。 これが、各トラックの1小節目の一拍目の最初、時間ゼロのところにどさーっと書かれている。

 127バイトごとのブロックに機械的に分割されていて、ブロックに "DM:0001" とか連番で番号が振られている。それを取り除いてつなげると、VSQの本体が取り出せる。iniファイルのような形式ででブロックごとに書き込まれたテキスト。歌詞のひらがなはshift-jisで書かれている。 2バイトの文字が機械的にブロックに分割されるために1バイトごとに分かれてしまうことがあり、普通のmidiファイルの解析では化ける。(これがちょっと困った。それでMIDI創生期から使ってるsc.exe(DOSプログラムだ(笑))が使えなかったの。自分でプログラム書くつもりなかったんだけどなあ)
 DAWや、MIDIプレイヤーで、今時こんなことで動作上のトラブル起こすようなものはないとは思うけど、Dominoでさえ表示はかっとぶ。これ、本当は危ない。MIDIってコマンドの1バイト目は最上位ビットが立ってて、2バイト目以降は立ってないってすっごく単純な構造をしているの。
 他にも、鏡音発売時くらいまでのボーカロイド2には、vstの初期化のところでもう一カ所危ないところがあったようだ。ボカロエディタにもvstのコマンドにも存在しない、4チャンネルのパラメトリックイコライザーのようなパラメータが、全部で12個あって、これが、多分無効という意味だろう、255(16進数のFF)で初期化されてた。こちらはほんとにMIDI規格違反で、12月末の鏡音発売時のデータには入っている。2月に届いたうちのリンちゃんには入っていない。後述。)

;*====================================*
;* VSQ TEXT BLOCK
;*Block header "DM:xxxx:" is removed.
;*====================================*
[Common]
Version=DSB301
Name=Voice1
Color=181,162,123
DynamicsMode=1
PlayMode=1
[Master]
PreMeasure=1
[Mixer]
MasterFeder=0
MasterPanpot=0
MasterMute=0
OutputMode=0
Tracks=1
Feder0=0
Panpot0=0

 途中省略

[EpRResidualBPList]
2610=0
12075=0
[EpRESlopeBPList]
8130=64
8175=62
12330=64
[EpRESlopeDepthBPList]
2775=0
12225=0
;*====================================*
;* VSQ TEXT BLOCK END
;*====================================*

 というわけで、そのまんま読めます。
で、こちらの方は、リップシンク系の人が早かったけど、解析がよってたかって行われているし、ボカロエディタの設定とだいたいそのまま対応がつくので、いろんなツールができてきた、というわけです。
 妙に暗号化したりしなかったのは、YAMAHAさんGJと思います。テキストで羅列しても、どうということのない容量だし。

つづく

関連記事

この記事に対するコメント

この記事に対するコメントの投稿














管理者にだけ表示を許可する



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