「BMS規格」の編集履歴(バックアップ)一覧に戻る

BMS規格 - (2018/01/28 (日) 21:29:04) のソース

&italic(){注:この記事は書きかけです。}

#contents()
BMSの仕様について書いたページです。記事作成にあたってhitkey氏の[[BMS Command Memo>>http://goo.gl/zsHgms]]を大いに参考にさせていただきました。
BMSの仕様について解説するページであり、BMS作成講座とは区別をつけていますのでその点はご了承ください。

*基本
BMSは主に、
+&bold(){BMSファイル(〜.bms、〜.bme、〜.bmlなど)}
+&bold(){音声データ(〜.wavまたは〜.oggファイルの集まり)}
+&bold(){BGAデータ(〜.bmpや〜.pngなどの画像データの集まりか、あるいは〜.mpegなどの映像データ)}
からなる。だいたいの場合、これらのデータは一つのフォルダにまとめられ、「BMSをダウンロードする」「BMSを発表する」などといったらこのフォルダ単位で扱われる。中には3.が無くて演奏データだけだったり、2.が無くてBGAデータだけだったり、1.2.3.に加えてテキストファイル(Readme)が同梱されているものも普通にあるが、BMSプレーヤー側が「BMSデータ」と認識して読み込むのは基本的にこの3つである。

BMSファイルはおおよそ次のような要素から構成されている。
 *---------------------- HEADER FIELD
 #PLAYER 1
 #GENRE Trance
 
 ・・・
 
 #TOTAL 400
 %URL
 
 #WAV01 kick1.wav
 #WAV02 vocal1.wav
 
 ・・・
 
 #WAVF7 bgm5.wav
 
 #BMP01 white.bmp
 #BMP02 aa.bmp
 
 ・・・
 
 #BMPFF fin.bmp
 
 *---------------------- MAIN DATA FIELD
 
 #00101:4F
 #00104:0102030401020304
 #00111:01010101
 
 ・・・
 
 #07115:D2
- 行頭に必ず書く記号は&bold(){#}、&bold(){%}、&bold(){*}の3種類。
-- このうち最も重要なのが#から始まるコマンド。ヘッダや譜面データを記述するのに使われる。
-- %から始まるコマンドはBMSデータと直接関係はないが、作者のサイトやアドレスを補足するのに使われる。
-- *から始まる文はコメントと見なされ、BMSの実データとして読み込まれない。
- #PLAYERや#WAV??などは「ヘッダ」と呼ばれるデータで、主にBMSに関する基本的な情報(曲タイトルやBPMなど)を設定したり、プレーヤー上で使用する音声ファイルやBGAファイルを指定したりする。
- #00101:〜などの文字列はメインデータで、実際の譜面データが記録されており、プレーヤーはこのデータに沿って音を鳴らしたりノーツを配置したりBGA画像を表示したりする。
BMSプレーヤーが実際の譜面データを読み込むおおまかな流れとしては、
 #WAV01 kick1.wav
でプレーヤーに「kick1.wavを『データ01』として扱うんだな」と認識させ、
 #00111:01010101
でプレーヤーに「1小節目で一番左端の白鍵盤のレーンにデータ01(つまりkick1.wav)が鳴るオブジェを4分音符の間隔で4つ落とせ」と命令している。
(文字で説明するより見たほうが早いんだけど、それっぽい画像が見つからないので誰か用意してくださいorz)

BMSファイルには幾つかの形式がある。基本はどれも上に示したような書き方だが、使えるコマンドやチャンネル(メインデータの項で解説)が増えているのでそれぞれ別の項目として解説していこうと思う。

*BMS
ファイル形式は&bold(){〜.bms}。やねうらお氏が開発したフォーマットであり、最初に作られたBMS形式である。
**ヘッダ
ヘッダに記述するデータ。"&bold(){#コマンド パラメータ}"の形で書く。
***#PLAYER
プレイヤー数(プレイスタイル)を指定する。
- 1〜4の数字を指定する。数字の意味は以下のとおり
-- 1:シングルプレイ
-- 2:カップルプレイ
-- 3:ダブルプレイ
-- 4:バトルプレイ
例)
 #PLAYER 1
- 省略(何も書かない)時は#PLAYER 1(シングルプレイ)とみなされる。
// - 名無しBMSプレーヤは無視するらしい。

***#GENRE
曲のジャンル名を文字列で指定する。
例)
 #GENRE HIPHOP
- 省略時は空白になる。

***#TITLE
曲のタイトル名を文字列で指定する。
例)
 #TITLE cruse

