譜面の作り方

ここではゲーム本編で使える譜面データの作り方を紹介。
正直、少し面倒くさいです。
それでも興味があれば、現在公開中の追加楽曲を改造するなどの練習をしてから
作ってみることをおすすめします。

注意事項

このサイトで配布しているデータを元に譜面を作るのは自由です。
更に譜面データを配布するのも自由。
ですがネット上で購入した音楽など、自分が著作権を持っていない音源を同封して配布すると
音楽利権団体に目を付けられるので 著作権法に引っかかるのでやってはいけません(最重要事項)。
もちろん、自分で作った楽曲を同封することは自由ですし、二次配布の許可が降りれば大丈夫です。

あくまで問題となるのは音源を含めて配布した場合なので個人的に楽しむ分には問題ありません。
そしてニコニコ動画など原盤の利用が許諾されたサイトで公開するのもセーフ。
音源を同封せず譜面データだけ配布するのも大丈夫だけどあまり意味がないかも。
そもそも音源の入手方法がセーフかどうかはまた別な話。

楽曲データの構成

追加楽曲をダウンロードすると分かりますが、
楽曲データは以下の3ファイルから構成されています。
  • 音源データ(wav,mp3,ogg,midi形式)
  • 楽曲データ(jmd形式)
  • 譜面データ(jmf形式)
ここで重要なのは楽曲データ・譜面データは共にテキスト形式だということ。
なのでwindous付属のメモ帳等で開くと、簡単に編集できます。

音源は作りたい曲の音源を上記4形式のどれかに変換してください。
おすすめはoggかmidi。
ただしmidi形式は制作過程で使う数値の出し方が異なるので注意。
(赤字はwav,mp3,ogg形式の説明青字はmidi形式の説明)

楽曲データの構成

というわけでまずは拡張子がjmd形式のファイルを開いてみましょう。
それっぽい文字列の後にいくつか数字が並んでいるはずです。
というわけで、各行の解説。 ちなみにこれらは順番を間違えると機能しないので注意!
1行目 ゲーム中に表示される曲名 曲名
2行目 ゲーム中に表示されるサブタイトル 歌っている人の名前など
クラシックなら作曲者名
3行目 著作権表記 作中では素材元サイト名
サークル名等でも可
4行目 音源ファイル名 同フォルダ内のみ
サブディレクトリ無効
5行目 譜面ファイル名 同フォルダ内のみ
サブディレクトリ無効
6行目 表記BPM 選曲画面で表示される数値
実は文字などを使っても問題ない
7行目 判定のゆるさ タイミングのズレの許容幅の基準値
(単位:ミリ秒)
(単位:tick数)
8行目 試聴スタート地点 スタート地点のタイミング(単位:ミリ秒)
スタート地点のタイミング(単位:tick数)
9行目 「まったり」難易度表記 譜面に応じてご自由に
10行目 「それなり」難易度表記 譜面に応じてご自由に
11行目 「なにこれ」難易度表記 譜面に応じてご自由に

判定のゆるさについて

音符をクリックしたときの評価に関わる、地味だけど重要な数値。
たとえば200ミリ秒に指定した場合、音符が実際のタイミングと±0.20秒くらいズレていてもBAD判定にはならない。
(難易度「まったり」で上下の位置が完璧にあっていた場合)
「それなり」だとこの数値の0.85倍、「なにこれ」だと0.75倍になる。
同じく200ミリ秒の場合、「それなり」だと±0.17秒、「なにこれ」だと±0.15秒。
200ミリ秒が標準で、これより大きいと判定が甘めになり、
逆に小さいと厳しくなる。

mp3・ogg音源の場合は200が最適。
厄介なのはmidi音源の場合。
200ミリ秒分のtick数は曲のBPMや分解能で変わる。
結論だけ言えば BPM×分解能÷300 の値を計算すると出る。
特に分解能が480のとき BPM×1.6 となる。
尚、曲中でBPMが変わる場合、遅い箇所では判定が甘くなり、
速い個所では判定が厳しくなるので注意。

譜面データの構成

続いて拡張子がjmf形式のファイルを開いてみましょう。
たくさんの数字と@マークで始まる英単語と数字、
たまにメモ書きがあるはずです。
譜面は数字で表記され、@マークで始まる行がコマンド行です。
というわけでまずは数字の意味から。
0休符
1ランダムに音符が出現
2前の音符と似たような高さに向かって
ランダムに出現
3前の音符完全に同じルートで出現
ゲーム中に同じ高さにまとまって音符が来たり
同じルートで連続して来るのは偶然ではなく、実は譜面によるものなんです。
もちろん、1が連続していてもたまたま似たようなルートになることはありますが・・・。
続いて@コマンドについて。
@start_easy「まったり」譜面スタート
@start_normal「それなり」譜面スタート
@start_hard「なにこれ」譜面スタート
@interval:音符の間隔を変更
(単位:ミリ秒)
(単位:tick)
@speed:音符が画面に出現してからカーソルまでの移動時間
(単位:ミリ秒)
(単位:tick)
@wait:次の音符の出現を遅らせる
(単位:ミリ秒)
(単位:tick)
//メモ行 その行の指示は無視される
この内@interval:と@speed:と@wait:のコマンドは冒頭で使うことが多いです。
ほとんどの音源ファイルの場合、冒頭に空白部分があるので
その長さだけ@wait:で調整。
曲の店舗に合わせて@interval:を設定、そこから@speed:を指定するのですが・・・。

wav,mp3,ogg形式の場合

まず、楽曲の適当な部分の長さをSound Engine等の波形編集ソフトを使用して計測してください。
たとえば16拍分の長さが9.100秒くらいとします。
その場合、1拍の長さは9.100÷16=0.56875(秒)。
そこから4分音符主体の曲なら@interval:568.75、
8分音符主体なら@interval:284.375にできればタイミングが合います。
ただし、@interval:の値は整数しか使えないので、実際には工夫が必要。
例えば前述で8分主体の場合、285で3小節の後に284で5小節、の繰り返しにするなど。

ちなみに、曲のテンポが変わる箇所ではこの数値も変わります。
このとき、@speed:の値を変えないと見かけのスピードは同じまま、タイミングだけが変わっていきます。
頻繁にテンポが変わる曲だと、設定するのが少し面倒かも。

midi形式の場合

midi形式の場合、一番重要なのが分解能。
これはCherryなどのmidi編集ソフトを使うとわかります。
(Cherryの場合、編集→ファイル情報編集→分解能から)
分解能とは、基本的に4分音符1拍分のtick数のこと。
例えば分解能が480なら、4分音符主体の場合@interval:480、
8分主体の場合は@interval:240にすればタイミングが合います。

ちなみに、曲のテンポが変っても時間当たりのtick数は変わらないのでそのままでOK。
ちなみにスピードは曲のテンポと一致します。
テンポが変化するとき、全ての音符のスピードも変化します(例:蒼天疾駆の冒頭)

@speed:は4拍分の時間を指定するのが基本。
この数値は大きくなるほど音符が遅くなり、小さくなると速くなります。
ギミックとしてわざと@speed:の値を変えるのも面白いかも。


©sinusoidal wave 2012