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



最近の記事


最近のコメント


カテゴリー


ブログ内検索


RSS


mail form

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


月別アーカイブ


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

リンちゃんちょっと見せて 【ファイル解析編3 16分音符は長さゼロ!!】
こんな解析をして意味があるのかって、あるらしいんですこれが。
とりあえずわかった、使いこなす方も科学の限界越えてること。
で、とりあえず、cosMo(暴走p)たんは凄い篇。

MIDI部分:VOCALOID2.VST 用

 目的はここ。

 マニュアルの最後に書いてある、NPRNのコマンドで書かれている。このため、NRPNの上位バイト、下位バイト(この言い方は正確じゃない)、データの上位バイト、下位バイトの4種類のコマンドしか出てこない。

 えー、上位バイト、下位バイトが正しくないというのは、7ビットコードで、ほんとは「上位7ビット、下位7ビット」だからです。VOCALOIDのパラメータが、やたら0~127のやつばっかりなのは、そういうところはMIDI的だからなのね。
  パラメータには、だから、7ビットのものと、14ビットのものがあります。DYNとかGENとかが7ビット。PITが14ビット。上位がMSB、下位が LSBと表記されます。VOCALOID2の、ファイルで入ってるPDFのマニュアル、最後の何ページかに書かれているvstに対するコマンドの羅列はそ ういう意味です。

 実際には、NRPNが二つ(VOCALOID2.VSTにはNRPN MSBだけのコマンドはない)、DATAが2個のセットになります。 NRPNが一つで3バイト。DATAが一つで3バイト。  VOCALOID2.VSTに対するコマンドは、6~12バイトの組って事になるんですが……それだけにはならない(笑)。

  NRPN=Non Registerd Parameter Numberってのは、直訳、登録されていないパラメータ番号。 MIDI規格に書かれていない、メーカーとか音源に固有に定義された命令です。なので、 たいてい音源の識別コマンドが含まれます。 MIDIの原則は、「理解できないコマンドは無視」なので、これでよかったの。

 で、これを書き出すと、

NRPN MSB xx
NRPN LSB xx
DATA MSB xx
DATA LSB xx

……という意味不明の羅列にしかならないんですよね。Dominoの定義ファイルならそれなりに表示できてるんですが、その状態でテキストにできないし。
 それだけじゃなく、いつもこの4つ組が来るわけじゃないの。NRPN一個の命令と、二個の命令があり、パラメータも7ビットと14ビットがあるでしょ。

  もっと面倒なのは、MIDIには「ランニングステータス」という概念がありまして、ってか、これ、通信の概念なんだけど、もともとMIDIって通信規格だ もん。 インターネット(という名前はないな、ゲートウエイとでも言ってたかな)がまだ300bps、じゃない、300baudだった時代の、 31,250bpsって超ハイテク技術だもん、通信量と処理量を一バイトでも削ろうという涙ぐましい努力があるの。送りっぱなしで、相手が受け取ったとい う信号が返らないMIDIだから、よく信号を受け取り損ねた。だから、途中でずれちゃっても最上位ビットをみればそこで頭出しができて立ち直る。音が鳴 りっぱなしになっちゃったときに、音を止めるとかリセットするとか、そういうコマンドが大量にあるし。……脱線した。

 えーと、送信を節 約するために、NRPN MSBを送って、ざっとデータを送った後、次も同じNRPN MSBだったら省略してNRPN LSBから始めればいいんです。次も同じNRPNLSBだったら、DATA MSBから送ればいいです。んで、次も同じDATA MSBだったら、DATA LSBだけ連続してがーーーっと送ればいいことになってるんです。
 DYNだったら、7ビット、0~127のパラメー タの連続でしょう? 一個送るためにいちいち12バイト送ってたら大変なことに……今は全然ならないけど、30年前だったら、まともに動かなかったのよ。 で、VOCALOID2.VST用のMIDI部分はランニングステータスが使ってあるの。 だから、DYNの「値だけ」ずら~~~っと並んで書いてあるわ け。 これ、見ただけでは何のことだか全然わかりません、はい。
 それをわかるようにするのに、やっぱり結局あああああああ、作りました。ただ、自分だけわかればいい書式なので、もうちょっとなんとかしようとしてますが、はい、これです。

 できてみた瞬間、あれ?????

 Delay 1905msecだあ? たしか、2秒のディレイがデフォルトで入ってたはずだぞ。2秒って言ったら2000msecだぞ。

 95msecの差と言ったら音楽ではずいぶん長い時間です。Tempo 120なら一拍が500msecですから、えっと16分音符が125msec、32分音符=62.5msecよりだいぶ長い。なんだそれ。
 そう思ってみると、音符の長さも短いんです。 Durationの値が、音符の長さよりもずいぶん短い。

  そこに、大きな鍵がありました。 そう、VOCALOIDの特許の一つ、「子音が終わったあとの、母音の頭を発音のタイミングとして捉えている」んです。  VOCALOID2エディタは、音符の通りのタイミングと長さを見ています。でも、エンジンにとっては、子音の分がコマンドのタイミングより前につっこ んでいるんです。
 
 そこでおもしろいこと。
