「BMSとは何か」というレベルの解説はしません。
ここではBMSを作るにあたって知っておく必要のある、BMSの仕様をいくつか書いておきます。

BMSの規格仕様についてはこのサイトで深く考察されており、このページでもこのサイトからいくつか引用しています。もし興味があればご一読ください。

 BMSではコマンド*1によって記述された一連の命令を1行とし、それを連ねることでBMS全体を構成します。
コマンド行は必ずシャープ#で開始し、以下の文法を取ります:
#COMMAND␣contents
COMMANDで表されるのがコマンド部、半角スペース1個を開けて記述されたcontentsがその中身となります。たとえばタイトル定義は次のように書きます:
#TITLE たのしいピクニック
"#"で始まらない全ての行はコメント行として解釈され、BMSの再生には影響しません。おそらく#を含まなければBMS内にアスキーアートを入れ込むことも可能ですが、予期せぬエラーを招きかねないので、やめたほうがよいでしょう。

以下に、重要なコマンドを列挙します。列挙されないコマンドは、BMSEを使って制作する限り気にする必要はありません




#PLAYER

 1がSP譜面、2がCP(カップルプレイ)譜面、3がDP譜面、4がバトル譜面を表しますが、ほとんど死にコマンドとなっており、SP譜面なら1、DP譜面なら3にするという決まりくらいしか現在は残っていません。