***#ARTIST
作曲者名を文字列で指定する。
例)
 #ARTIST gomd

***#BPM
曲のテンポの速さを数字で指定する。
例)
 #BPM 120
- 省略時は#BPM 130と見なされる。(ナナシグルーヴでは150)
// - 小数点以下2ケタまで有効?

***#PLAYLEVEL
難易度を数字で指定する。
例)
 #PLAYLEVEL 5
- 省略時は#PLAYLEVEL 3とみなされる。
- 0を指定することも可能。その場合プレーヤーによっては「?」と表示される。

***#RANK
判定の辛さを数字で指定する。
- 0〜4の数字で指定
-- 0:veryhard
-- 1:hard
-- 2:normal
-- 3:easy
-- 4:very easy
例)
 #RANK 3
- あくまでも相対的な辛さであり、同じRANKでもプレーヤーによって実際の判定は変わってくる。

***#VOLWAV
BMS全体の音量の大きさを数字で指定する。
- 単位は%。
例)元の音量の150%(1.5倍)の大きさにする
 #VOLWAV 150

***#TOTAL
ゲージの増加のしやすさを数字で指定する。
- 設定した値=「全ノーツで最も良い判定を取った時のゲージの増加量」になる。
- 数字が大きいほどゲージの増加量が大きくなる。
例)
 #TOTAL 300
- 省略時にもTOTALは割り当てられるが、その値はプレーヤーによって異なる。
-- TOTAL値を設定してもプレーヤー側のゲージ増加量の計算のしかたが違えば、当然ゲージの増加量はプレーヤーによって変わってくる。再現性を考えるなら「△△のプレイヤー推奨」とか書くのがいいかも。
 
***#WAV??
音声ファイル定義。繰り返し使う。
- ?には&bold(){0〜9、A〜F}までの文字を1つ入れる。ただし&bold(){00は使えない。}
- パラメータには&bold(){音声ファイルの名前.wav}を指定する。
-- &bold(){実際のファイルの拡張子が.oggでも定義では.wavを使用する。}なぜこのような仕様になっているのかは謎。というか誰か教えて下さい。

例)データ01にkick1.wavを指定
 #WAV01 kick1.wav
- データ(01)と音声ファイル(kick1.wav)は1対1に対応しており、1つのデータに複数の音声ファイルを定義することはできない。
 #WAV01 kick1.wav
 #WAV01 bass1.wav (データがかぶるのでダメ)
 #WAV02 bass1.wav (番号を変えればOK)
- データは01〜FFなので、使える音声定義は最大で255となる。つまり最大255個の音声ファイルを扱える。
-- 拡張版では01〜FZ(575個)あるいは01〜ZZ(1295個)まで定義できるようになった。
- 指定した音声ファイルはBMSファイルと同じディレクトリ(フォルダ)内に置かないと読み込めない。指定した音声ファイルが見つからない場合は音の鳴らないデータとなる。(プレーヤーによって違う?要検証)
- メインデータの項目を見ればわかると思うが、#WAV00はオブジェ間の空白を表すものとなるため使えない。
// 同時発音数と1つの音声ファイルの複数定義について言及

***#MIDIFILE
MIDIファイルをBGMとして指定する。
例)
 #MIDIFILE bgm.mid
- 現在はほとんど使われていない。

***#BMP??
BGAに使う画像ファイル定義。繰り返し使う。
- ?には&bold(){0〜9、A〜F}までの文字を1つ入れる。
- パラメータには&bold(){画像ファイルの名前.bmp}を指定する。
-- &bold(){実際のファイルの拡張子が.pngだろうが.jpegだろうが定義では.bmpを使用する。}なぜこのような仕様になっているのかは謎。というか誰か教えて下さい。
例)データ01に画像ファイルwhite.bmpを指定
 #BMP01 white.bmp
- #BMP00にはミスレイヤー(プレイ中にミスした時に表示する画像)を指定する。(#WAV00と違うとこ)
-- 使えるデータは00〜FFの256個(拡張版では00〜FZ、00〜ZZまで)
- 指定した画像ファイルはBMSファイルと同じディレクトリ(フォルダ)内に置く必要がある。
- BGAを使わないのであれば定義しなくてよい。まるごととばしてもOK