テンポ120の16分音符=125msec以下だと、長さゼロです。 ええっ? っ て感じですが、ほとんど子音だけ発音して終わり。 これ以上音符を短くしても、発音自体は変わらなくて、発声のタイミングだけになっちゃう。うわあ。

 そういえば、初期の初音ミクにはテンポいくつかより早いと、音程が確かじゃなくなるとか書いて あったなあ。 「子音には音程感がない」というのが、しゃべりの音声合成との違い。

 ふむふむ、限界に挑戦した曲となるとやっぱりアレ、「初音ミクの消失」だけど、ショート版からフル版のDead-Endになったらわざわざテンポを下げたんだよね。
 Dead-Endがテンポ245。三連符の連打だから、えーと電卓、

 60秒 ÷ 245 ÷ 3 =  81.6 msec

 うわあああああああああ。 使いこなす方も科学の限界越えてるって。音符の長さゼロで、言葉を聞き取らせてるんだ、「消失」って。

 解析した意味が初めて出てきました。 やはり、VSQテキスト=VOCALOID2エディタと、vst用MIDIは全く同じものが二重にあるわけではなかったんです。

 ……MikuMikuVoiceのヘルプで樋口さんが解説してくれるまで気がつかなくて、悩んでたよorz
母音にも同じディレイが入ってるってことは、ほんとに「あいうえお」とそれ以外の発音タイミングが違うんだ。へえええええ。

 この解説は次に続く。 だってね、その前つっこみの、差も割合も一定じゃないんだよ、音符の長さによって。


 えーと、ちょっとだけ説明。
  "(" がついているのは、音符の中に含まれる命令で、C3とかD4とかの発音のグループの中に含まれるコマンドです。ひらがなの歌詞は、vstには理解できない (笑)ので送られていません。Version:Device= 0:0になってますが、VOCALOID第一世代のMEIKOやKAITOはどうなってるんだろう。

 そうそう、もう一つ大きな謎が残りました。 初期化してない!!
マニュアルには必ず入れるようにって書いてある、Begin of Vocaloid2 MIDI と End of Vocaloid2 MIDI がはいってないんです。 これ、一曲歌ったら、次の曲を歌うときに前の曲の設定が残るはずなのに……?

 ところが。
 あのね。リンちゃんをお迎えする前なんだけど、ハロpの恋のバカンス、一時VSQが公開されたでしょう。当時は読むことはできなかったけれどこれは取っておこうと思って(笑)、ダウンロードしてあった。それを見たら……全部のパラメータが一つずつ初期化されてる!!

 そう、前述の謎のパラメータだけでなく、最初は一通り入っていたパラメータの初期設定が、今年二月のうちのリンちゃん.vstからは消えちゃってるの。 Act.2は……あれれ?

 入手できるいろんなVSQファイルを見ていたら、昨年九月の初音ミク発売以来、初期化部分は二転三転しているようなんです。 あれ?

  結構、発売してからも手を入れてるのかな。 いや、この発売してからのユーザーのツッコミぶりを見たら、いろいろ変えたいところはあるんだろうな。
 初音ミクのバージョン番号で見ると、少なくとも二回のバージョンアップ、サポートに出ないマイナーバージョンはもう十何回? ふぅん、なるほど。 これは、クリプトンのサポートを注意してみていないとダメですね。