LR2に至っては実際に使われているレーンによってSPかDPかを判断するため、完全に無視されるコマンドになっています。しかし例えばBMSEではDP譜面を作る場合にここを変更する必要があるので、ちゃんと設定したほうがよいでしょう。
カップル(#PLAYER 2)とバトル(#PLAYER 4)はBMSプレイヤー側で表現可能かつそのほうが都合がいいため、使ってはいけません。BMSEでいえば2 Playerではなくdouble playにしましょう。

#RANK

 譜面の判定の種類です。GREAT判定の幅が、0でVERY HARD(とても狭い)、3でEASY(とても広い)となります。名前からすればNORMAL判定(#RANK 2)が標準に思われますが、昨今のBMS界隈ではEASY(#RANK 3)が多いようです。BMSEで空のファイルを開くとデフォルトでEASY判定にされているのが大きな要因に思われます。
いわゆる発狂BMSなどのノーツが非常に多い譜面でHARD(#RANK 2)以上の判定を利用することは推奨しません。高密度譜面は正確に演奏するよりは降ってくるオブジェを余すところ無く叩くのが目的であり、そこに辛判定を導入するととたんにクソゲーと化すでしょう。逆に、密度は低いがクセのあるリズムであったり、連打を頻繁に叩かせるような譜面では、EASY判定ではその譜面の難しさを十分に表現できない場合もあり、VERY HARD(#RANK 0)が歓迎される傾向にあるかもしれません。

#GENRE

#TITLE

#ARTIST

 上からBMSのジャンル名、タイトル、アーティスト名を表します。ジャンルは省略してもよさそうですが、タイトルとアーティストは必ず入力するべきです。

#SUBTITLE

#SUBARTIST

 こちらは後期になって拡張されたコマンドです。前者はサブタイトルを、後者はサブアーティスト(作曲者に対して譜面作者やBGA作者など)を記述するためのコマンドです。LR2の曲決定画面ではSUB情報は表示されません。
LR2では#TITLEに特定の文字が含まれるときそれをサブタイトルとして扱う仕様があります。それを積極的に利用するなら#SUBTITLEは必要ないかもしれません。
BMSEではどちらも拡張命令として扱われるので、利用するなら直接テキストに打ち込む必要があります。

#COMMENT

 BMSに対するコメントです。「ひとつの ものごとに とらわれると すべてを みうしなってしまう にゃ」みたいなやつです。
もっぱらPMSについて使います。ふぃーりんぐぽみゅなど一部のPMS特化型本体で使われるに留まります。LR2では一切参照されず、BMSEでも拡張命令扱いです。当wikiはBMS制作に関する解説サイトですが、PMSも同様の手順で作れるということで一応載せておきます。

#BPM

 楽曲の開始前のテンポを記述します。途中でテンポを変化させるような命令が無ければ曲は最初から最後までこのテンポで演奏されます。曲構成の根本的な部分なので必ず入力するべきです。

#PLAYLEVEL

 譜面の難易度です。一般的に5keyなら8、7keyなら12、9buttonなら50が上限とされています。BMSEでこの欄をプルダウンボックスから選ぼうとすると1から8と0しかないので直接数値を入れたほうがよいでしょう。レベル0は基本的に「難度判定不能」を意味し、1よりも簡単という意味にはなりません。レベル0はレベルソートで最初にくるため、筆者としてはできるだけ利用しないことを推奨します。
例えば7keyで12以下の難易度を付けるなら、なるべく"本家"の基準に則ったほうがよいでしょう。設定された数字と実際の難易度があまりにかけ離れているとBMSイベントでは減点の対象になることがあります。

#DIFFICULTY

 譜面の種類(NORMAL,ANOTHERなど)を数値で記述します。普通は1から5までの整数で、数値の意味は以下の通りです。
1 : BEGINNER (通常よりも簡単な初心者用譜面)
2 : NORMAL (標準の譜面)
3 : HYPER (中級者向けの難しい譜面)
4 : ANOTHER (9buttonの場合は EX、上級者向けのとても難しい譜面)
5 : INSANE (最近の"本家"でいう LEGGENDARIA、いわゆる発狂譜面)
省略することもできますが、BMSプレイヤーがその譜面をどの種類と判定するのか分かりづらくなり、譜面作者の意図しない位置に置かれる可能性もあるため、特別な理由が無い限り記述することを推奨します。
BMSEでは拡張命令扱いであり、自分でテキスト上に書き込む必要があるため、もしかしたらこのコマンドに気づかない人もいるかもしれません。
LR2でレベルソートを行う場合、#DIFFICULTY 5の譜面はレベル値に関係なく最後に置かれます。例えば以下のような譜面が一つのフォルダ内にある場合:
① #PLAYLEVEL 10 #DIFFICULTY 2
② #PLAYLEVEL 5  #DIFFICULTY 4
③ #PLAYLEVEL 2  #DIFFICULTY 5
LR2でレベルソートを行うと、②→①→③の順に並びます。
前述の#PLAYLEVEL 0を使いたい場合、併せて#DIFFICULTY 5としておくことで、その譜面がレベルソートで最初に(レベル1の譜面よりも前に)来ることを防ぐことができます。
#DIFFICULTY 0難易度未定義になります。LR2では難易度フィルタ(NORMALだけ表示、HYPERだけ表示など)を使ったとき表示されず、レベルの色は灰色になります(スキンによっては表示されません)。隠し譜面には使えるかもしれません。

#TOTAL

 演奏レーンに置かれたノーツを全て最高の判定(P.GREAT)で処理した場合に増加するグルーブゲージの量です。つまり、1つのノートをP.GREAT判定で叩いたときのゲージ回復量は TOTAL÷NOTES(%) になります。通常GREAT(黄グレ)の場合はこの半分程度になります。例えば1000ノーツで #TOTAL 400 のBMS譜面があった場合、250ノーツ光らせるとゲージが100%回復する、ということになります。
設定しないとゲージが回復できなかったり、簡単になりすぎたり、プレイヤーによってえらく変わってしまうため、必ず記述するべきコマンドです。BMSEでは「拡張」タブにあるのでしっかり確認しましょう。
どれくらいのTOTALが妥当かというのは、少々難しい問題ですので、実際に自分でプレイしてみてちょうどいい値を見つけたり、こことかこことかを参考にしてみてください。geocities閉鎖に伴い参照できなくなったため筆者が使っている計算式を下に書いておきます。
TOTAL = INT(760.5×NOTES÷(NOTES+650))
計算の結果 TOTAL < 260 になった場合は TOTAL = 260
INTは小数点以下切り捨てという意味です。
この計算式だとノート数に対するTOTAL値は以下のようになります。
NOTES TOTAL
<=339 260
500 330
1000 460
1500 530
2000 573
↓計算機
NOTES: TOTAL:
この式は主に2000ノーツ以下の譜面に対してはある程度うまく働きますが、それを大きく超える場合はノート数の増加に対してTOTALの伸びが鈍すぎる*2ため、適宜増やしたほうがよいです。

#STAGEFILE

 主に曲決定画面で表示される大きな一枚絵(普通は640*480)の定義です。無くても構いませんが、あったほうが選曲時の期待度が高まりそうな気がします。BGAがあるなら用意したほうが無難でしょう。記述するのはファイル名ですから、当然.pngや.bmpといった拡張子が必要です。

#BACKBMP

 本来はPMSなどのプレイ画面の背景として用意する画像ですが、役割がSTAGEFILEと被っていたり、7keyなどではBGAがメインだったりであまり使われないコマンドです。
RED BELTというLR2の拡張スキンでは使われなくなったこのコマンドをプレイ前に表示されるタイトル画像として利用しています。特殊なフォントを使ったり、タイトルの代わりに絵を表示したい場合などに利用できます。その用途についてはこちらを参照してください。

#BANNER

 主に選曲画面で使われる楽曲のバナー画像の定義です。前述のRED BELTでは選曲画面にバナーも表示しますし、LR2標準の選曲スキンでも有効です(もちろんbeatorajaでも)。STAGEFILE同様無くても構いませんが、あれば曲の雰囲気をより伝えやすくなります。
BACKBMPともどもBMSEでは拡張命令扱いなので、テキストに直接書き込む必要があります。

#CHARFILE

 ふぃーりんぐぽみゅなど一部のBMSプレイヤーで使われる、キャラクターファイル(.chp)を指定するためのコマンドです。作り方を簡潔にまとめたサイトがあったと思うのですが、探しても見当たりません。残念。

#WAVxx


 音声ファイルの定義です。BMSの譜面は実際には定義情報の羅列であり、BMSプレイヤーはそれを読み取って対応するインデックスの音声を再生することで意図した音楽を構成します。もちろん必須ですが、BMSEでは画面右側にある定義リストに、エクスプローラーから音声ファイルをD&Dすることで自動的に記述してくれますし、BMHelperなどを使う場合も定義リストは自動で生成してくれるので、今や自分で手打ちする必要はほとんどありません。
存在しないファイル名を指定すると(少なくともLR2は)単に無視します。無音ノートを使う場合に「#WAVZZ muon」などと定義してそれを使うようにすれば、あるいは分かりやすいかもしれません。
以降の全てを含む定義情報は、一般的に01からZZまでの36進数で表されます(00は空白)。したがって、現在のBMS規格仕様では1295個が定義数の上限となり、数が増えがちなWAVは特に注意する必要があります。

#BMPxx

#BGAxx

 BGA表示用の画像(映像)ファイル定義です。こちらもBMSEではD&Dでまとめて定義できるので直接入力の必要はあまりありません。
昨今ではBGAを1本の動画にして、せいぜいミスレイヤーを追加するくらいが多く、この定義欄が埋まる事態は起きにくくなっているかと思います。
"#BGA"は使い方が複雑なので、必要ならこちらを参照してください。動画BGAが主流になった現在ではまず使われないコマンドです。

#BPMxx

 8ビット整数で表記できないBPMを使うときに利用する定義です。BMSEでは設定されたBPMが1~255の範囲外である場合に自動的に追加されます。
ある小節で1000bpmになったあと、一旦150bpmになり、そのあとまた1000bpmになるようなテンポ変化の場合、#BPM01 1000のような定義を使い回せばいいと感じますが、BMSEでは全て別扱いになります。頻繁にテンポ変化が行われる曲の場合、実質的に256以上や小数テンポへの変化は1295回までに制限されますのでご注意下さい。テンポ変化を直接書き込む場合はこの限りではありません。

#LNOBJ

 ロングノートの終端を表す定義インデックス(ZXなど)を書きます。
BMSには2種類のロングノート定義が存在します。詳細は割愛しますが、バグ回避や付け外しの容易さもあって、筆者はもう一方の方式よりこちらを推奨します。ただし、#WAV定義を無駄に一つ潰す必要があるため、定義数がギリギリの楽曲においてはもう一方の方式を採用せざるを得ない状況になる場合もあります。詳細は譜面制作?のロングノート節を参照してください。

#RANDOM

#IF

 不確定性の音楽を生み出す命令です。#RANDOM x(1以上の整数)で1からその数までの乱数を生成し、#IF x(1以上の整数)でそれぞれの場合に解釈する命令を記述します。これについて詳細に解説するのは筆者の手には余るので、もし使いたければここなどを参照してください。
筆者の知る限り#RANDOMを正常に扱えるエディターは存在しません。もし使うのであればテキストエディタで直接編集する必要がありますが、この世にはたくさんの驚異的なRANDOM BMSが存在します。
当wikiではこれ以上触れません



次:作曲
最終更新:2021年05月24日 16:11
添付ファイル

*1 上のサイトに倣って。一般的にそう呼ばれるかは知りません

*2 計算式をよく見ると分かりますが、ノート数が増え続けるとTOTAL=760に収束します。