**メインデータ
譜面にオブジェを配置したり、小節線の長さを決めたりするデータ。"&bold(){#XXXYY:パラメータ}"の形で書く。ヘッダと違い":"記号が間に入るので注意。
- XXX:何小節目のデータかを数字3ケタで指定する。
- YY:「&bold(){チャンネル}」と呼ばれる、パラメータの役割を決める2ケタの数字(拡張版ではアルファベットも含む)を指定する。
-- 01:BGM(自動的に再生する音データ)を配置する
-- 02:1小節の長さを変える
-- 03:BPMを変える。(BPM1〜255まで)
-- 04:BGA(真ん中で動いてるパラパラアニメのやつ)を配置する
-- 05:オブジェ(譜面で上から降ってくるやつ)の画像を変更する
-- 06:ミスレイヤー(POOR判定時に出てくる画像のこと)を変更する
-- 07:スプライト画像(BGAの上に重ねて表示する)を配置する。
-- 11〜17:シングルプレイ時に各レーンに降ってくるオブジェを配置する(ダブルプレイでは左側のレーン)
-- 21〜27:ダブルプレイ時に右側の各レーンに降ってくるオブジェを配置する
- パラメータ:チャンネルによって書くことが変わったりするが、基本的にはヘッダの&bold(){#WAV??}や&bold(){#BMP??}で定義したデータをすきまなく書き並べる。
例)1小節目、左端の鍵盤にデータ01、02、A7、05を4分間隔で配置する
 #00111:0102A705
- パラメータのデータの数がn個のとき、配置はn分音符の間隔になると考えてよい。
 #00111:0101010101010101
この場合は8分間隔(縦連打に近い)になり、
 #00111:010101010101
この場合は6分間隔(跳ねリズム)になる。
- データを何も置かない部分(休符)は00として表現できる。
 #00111:0101010001010100
この場合は三連打が2回降ってくる。"01 01 01 00 01 01 01 00"と分けて考えれば多少把握しやすくなると思う。

小節を増やしたい場合は順次#00211:〜、#00311:〜と書いていけばよい。また他の鍵盤にオブジェを置いたりBGMを設定する場合は#00112:〜、#00101:〜といった感じで追加する。メインデータではこれら3要素を組み合わせて譜面を作っていく。
 #00101:01
 #00111:0000000000000000000000000000001A
 #00113:00000000000J0K1M
 #00114:0000000000000I0000000000000L0000
 #00115:0H
 
 #00212:0O2Q0000
 #00214:000P000R00000000
 #00216:0000001S
 
 ・・・
まるごとデータがないとそのチャンネルは空白として扱われる。例えば上記のデータでは#00211:〜がないので左端の鍵盤には2小節目は何も降ってこないことになる。
// 各チャンネルの説明
// *拡張定義
// **ヘッダ
// ***#MAKER
// ***#BPM??
// ***#EXBPM
// ***#DEFXRANK
// ***#EXRANK
// ***#LNTYPE
// ***#LNOBJ
// ***#OCT/FP
// ***#OPTION
// ***#TEXT
// ***#COMMENT
// ***#WAV?? (拡張版)
// ***#WAVCMD
// ***#EXWAV
// ***#CDDA
// ***#BMP?? (拡張版)
// ***#EXBMP
// ***#BGA
// ***#@BGA
// ***#BACKBMP
// ***#POORBGA
// ***#SWBGA
// ***#BANNER
// ***#ARGB
// ***#STAGEFILE
// ***#VIDEOFILE
// ***#VIDEOf/s
// ***#VIDEOCOLORS
// ***#VIDEODLY
// ***#STOP??
// ***#STP
// ***#ExtChr
// ***#RANDOM
// ***#IF
// ***#ENDIF
// ***#SETRANDOM
// ***#ELSE
// ***#ENDRANDOM
// ***#SWITCH
// ***#SETSWITCH
// ***#ENDSW
// ***#CASE
// ***#SKIP
// ***#DEF
// ***#path_wav
// ***#MATERIALSWAV
// ***#MATERIALSBMP
// ***#CHARFILE
// ***#DIVIDEPROP
// ***#SONG
// ***%URL
// ***%MAIL
// ***Materials

// *BME
// *BML
// *BMX

*参考リンク
BMS Command Memo:[[(短縮URL)>http://goo.gl/ArYbSa]]
BMS形式(音ゲー作成マニュアル):http://www.charatsoft.com/develop/otogema/page/04bms/bms.htm
wiki.bms.ms(WebArchive):http://web.archive.org/web/20070619021620/http://wiki.bms.ms/Bms:Format
BMS関連資料:http://unhappyangel.tripod.com/bms/
BMS制作のすすめ:http://www9.atwiki.jp/coolnaurl/

*コメント欄
#comment_num2