;*====================================*
;* VOCALOID2.VST MIDI BLOCK
;*====================================*
000000000: 1:1: 0 @CH 01 : .
000000000: 1:1: 0 @Version:Device 0:0
000000000: 1:1: 0 @Delay 0msec
000000000: 1:1: 0 BankSelect 0
000001649: 1:4:209 ProgramChange 2
000001649: 1:4:209 @Version:Device 0:0
000001649: 1:4:209 @Delay 1905msec
000001649: 1:4:209 BRE
000001814: 1:4:374 0
000001814: 1:4:374 CLE
000002384: 2:1:464 0
000002384: 2:1:464 @Version:Device 0:0
000002384: 2:1:464 @Delay 1905msec
000002384: 2:1:464 PIT 0 (0%)
000002880: 2:3: 0 @Version:Device 0:0
000002880: 2:3: 0 @Delay 1905msec
000002880: 2:3: 0 C3
000002880: 2:3: 0 (Vel= 71
000002880: 2:3: 0 (Duration 1397
000002880: 2:3: 0 (Location TOP&END
000002880: 2:3: 0 (PhoneticByte 1
000002880: 2:3: 0 [a]
000002880: 2:3: 0 (Phonetic Continue
000002880: 2:3: 0 (v1mean 0
000002880: 2:3: 0 (d1mean 22
000002880: 2:3: 0 (d1mean1stNote 20
000002880: 2:3: 0 (d2mean 69
000002880: 2:3: 0 (d4mean 24
000002880: 2:3: 0 (pMeanOnsetFirstNote 10
000002880: 2:3: 0 (vMeanNoteTransition 12
000002880: 2:3: 0 (pMeanEndingNote 12
000002880: 2:3: 0 (Portament off
000002880: 2:3: 0 (ChangrAfterPeak(Decay) 0
000002880: 2:3: 0 (Accent 0
000003840: 3:1: 0 (End 0
000003840: 3:1: 0 @Version:Device 0:0
000003840: 3:1: 0 @Delay 1905msec
000003840: 3:1: 0 C3
000003840: 3:1: 0 (Vel= 64
000003840: 3:1: 0 (Duration 2413
000003840: 3:1: 0 (Location TOP&END
000003840: 3:1: 0 (PhoneticByte 1
000003840: 3:1: 0 [a]
000003840: 3:1: 0 (Phonetic Continue
000003840: 3:1: 0 (v1mean 0
000003840: 3:1: 0 (d1mean 8
000003840: 3:1: 0 (d1mean1stNote 20
000003840: 3:1: 0 (d2mean 28
000003840: 3:1: 0 (d4mean 24
000003840: 3:1: 0 (pMeanOnsetFirstNote 10
000003840: 3:1: 0 (vMeanNoteTransition 12
000003840: 3:1: 0 (pMeanEndingNote 12
000003840: 3:1: 0 (Portament off
000003840: 3:1: 0 (ChangrAfterPeak(Decay) 0
000003840: 3:1: 0 (Accent 50
000005280: 3:4: 0 (End 50
000005280: 3:4: 0 @Version:Device 0:0
000005280: 3:4: 0 @Delay 1905msec
000005280: 3:4: 0 C3
000005280: 3:4: 0 (Vel= 64
000005280: 3:4: 0 (Duration 3429
000005280: 3:4: 0 (Location TOP&END
000005280: 3:4: 0 (PhoneticByte 1
000005280: 3:4: 0 [a]
000005280: 3:4: 0 (Phonetic Continue
000005280: 3:4: 0 (v1mean 0
000005280: 3:4: 0 (d1mean 8
000005280: 3:4: 0 (d1mean1stNote 20
000005280: 3:4: 0 (d2mean 28
000005280: 3:4: 0 (d4mean 24
000005280: 3:4: 0 (pMeanOnsetFirstNote 10
000005280: 3:4: 0 (vMeanNoteTransition 12
000005280: 3:4: 0 (pMeanEndingNote 12
000005280: 3:4: 0 (Portament off
000005280: 3:4: 0 (ChangrAfterPeak(Decay) 0
000005280: 3:4: 0 (Accent 50
000005464: 3:4:184 (End
000005464: 3:4:184 PIT -127 (-1%)
000007169: 4:3:449 @Version:Device 0:0
000007169: 4:3:449 @Delay 1905msec
000007169: 4:3:449 BRI
000007200: 4:4: 0 C3
000007200: 4:4: 0 (Vel= 64
000007200: 4:4: 0 (Duration 4445
000007200: 4:4: 0 (Location TOP&END
000007200: 4:4: 0 (PhoneticByte 1
000007200: 4:4: 0 [a]
000007200: 4:4: 0 (Phonetic Continue
000007200: 4:4: 0 (v1mean 0
000007200: 4:4: 0 (d1mean 8
000007200: 4:4: 0 (d1mean1stNote 20
000007200: 4:4: 0 (d2mean 28
000007200: 4:4: 0 (d4mean 24
000007200: 4:4: 0 (pMeanOnsetFirstNote 10
000007200: 4:4: 0 (vMeanNoteTransition 12
000007200: 4:4: 0 (pMeanEndingNote 12
000007200: 4:4: 0 (Portament off
000007200: 4:4: 0 (ChangrAfterPeak(Decay) 0
000007200: 4:4: 0 (Accent 50
000007214: 4:4: 14 (End
000007214: 4:4: 14 BRI
000009600: 6:1: 0 @Version:Device 0:0
000009600: 6:1: 0 @Delay 1905msec
000009600: 6:1: 0 C3
このへんでとりあえず打ち切ってつづく
関連記事

この記事に対するコメント
承認待ちコメント
このコメントは管理者の承認待ちです
【2013/04/14 17:55】 | # [ 編集]

承認待ちコメント
このコメントは管理者の承認待ちです
【2013/04/14 17:43】 | # [ 編集]

承認待ちコメント
このコメントは管理者の承認待ちです
【2013/04/14 17:39】 | # [ 編集]

承認待ちコメント
このコメントは管理者の承認待ちです
【2013/04/14 17:38】 | # [ 編集]


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














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



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