メインパネル

メインパネルは、オブジェクトを配置するための罫線領域です。以下の要素を含んでいます: 補助線 小節線 水平スクロールバー 垂直スクロールバー レーン情報 小節番号 BPM 変更レーン BPM 変更レーン BPM 変更レーン STOP レーン STOP レーン STOP レーン 演奏領域のレーン 演奏領域のレーン 演奏領域のレーン 演奏領域のレーン BGA レーン BGA レーン BGA レーン LAYER レーン LAYER レーン LAYER レーン POOR レーン POOR レーン POOR レーン POOR レーン POOR レーン BGM レーン BGM レーン BGM レーン BGM レーン 小節番号小節線補助線垂直スクロールバー水平スクロールバーレーン情報BPM 変更レーンSTOP レーンBGA レーンLAYER レーンPOOR レーンBGM レーン演奏領域のレーン

垂直方向の要素の目次
水平方向の要素の目次
メインパネルの操作

メインパネルは、レーン (X 軸) とグリッド (Y 軸) から構成されます。

レーンは性質上 4 種類に分けられます。BPM、演奏領域、BGA、BGM です。

レーンラインとグリッドラインで区切られた格子 (グリッド) ひとつひとつに対して、オブジェクトを配置できます。

#000 より前方、#999 より後方、BPM 変更レーンより左方、BGM レーン 32 番より右方】にはオブジェクトを配置できません。移動や貼り付けなどによって領域外に溢れたオブジェクトは、選択状態を解除したとき消滅します。

コンテキストメニュー「ここに 1 小節挿入」は、クリック地点小節を含む以降の小節全体を後方に 1 小節分スライドします。クリック地点には空の 4 拍子小節が挿入され、元々 #999 にあった内容は押し出され消滅します。

コンテキストメニュー「この小節を削除」は、クリック地点小節を削除し、以降の小節全体を前方に 1 小節分スライドします。#999 には空の 4 拍子小節が補填されます。


メインパネル垂直方向の要素

小節番号 (#000#999)

“#” (U+0023 'NUMBER SIGN') に後続する 3 桁の 10 進数整数は、譜面の小節番号を表します。

小節線から次の小節線の手前までを 1 小節とします。開始小節線の描画位置を基準として、小節番号が表示されます。

各小節の長さは、オブジェクトパネル “拍子” タブ】から変更できます。

「メインパネル上にオブジェクトが存在する範囲内で、最も後方にある小節」を譜面末尾とします。#000 から末尾までの譜面全長最大 16 小節分のスクロールマージンを加えた区間が、垂直スクロール可能範囲です。これにメインパネル高さを含めた描画領域が、小節の表示可能範囲となります。

たとえば最後のオブジェクトを #064 に配置して End キーを押すと、拍子表示高さが何であれ、現在位置#081 になります。

#999 より後方の領域にはオブジェクトを配置できません。

小節線

メインパネル Y 軸を 1001 の部分に分断している、左端から右端まで描画される高さ 1 ピクセルの水平線は、

小節の区切りを表す白線です。小節線は常に表示されます。

小節線は、ほとんどの場合、ゲームプレイ時にも表示されます。小節線を表示しない BMS アプリケーションは、otama [http://www.asahi-net.or.jp/~VG5M-OBT/otama.html] (外部リンク)ふぃーりんぐぽみゅせかんど [https://pmcc.nekokan.dyndns.info/] (外部リンク)Ninja Agent Galli [https://web.archive.org/web/20160311123053/http://ninjaactionteam.sakura.ne.jp/sakuhin_bmsplayer.html] (外部リンク) くらいです。また、bemaniaDX [https://web.archive.org/web/*/http://bemaniadx.s3.xrea.com/] (外部リンク) は小節線を非表示にする環境オプションを持ちます。

小節線の位置は拍子に依存します。既定値は 4/4 拍子です。

小節線は小節の先頭となります。小節線の真上にあるオブジェクトは必ず「1 拍目」(グリッド座標 0/n) となります。

小節線が小節の先頭にならない例外もあり、#999 の末尾線のぴったり真上にオブジェクトを配置したとき、そのグリッド座標は “n/n” と表示されます。

#999 末尾線上のオブジェクトを保存すると、#999 に 192 分音符が +1 されたリズムでソースに記述されます。4/4 拍子小節なら 193/192 になります。

保存後の譜面を開き直すと、リズムが変更されます。#999 末尾線上オブジェクトが 193/192 のリズムだったなら、グリッド座標は 191/192 として解釈されます。

補助線

各小節をいくつかの部分に分断する、左端から右端まで描画される高さ 1 ピクセルの水平線は、

配置する際の目安、ガイド、ルーラーです。既定の配色なら、小節線より暗く、グリッドより明るく表示されます。

補助線は、オブジェクトの書き込みや移動量などに一切影響を及ぼしません。

補助線の間隔は【ツールバー → 補助】から変更します。値の単位は「4/4 拍子における 1 小節」の n 等分です。

補助」ドロップダウンリストの値が “NONE” なら、補助線を表示しません。

Grid

左端から右端まで描画される無数の水平線によって構成され、

オブジェクトを配置するリズムの単位となる、小節を分割する罫線です。Grid の間隔は【ツールバー → Grid】から変更します。値の単位は「4/4 拍子における 1 小節」の n 等分です。

Grid を変更すると、罫線の間隔が変わります。グリッドライン (水平線) とレーンライン (垂直線) で仕切られた各領域に、オブジェクトを 1 個配置することができます。Grid の値が大きいほど、オブジェクトを細かいリズムで配置することができます。

  • Grid の値が “FREE” のとき、グリッドラインは表示されません。自由な間隔でオブジェクトを配置することができます。
  • Grid FREE は、内部的には 192 分音符間隔です。これは BMSE の分解能です。BMSE でこれ以上細かいリズムを編集することはできません。
  • グリッドの座標は、ステータスバーから確認することができます。

192 分音符” はリズムゲームとしての便宜上の表現であり、音楽的には 2n 等分リズムを基準に “128 分 3 連符” あるいは “64 分音符の 3 等分” のように表現するのが正当なのだそうです。ヘルプ筆者が混乱に陥るであろうことが明らかなので、この文書では “192 分音符” を採用しています。

垂直スクロールバー

メインパネルを垂直方向にスクロールさせて、表示されていない領域を表示します。垂直スクロールバーはメインパネル上に常に表示されます。

垂直スクロールバーの トラック (ノブ以外の部分)

トラック高さは、メインパネルの表示可能範囲の全長を表します。

表示可能範囲 = 譜面全長 + スクロールマージン (最大 16 小節分) + メインパネル高さ
最小: #000#015 (計 16 小節) + 16 小節 + メインパネル高さ
大: #000#989 (計 990 小節) + 10 小節 + メインパネル高さ
最大: #000#999 (計 1000 小節) + 0 小節 + メインパネル高さ

トラックを左クリックすると、ノブ位置からクリック位置の方向に、現在の VScroll 設定値の 8 倍量ずつ、メインパネルを垂直スクロールします。クリックし続けると連続スクロールします。スクロール量の初期値は「192 分音符 × 96 個分 × 8 倍量」(4/4 拍子における 4 小節分)。

Windows 2000/XP 以降でトラックを [Shift + 左クリック] すると、クリック位置に相当する小節まで、メインパネルを瞬時にスクロールします。

垂直スクロールバーの ノブ (スライダー/つまみ)

ノブは、「メインパネルの表示可能範囲の全長における、現在スクリーンに表示されている範囲」を表します。ノブを左ドラッグすると、メインパネルの現在の表示領域を、ライブスクロールします。

垂直スクロール可能範囲の小節数などに応じて、ノブのドラッグスクロール量が変動します (垂直スクロールバー分解能自動切り替え機能?)。設定を初期化した直後の状態における、垂直ノブのドラッグスクロール 1 単位量は以下の通りです。

BMSE 起動直後の白紙状態:
192 分音符 × 約 17 個分 (16 ~ 18 個分)
全小節 64/4 拍子で #999 まで表示した状態:
16 分音符 × 648 個分

ノブ高さは、「メインパネルの表示可能範囲の全長における、現在スクリーンに表示されている範囲が占める割合」を表します。描画領域サイズ、VScroll 設定値、垂直スクロール可能範囲の小節数、などの要素の変動に応じて、ノブ高さは自動伸縮します。これは、表示表示高さ・BMSE ウィンドウのサイズ・譜面全長などからの影響を受けます。

垂直スクロールバーの上下 スクロールボタン

スクロールボタンを左クリックすると、現在の VScroll 設定値の 1 倍量ずつ、メインパネルを垂直スクロールします。クリックし続けると連続スクロールします。スクロール量の初期値は「192 分音符 × 96 個分 × 1 倍量」(4/4 拍子における半小節分)。


メインパネル水平方向の要素

水平スクロールバー

メインパネルを横スクロールさせて、表示されていない領域を表示します。水平スクロールバーはメインパネル上に常に表示されます。

水平スクロールバーの トラック (ノブ以外の部分)

トラックを左クリックすると、ノブ位置からクリック位置の方向に、現在の表示幅における 4 レーン分、メインパネルを水平スクロールします。クリックし続けると連続スクロールします。

Windows 2000/XP 以降でトラックを [Shift + 左クリック] すると、クリック位置に相当するレーンまで、メインパネルを瞬時にスクロールします。

水平スクロールバーの ノブ (スライダー/つまみ)

ノブを左ドラッグすると、メインパネルの現在の表示領域を、ライブスクロールします。

ノブ幅は、BMSE ウィンドウサイズ、表示幅プレイモードキー表示・キー配置などに応じて自動伸縮します。

水平スクロールバーの左右 スクロールボタン

スクロールボタンを左クリックすると、現在の表示幅における 1 レーン分、メインパネルを水平スクロールします。クリックし続けると連続スクロールします。

レーン情報

“BPM/STOP,” Playable lanes, “BGA/LAYER/POOR,” “B01-32.”

各レーンの対応パートを示すラベル文字列です。メニューバーの【設定 → レーン情報を縦書きにする】から、書字方向を変更できます。

レーン情報の文字列や文字色は、テーマファイルを書き換えることでカスタマイズできます。レーンの並び順は変更できません。設定パネル “基本” タブの「プレイモード」、もしくは “環境” タブの「キー配置」を変更する以外の方法で、特定レーンを非表示にすることはできません。

表示するレーン自体をさらに細かくカスタマイズしたい場合、GDAC2 [http://www.asahi-net.or.jp/~nm4j-tyn/gdac2/] (外部リンク) のレーンスクリプトの改造や、iBMSC [https://hitkey.nekokan.dyndns.info/ibmsc_ja/] (外部リンク)/μBMSC [https://github.com/zardoru/iBMSC/releases] (外部リンク) の表示設定変更などをお試しください。

BPM 変更

BPM を途中で変更する、非演奏の「スクロール制御オブジェクト」です。

たとえば #002 の先頭に “BPM 240” を、その 1 拍後に “BPM 120.24” を配置したとします。

この例のグリッド座標は “0/16” → “4/16” です。この場合、#002 の先頭で BPM が 240 になり、「BPM 240 における 1 拍分」が経過すると BPM が 120.24 になります。

BPM 変更レーン上のグリッドを 書込モード で左クリックすると、入力フォームが現れます。ここで指定した値が BPM 変更オブジェクトになります。

フォームには -6553565535 の範囲の 10 進数 (小数・指数可) を入力できます。0、空の値、文字列を入力した場合は入力をキャンセルします。

1255 の整数値は “標準 BPM 変更” として扱われます。これは無限に配置でき、すべての BMS アプリケーションで再生できます (アプリケーション側のオブジェクト数制限を超えない限り)。

それ以外の数値は “拡張 BPM 変更” として扱われます。これは BMSE 上では 1295 個まで配置でき、一部の古いアプリケーションでは再生できません。内部的には専用の定義 (#BPMxx n) を持ちます。

負の値の BPM 変更は、一部のアプリケーションでは譜面のスクロール方向が逆転し、判定が消失します。この振る舞いの互換性は保証されません。

拡張 BPM 変更の定義数について

BMSE は、拡張 BPM 変更の定義形式を、使用個数に応じて自動的に切り替えます (255 個以内なら [01-FF]256 個以上なら [01-ZZ])。これは、可能な限りアプリケーション間の互換性を保つための措置です。

拡張 BPM 変更のサポート状況について、詳細は別頁を参照してください [https://hitkey.nekokan.dyndns.info/exbpm-object.htm] (外部リンク)。大雑把には以下の通り、拡張 BPM 変更回数が 253 回以内なら古い機種にも BMSE の仕組みで対応できます (非対応機種と bemaniaDX と BGAEncoder を除く)。

拡張 BPM 変更に非対応
BM98k, BMSC, BMS Viewer, nBMplay, otama, bms2wav, BmsToAvi
#BPM[01-99] 2 桁の 10 進数 (99 枠)
bemaniaDX (ただしチャンネル側は 36 進数で [01-2R] )
#BPM[01-FF] 2 桁の 16 進数 (255 枠)
BM98de (02-FF), DDR, rhythm-it!, MixWaver (01-FE), nazobmplay + Glasopal, GALLI, WAview, O2mania, KbMedia (bmse.kpi)
#BPM[01-73] 限定 36 進数 (255 枠)
BGAEncoder (ただしチャンネル側は 16 進数で [01-FF] )
#BPM[01-FZ] 限定 36 進数 (575 枠)
BMEV
#BPM[01-ZZ] 2 桁の 36 進数 (1295 枠)
beatoraja, Bemuse, Pulsus, raindrop, Angolmois, Sonorous, LunaticRave 2, ナナシグルーヴ, ruv-it!, forgetalia#, feeling pomu 2nd, uBMplay, PMSee-V, o2play, BMSE, iBMSC, μBMSC, BMX2WAV, charatbeatHDX, BMIIDXView2015, TechnicalGroove, BGAEncAdvance

拡張 BPM 変更を使う譜面を BMSC [http://tixlab.com/software/bmsc.shtml] (外部リンク) で開くと、拡張 BPM 変更オブジェクトがすべて消滅し、初期 BPM 定義が書き換わるのでご注意ください。BM98de [http://www.uranus.dti.ne.jp/~kikuchan/bm98/] (外部リンク) に対応するなら、譜面を BMSE に通すつど以下の手順を行います。

  1. #000 先頭にダミーの拡張 BPM 変更 (たとえば値 130.01) を置きます。
  2. 保存します。
  3. 同じ譜面を BMSE で開き直します (確実にダミーを #BPM01 にするため)。
  4. 保存して BMSE を終了します。
  5. メモ帳などのテキストエディタで譜面を開きます。
  6. ダミー (#BPM01 130.01 および #00008:01) を削除します。

拡張 BPM 変更回数を 8 回以内に抑えれば、BM98de のみならず bemaniaDX や BGAEncoder とも互換性を保つことができます。


「ファイルの保存中にエラーが発生しました。保存を中止します。Error No.9 インデックスが有効範囲にありません。」……

拡張 BPM 変更オブジェクトを 1296 個以上配置した状態で、保存するかビューワを呼び出そうとするとエラーが発生し、配置済み拡張 BPM 変更オブジェクトの値が 11295 の連番に置き換わりますこの状態で保存しないでください

BMSE は、拡張 BPM 変更オブジェクト 1 個につき #BPMxx n の定義番号枠を必ず 1 つ消費します。拡張 BPM 変更を 1296 回以上行う場合、テキストエディタや GDAC2 [http://www.asahi-net.or.jp/~nm4j-tyn/gdac2/] (外部リンク)/iBMSC [https://hitkey.nekokan.dyndns.info/ibmsc_ja/] (外部リンク)/μBMSC [https://github.com/zardoru/iBMSC/releases] (外部リンク) などで編集する必要があります。

拡張 BPM 変更の値について

BPM 入力フォームからは ±65535 を超える値を入力できません。

「エラー: 数が大きすぎます。」または「エラー: 数が小さすぎます。」

編集や保存は一応可能です。たとえばこの譜面を BMSE で開いた結果

9999999 → 変化なし
テキスト編集を経由すれば、±65535 を超える値も読み込み・移動・コピー・貼り付け・削除・保存などが可能です。
100000001E+07
BPM 変更および STOP の有効数字は 7 桁です。8 桁以降は指数表記され、丸め誤差が発生しうるので、注意が必要です。
100000011E+07
8 桁目 (一の位) で五捨六入され、値 1 相当の丸め誤差が発生。
100001001.00001E+07
指数表記は「1.00001 × 107」なので、誤差はありません。
.123456710.1234567
8 桁目 (小数第八位) で五捨六入され、値 0.00000001 相当の丸め誤差。
0.0000123456781.234568E-05
指数表記「10-5」における 8 桁目 (小数第十二位) で五捨六入され、値 0.000000000002 相当の丸め誤差が発生。
9999999.12345679999999
8 桁目 (小数第一位) で五捨六入され、値 0.1234567 相当の丸め誤差。
123.456789123.4568
8 桁目 (小数第五位) で五捨六入され、値 0.000011 相当の丸め誤差。

このように、譜面を BMSE で開いた時点で丸め誤差が発生しうることにご注意ください。なお、拡張 BPM 変更や STOP の値に文字列などを定義した譜面を開くと、BMSE が強制終了します

BPM の有効数字 [https://ja.wikipedia.org/wiki/有効数字] (外部リンク)や解釈範囲は、アプリケーションにより異なります。BMSE で扱える値が普遍的に通用するわけではないのでご注意ください。

BMSE が解釈しうる BPM 変更オブジェクトのうち、絶対値が最大になる値は ±3.402823E+38 です (単精度浮動小数点の最大)。これより大きい BPM 変更値を指定した譜面を開くと、BMSE は強制終了します。

BMSE が解釈しうる BPM 変更オブジェクトのうち、絶対値が最小になる値は ±1.401298E-45 です (単精度浮動小数点の最小)。これより小さい値はアンダーフローして 0 とみなされ、入力がキャンセルされます。

実際は -2.802597E-45 などの値も入力・保存できるようですが、あくまで BMSE で扱えるというだけです。これらの値はたとえ uBMplay であっても再生できません。常識的な値を指定するようにしてください。

BPM 入力フォームの受け付け範囲の最大は ±1.79769313486231E+308 (倍精度浮動小数点の最大) です。ここまではエラーダイアログ “数が大きすぎます/小さすぎます” を表示して入力をキャンセルします。これより大きい絶対値を入力するとオーバーフローして強制終了します。このときバックアップは作成されますが、それを過信しないでください。

BPM 入力フォームの受け付け範囲の最小は ±4.94065645841247E-324 (倍精度浮動小数点の最小) と推測されます。±1.401298E-45 より微小な数は入力がキャンセルされるので、詳細は筆者には分かりません。

BPM 変更・STOP オブジェクトを他のレーンに移動しないでください

BPM 変更・STOP オブジェクトを他のレーンに移動すると、値は定義番号に変換されます (10 進数 → 36 進数)。1296 以上の値は ZZ に、負の値は 01 に、小数値は丸められて整数になります。

逆に定義番号オブジェクトを BPM 変更・STOP レーンに移動すると、定義番号は値に変換されます (36 進数 → 10 進数)。

1296 以上の値・負の値・小数の値を他のレーンに移動した場合、これを BMSE 上で元の値に戻す方法はありません。元に戻す/やり直し” は元の値を復元しません。単に 36 進数を 10 進数に再変換するだけです。

BPM 変更・STOP オブジェクトを他のレーンに移動させ、ドラッグを解除せずに元の位置に戻すと、変更フラグが立ちません。この場合もやはり、元に戻す/やり直し” で元の値に戻すことはできません。

標準 BPM 変更と拡張 BPM 変更を同じ位置に重ねないでください

これらは内部的には別々の配置データチャンネルなので、同一のグリッド座標上に配置して保存すると、両方とも保存されてしまいます。

その結果、たとえば「#001 の 1 拍目で BPM を 120 にする指示」と「#001 の 1 拍目で BPM を 65535 にする指示」が同居するような譜面になります。どちらが解釈されるかはアプリケーション次第です。

LunaticRave2、ruv-it!、BMX2WAV は常に拡張 BPM を優先するでしょう。ナナシグルーヴ、nazobmplay、forgetalia#、BMIIDXView2015、PMSee-V、O2play は常に「BMS コード上で後方にある行」を優先するでしょう。いずれにせよ、メタ情報「譜面内で使用される BPM 最大値」は 65535 になるでしょう。

このような特殊な例を利用すれば、メタ情報を詐称してプレイヤーを惑わせるようなトリックも成立しますが、そのかわり譜面の互換性は失われるでしょう。LunaticRave2 専用の詐術 [https://twitter.com/cure_to_coma/status/788085381745020928/photo/1] (外部リンク)などもいくつか開発されました [http://ctconnected.blog.fc2.com/blog-entry-16.html] (外部リンク)

STOP

指定した時間だけ譜面スクロールを一時停止させる、非演奏の「スクロール制御オブジェクト」です (DDR 仕様のストップシーケンス)。

STOP 入力フォームに空の値や 0 以下の数値を入力すると、入力をキャンセルします。

165535 の範囲の 10 進数整数を指定できます。小数を入力すると整数に丸められます。停止時間の単位は 192 分音符を 1 とします。

たとえば、#002 の先頭に “STOP 96” を配置したとします。

この例なら、#002 の先頭で、192 分音符 × 96 個分 (== 4 分音符 × 2 個分) の経過時間、一時停止します。停止時点の BPM によって停止時間が決まります。

BPM STOP 停止時間
60 48 1
120 48 0.5
240 48 0.25
  • 1 拍分の経過秒数は、60 ÷ BPM で求められます。
  • 1 拍分の一時停止は、STOP 48 に相当します。

BMSE 上では STOP オブジェクトを最大 1295 個まで配置できます。内部的には専用の定義を持ち (#STOPxx n)、定義を使い回すことはできません。

BPM 1.250001, STOP 2147483647 なら、停止時間は 68 年 35 日 2 時間以上になります。

正確に再生できるかどうかはアプリケーション次第ですが、極小値の BPM 変更と極大値の STOP を組み合わせると、超長時間停止します。

同一タイミングに複数のオブジェクトが配置されているとき、STOP オブジェクトは最後に処理されます。つまり、STOP オブジェクトと同じタイムライン上に存在する音声や映像や BPM 変更がすべて反映されてから、譜面が停止します。これらはあたかも同時に処理されたかのように見えます。

ただし「ふぃーりんぐぽみゅせかんど [https://pmcc.nekokan.dyndns.info/] (外部リンク)」では、STOP オブジェクトが他のオブジェクトよりも先に処理される場合があります。譜面スクロール停止中に BPM が変更される場合などもあり、筆者にはよくわかりません。

値が負数の場合、一部のアプリケーションは譜面スクロールをスキップします。値が -48 なら、4 分音符 1 個分の区間をスキップします。区間内オブジェクトはスキップ終了地点でまとめて処理されます。区間内の演奏オブジェクトは超高速で全部入力しないと判定されません。この振る舞いの互換性は保証されません。区間内 STOP の扱いも不明です。uBMplay は入れ子スキップも解釈します。

STOP の注意事項

拡張 BPM 変更の注意事項とおおむね同じです。以下に要約します。

  • STOP 配置個数に応じて、定義形式 [FF/ZZ] が自動的に切り替わる。
  • 1296 個以上配置すると、保存時に値が 11295 の連番に化ける。
  • このとき言語ファイル内のエラーメッセージは使われない。
  • GDAC2 [http://www.asahi-net.or.jp/~nm4j-tyn/gdac2/] (外部リンク)/iBMSC [https://hitkey.nekokan.dyndns.info/ibmsc_ja/] (外部リンク)/μBMSC [https://github.com/zardoru/iBMSC/releases] (外部リンク) は最大 1295 種の STOP を無限に配置できる。
  • 165535 の整数値以外は、STOP 入力フォームからは入力できない。
  • 値が -21474836482147483647 なら STOP オブジェクトとして扱う。
  • 値が符号付き 32 ビット整数の範囲外ならオーバーフローして強制終了。
  • 有効数字 7 桁。±2147483520 くらいまでしか保存はできない。
  • STOP オブジェクト水平移動時、値が変わる可能性があり、
  • 元に戻す/やり直し” では、これを元の値に戻せない場合がある。
  • STOP 入力フォームは -21474836480 の範囲までは入力を取り消し、
  • 655362147483647 の範囲まではエラーを表示して入力を取り消す。

DDR 仕様のストップシーケンスのサポート状況について、詳細は別頁を参照してください [https://hitkey.nekokan.dyndns.info/exstop.htm] (外部リンク)。大雑把には以下の通り、停止回数が 255 回以内なら BMSE の仕組みで対応できます (非対応機種と feeling pomu 2nd と rhythm-it! を除く)。

DDR 仕様ストップシーケンスに非対応
BM98k, BM98de, MixWaver, bemaniaDX (#STP), BMSC, BMS Viewer, nBMplay, BMEV, KbMedia (bmse.kpi), otama, bms2wav, BmsToAvi, O2mania, o2play
#STOP[01-99] 2 桁の 10 進数 (99 枠)
feeling pomu 2nd (ただしチャンネル側は 36 進数で [01-2R] )
#STOP[01-FF] 2 桁の 16 進数 (255 枠)
DDR, nazobmplay + Glasopal, GALLI, WAview, PMSee-V
#STOP[01-73] 限定 36 進数 (255 枠)
rhythm-it! (ただしチャンネル側は 16 進数で [01-FF] )
#STOP[01-ZZ] 2 桁の 36 進数 (1295 枠)
beatoraja, Bemuse, Pulsus, raindrop, Angolmois, Sonorous, LunaticRave 2, ナナシグルーヴ, ruv-it!, forgetalia#, BMSE, uBMplay, iBMSC, μBMSC, BGAEncoder, BMX2WAV, in_bm2, charatbeatHDX, BMIIDXView2015, TechnicalGroove, BGAEncAdvance

「演奏すべきオブジェクトが判定ラインに達する 192 分音符 1 個分手前で、スクロールが 1 分間停止する譜面」を考えてみましょう。すくなくとも DDR・LR2・ruv-it! では、最高判定を得るためには停止してからきっかり 1 分後にそれを演奏しなければなりません。しかし停止中のオブジェクトまで時間軸に沿って判定する機種は少なく、たいていの場合プレイヤーは停止中のオブジェクトをいつ演奏しても最高判定を獲得できてしまうでしょう。

このように「正しい演奏」の基準が機種によって大きく異なりうるので、ゲーム性について突き詰めた調整を行う譜面著者は、互換性をある程度あきらめざるをえないでしょう。

BGA

映像オブジェクトを配置します。LAYER レーン に対する背景です。#BMP#BGA の定義リストからオブジェクトを選択して配置します。

BMS における伝統的な画像フォーマットは BMP です。詳細は別頁を参照してください [https://hitkey.nekokan.dyndns.info/bmpfmt.htm] (外部リンク)。アプリケーションによっては PNG・JPEG・GIF なども標準対応しています。Susie プラグイン [https://www.digitalpad.co.jp/~takechin/] (外部リンク) でそれらに拡張対応できるソフトもあります。

BMP の例 (256 × 256 pixels)
bpp 色数 容量
1 bpp 2 色 (多くの場合、白黒) 9 KiB
4 bpp 16 色 33 KiB
8 bpp 256 色 66 KiB
24 bpp 16777216 色 (True color) 193 KiB

BMP の形式は、OS/2 形式でない 1-bit・4-bit・8-bit・24-bit のみを使用してください。それらが表示されるかどうかは、ユーザ環境のディスプレイ表示色設定や、BMS 本体の設定に依存します。

MPEG などの動画ファイルも #BMP に定義でき、BGA レーンに配置できます。

動画対応 (非互換の独自拡張)
bemaniaDX/rhythm-it!/ruv-it! (#VIDEOFILE)
BM2DXEmu/charatbeatHDX/BMIIDXView2015 (#MOVIE)
O2mania (譜面の同位に存在する動画を自動再生)
動画対応 (#BMP)
beatoraja, Bemuse (1 個の WebMMP4 のみ), Pulsus, raindrop, Angolmois/Sonorous (256 × 256 pixels 以下の MPEG-1 のみ), LunaticRave 2, ruv-it!, nazobmplay + Glasopal, charatbeatHDX/BMIIDXView2015 (1 ファイルのみ), uBMplay (1.5.0 以降), BGAEncAdvance

動画形式はユーザ環境やコーデック設定などに大きく依存します。詳細は「LR2での動画BGA再生を支援するページ [http://right-stick.sub.jp/lr2bga/index.html] (外部リンク)」などを参照してください。サイズや形式は用途次第ですが、すくなくとも動画の音声は削除してください。音量ゼロという意味ではなく、音声トラックそのものを含めないよう分離します。

BMSE は画像の読み込みを Visual Basic の機能で行うため、BMSE 上でプレビューできる画像形式は BMP、GIF、JPG、ICO、メタファイル (WMF 等)、拡張メタファイル (EMF 等) のみです。PNG 画像はプレビューしません。

BMS における伝統的な映像ファイルのサイズは 256 × 256 pixels 以下です。このサイズを超える画像を一部のアプリケーションは表示しません。オーバーサイズ画像を拡張命令などで利用できるソフトもあり、これによる映像サイズ変更演出を使用した譜面も存在します。

通常の BMS で用いられる映像全般を指す用語 “BGA” とは別に、座標を定義する拡張命令としての #BGA が存在します。これは BGA レーンとは異なるものです (もっとも、#BGA オブジェクトは BGA レーンにも配置できます)。多くのアプリケーションは #BGA 命令に対応していません。(対応表)

配置された映像オブジェクトの #BMP 定義番号にファイルが定義されていない場合、一般的な BMS アプリケーションは BGA 表示領域に「完全な黒」を表示します。つまり、黒 1 色の画像は空オブジェクトで代替できます。ただしこの振る舞いは BMS の仕様で明示されたものではなく、実際に一部のアプリケーションは未定義番号によって無関係な画像を表示してしまう場合などもあり、映像を必ずブラックアウトできるという保証はありません。万全を期すなら 1 × 1 pixel の黒画像を明示的に割り当てることをお薦めします。

映像の縦横比を自動調整したり、サイズを拡大縮小するアプリケーションもあります。詳細は各ドキュメントなどを参照してください。

LAYER

映像オブジェクトを配置します。BGA レーン に対する前景です。#BMP#BGA の定義リストからオブジェクトを選択して配置します。

レイヤー画像は BGA レーンの映像上に重なって表示されます。レイヤー画像に透過色が含まれる場合、その部分のみ BGA レーンの映像を透過します。

#BMP01 から 08 までを定義したリストの例
BMS 書式上の定義 画像
#BMP01 Eg_bga1.bmp (青色に塗りつぶされた矩形)
#BMP02 Eg_bga2.bmp (緑色に塗りつぶされた矩形)
#BMP03 Eg_bga3.bmp (黄色に塗りつぶされた矩形)
#BMP04 Eg_bga4.bmp (赤色に塗りつぶされた矩形)
#BMP05 Eg_layer1.bmp (黒地に小さい白文字)
#BMP06 Eg_layer2.bmp (黒地に普通の白文字)
#BMP07 Eg_layer3.bmp (黒地に大きい白文字)
#BMP08 Eg_layer4.bmp (黒地に巨大な白文字)
BGA レーン
BGA レーンに、オブジェクト 01・02・03・04 を繰り返し配置すると、プレイ時の表示は、背景色が青→緑→黄→赤の順番で繰り返し変化する。
LAYER レーン
LAYER レーンに、オブジェクト 05・06・07・08 を繰り返し配置すると、プレイ時の表示は、白文字が小→中→大→最大の順番で繰り返し拡大縮小する。
BGA + LAYER
BGA レーンにオブジェクト 01・02・03・04 を、LAYER レーンに 05・06・07・08 を、繰り返し配置すると、プレイ時の表示は、「青背景に小さい白文字→緑背景に普通の白文字→黄背景に大きい白文字→赤背景に巨大な白文字」の順番で繰り返し変化する。

BMS の伝統的なレイヤー透過色は #000000 (完全な黒) です。アプリケーションにより、透過域が異なったり、独自拡張命令から任意の透過色を指定できたり、多層レイヤーが使えたり、JPEG が透過できなかったりします。動画形式をレイヤーにできるものもありますが、透過できるかは実装によります。

BGA レーンの場合と同様に、表示中の映像シーケンスを未定義オブジェクトによって解除 (ブラックアウト) できます。ただしもちろん、すべてのアプリケーションがそのように振る舞う保証はありません。

POOR

演奏ミス時に一定時間表示する映像オブジェクトを配置します。#BMP#BGA の定義リストからオブジェクトを選択して配置します。

POOR レーンは「ミス画像を途中変更するオブジェクト」です。【設定パネル → 拡張タブ → #BMP00】の「初期ミス画像」とは別物です。

#BMP00 が定義されている場合、#000 先頭から「POOR レーンにオブジェクトが現れるまで」の区間は、演奏ミス時に #BMP00 の画像が表示されます。

通常は BGA + LAYER レーンの映像が表示されます。演奏ミス時にのみ POOR レーンの映像 (もしくは #BMP00 の映像) が表示されます。一定時間が経過すると、再び BGA + LAYER レーンの映像が表示されます。

POOR レーンに 1 個でもオブジェクトを配置すると、その地点から譜面終了までの区間では #BMP00 を再表示することはできません。#BMP00 の画像を再利用したいなら、#BMP00 ではなく最初から #BMP01 以降に画像を定義し、それを POOR レーン #000 先頭に配置してください。

動画ファイルも POOR レーンに配置できますが、いまのところそれを再生できるソフトは一部ソフトの特定バージョンに限られるようです。

BGA レーンLAYER レーンと同じ要領でオブジェクトを並べれば、ミス画像もアニメーションできます。

SigSig [https://www.youtube.com/watch?v=2l3DCefCaro] (外部リンク) の「ミスすると転ぶキャラが表示される」式のレイヤーアニメを実現したい場合は、#POORBGA (ナナシグルーヴ独自拡張命令) を利用できます。詳細はナナシグルーヴ [http://d11x.sakura.ne.jp/asdf/?p=13] (外部リンク)のヘルプを参照してください。

BGA レーンにも LAYER レーンにもオブジェクトが存在しない状態で #BMP00 や POOR レーンを使用すると、一部のアプリケーションではミス画像が正常に表示されません。

BGM (B01B32)

非演奏の BGM オブジェクトを配置します。#WAV の定義リストからオブジェクトを選択して配置します。

BMS エディタは、BMS コードにおける #xxx01 行の記述順を、そのまま「BGM レーンの行頭側からの並び順」として解釈します。

小節内における「空の BGM 列」は、BMS コード上で “#xxx01:00” に置き換えられます。

BMSE で開いたときに BGM オブジェクトが整然と並んでいない譜面は、BMSC [http://tixlab.com/software/bmsc.shtml] (外部リンク) の左寄せ機能を使ったか、bMoL などを使ったか、テキストエディタでソースコードを手入力した譜面です (古い時代の作品に多い)。

BMS エディタが編集可能な、小節毎 BGM 行数
Editor BGM 説明
BMSC 28 BGM 29 行目以降は捨てる
GDAC2 可変 BGM がレーンスクリプト設定行数を超えると強制終了
beditor ? ヘルプ筆者が Mac OS を確認できないため不明
BMSE 32 BGM 33 行目以降は捨てる
iBMSC 1999 BGM は全行保持し、範囲外の行は非表示にする
μBMSC 1999 BGM は全行保持し、範囲外の行は非表示にする

BMSE は 33 行目以降の BGM の内容を読み込まないため、譜面を開いた時点で内容が変更される可能性があります。複数エディタの使い分けに備えて、無理のない範囲で BGM を左側に寄せるスタイルをお薦めします。

もはや時代遅れになったかもしれない Tips

一部の環境では、同時発音数が多いと音声を再生しきれない場合があります。任意の非演奏パート群を 1 本の WAV にまとめる、特定パートの配置全体を 192 分ずらす、などの対処法があります。

(この方法は時代遅れになったはずでしたが、2011年に StepMania 5 が BMS 形式をサポートしたために、いまだ有用たりえています。StepMania の同時発音数上限は「Keysounds を含めてわずか 4 音 [https://twitter.com/803832/status/253455510815264768] (外部リンク)」であるそうです。)

一部の環境では、音声ファイルの非再生状態が続くとサウンドデバイスが不用意に解放されてしまい、滑らかにプレイできない場合があったそうです。回避策として「数秒間の完全無音波形」を #000 先頭から譜面末尾まで 4 分リズムで配置している例が、古い作品にいくつか存在します。

同時発音数 1000 以上の譜面や、低スペックのモバイル環境などの状況もありうるので、参考用に記しておきます。

演奏領域のレーン

プレイヤーが演奏するオブジェクトを配置します。#WAV の定義リストからオブジェクトを選択して配置します。

プレイモードによってレーン構成が変動します。テーマによってレーン情報、レーン背景、オブジェクト色などが変動します。

Theme: Default
5 個または 7 個の鍵盤と、1 枚のスクラッチ。左は 1 Player 側で、対応チャンネルは、スクラッチが 16、鍵盤が 11, 12, 13, 14, 15, 18, 19。右は 2 Player 側で、対応チャンネルは、スクラッチが 26、鍵盤が 21, 22, 23, 24, 25, 28, 29, 26。
Theme: Default (for otc/fp)
13 個の鍵盤と、2 枚のスクラッチと、1 つのフットペダル。対応チャンネルは、フットペダルが 21、スクラッチが左 16 と右 26、鍵盤は左から順に 11, 12, 13, 14, 15, 18, 19, 22, 23, 24, 25, 28, 29。
Theme: Default (for PMS)
カラフルな 9 個のボタン。対応チャンネルは左から順に、11, 12, 13, 14, 15, 22, 23, 24, 25。
演奏オブジェクト
可視オブジェクト
  • テーマファイルにおいて指定された通りの色
  • 左クリックで書き込む
  • 通常の「演奏すべきノート」
  • チャンネル [11-29]
不可視オブジェクト
  • テーマファイルで指定された色と黒との中間色
  • Ctrl + 左クリックで書き込む
  • ノートへ割り当てる音を変更する
  • チャンネル [31-49]
ロングノート
  • テーマファイルにおいて指定された通りの色 (既定値は暗緑色)
  • Shift + 左クリックで書き込む
  • 長さを持つ演奏すべきノート「ロングノート」専用のオブジェクト
  • チャンネル [51-69]
  • 書込モード時、CtrlShift を同時に押したときは、Ctrl が優先されます。

不可視オブジェクト

演奏キー押下時に再生する音声を変更するだけのオブジェクトです。プレイ時には画面に表示されず、判定もされず、点数にも計上されません。

不可視オブジェクトの主な用途

  • プレイヤーのアドリブ演奏やアレンジプレイに備える
  • アドリブ演奏を禁じる (空の定義を不可視で配置する)
  • 譜面特有のお遊び要素 (不可視にのみ割り当てられた音など)

1 つの可視オブジェクトを 2 つの不可視オブジェクトで挟むことによって、プレイヤーが演奏のタイミングを外した際に特別なリアクションを返す、などの応用例もあります。

一部のアプリケーションの、不可視オブジェクトに関する既知のバグ

  • (主に feeling pomu 2nd [https://pmcc.nekokan.dyndns.info/] (外部リンク), 旧 ruv-it!/rhythm-it! [http://nvyu.net/rdm/jp/] (外部リンク), iBMSC [https://hitkey.nekokan.dyndns.info/ibmsc_ja/] (外部リンク), μBMSC [https://github.com/zardoru/iBMSC/releases] (外部リンク))
  • 状況により、不可視オブジェクトを判定してしまう
  • 状況により、不可視オブジェクトを点数に計上してしまう
  • 状況により、不可視オブジェクトの音声を自動再生してしまう
  • 不可視オブジェクトを「演奏ノート数」に計上してしまう

プレイアブルな BMS アプリケーションはほぼすべて不可視オブジェクトをサポートしています (ただし charatbeatHDX [http://www.charatsoft.com/software/charatbeatHDX/index.html] (外部リンク) は非対応)。

ロングノート専用オブジェクト

ロングノート (LN) は、長さを持つ演奏オブジェクトです。鍵盤デバイスなら演奏キー押下状態を、スクラッチデバイスなら一方向に回し続ける状態を、一定時間維持しなければなりません。さらに実装によっては、維持状態を正しいタイミングで解除しなければなりません。

BMSE 上で、同一のレーン上において LN オブジェクトで挟まれた区間は、プレイ時には 1 本のロングノートとなります。

BMSE 上での配置:

同一レーン上に 2 個のロングノートオブジェクトを配置すると、1 本のロングノートの長さが定まります。

ロングノートのイメージ:

1 本のロングノートは、開始位置から終了位置までを連結したオブジェクトと考えてください。

ロングノートの終端:

BMSE が描画するオブジェクトの下辺は、ロングノート終端として判定される位置です。

  • BMS シーンでは長らく「終端を判定しないロングノート」が主流でした。仕様提案者がそのように実装していたことと、事実上の標準となったいくつかの BMS ソフトウェアがそれを踏襲していたことが理由です。終端を判定する機種も存在しましたが、あまり知られませんでした。

    beatmania IIDX 17 SIRIUS が2009年10月21日に「終端を判定するチャージノート」を実装して以来、状況が変わりました。2010年代にリリースされたいくつかの BMS ソフトウェアは “チャージノート” を使うことができますが、BMSE 上ではロングノートとチャージノートは区別されません。

    チャンネル #xxx[51-69] のオブジェクトを BMSE 以外の実装がどのように扱うのであれ、この文書ではそれをロングノート (LN) と表記します。

BMSE でロングノートを配置する際の注意点

LN 1 本につき、開始位置と終了位置の一対が必要です。終了位置が見つからない LN の解釈はアプリケーションによって異なります。DDR や BMX2WAV はエラーを返します。

演奏時、LN 開始位置のオブジェクトを正しいタイミングで処理できたとき、LN 開始位置オブジェクトの音声ファイルが再生されます。

通常、LN 終了オブジェクトの音声は鳴らされません。ただし charatbeatHDX [http://www.charatsoft.com/software/charatbeatHDX/index.html] (外部リンク)BMIIDXView2015 [http://www.charatsoft.com/software/bmview/index.html] (外部リンク) は、LN 始点と LN 終点の定義番号が異なる場合に限り LN 終了位置オブジェクトの音声も再生します。もちろん、LN 終点を正しいタイミングで処理できたとき、そのタイミングで終点の音を鳴らします。

  • バックスピンスクラッチを再現すべく提案・実装された仕様と思われますが、鍵盤でも LN 終端側をキーアップした際に音を鳴らすことが可能です。

このように仕様が混在しているので、互換性を保つために、通常は 1 本の LN の開始位置と終了位置には同じ定義番号の LN オブジェクトを配置してくださいcharatbeatHDX [http://www.charatsoft.com/software/charatbeatHDX/index.html] (外部リンク)BMIIDXView2015 [http://www.charatsoft.com/software/bmview/index.html] (外部リンク) の拡張されたチャージノートを使う場合に限り、LN 終了オブジェクトを別の定義番号にしてください。


ロングノート専用オブジェクトを演奏領域の外に移動しないでください。BGM に移動すると BMSE が強制終了します (バージョン 1.3.9 beta14 は除く)。バックアップは一応作成されます。BPM 変更STOP や、BGALAYERPOOR に移動すると、オブジェクト選択枠が消える等の不具合が発生します。


ロングノート専用オブジェクトと #LNOBJ XX を併用しないで下さい。ロングノートをサポートするアプリケーションのほぼすべてにおいて解釈の違いや不具合が発生し、譜面の互換性が著しく低下します。


O2mania [http://www.o2mania.com/] (外部リンク) や古いアプリケーションでロングノートを使用する場合、拡張命令タブ内に “#LNTYPE 1” の記述を追加する必要があります。本来は互換性の観点から常に記述するのが望ましいのですが、一部のソフトウェアではこの宣言の有無によって譜面の構文解析結果が変わってしまう場合があります。O2mania をサポートしない譜面は “#LNTYPE 1” を削除するほうが無難です。iBMSC [https://hitkey.nekokan.dyndns.info/ibmsc_ja/] (外部リンク)/μBMSC [https://github.com/zardoru/iBMSC/releases] (外部リンク) で保存した譜面には自動的にこの宣言が付加されることに注意してください。

ロングノート専用オブジェクトのサポート状況

BMSE がサポートするロングノート専用オブジェクトは、BMS 書式仕様上は配置データチャンネル #xxx51-69 に割り当てられています。これは #LNOBJ とは異なる拡張命令なのでご注意ください。

非対応
BM98k, BM98de, MixWaver, bemaniaDX, BM2DXEmu, MacBeat, Aqua'n Beats, Starry Music Beat, BMSC, beditor, BmsToAvi, BMS Viewer, BMEV, nBMplay, BMS2WAV, BMS Printer, otama, GALLI, KbMedia (bmse.kpi)
対応
beatoraja, Bemuse, Pulsus, raindrop, Angolmois, Sonorous, rhythm-it! (1.7+), DDR (Arrow Mode Only), nazobmplay + Glasopal, WAview, in_bm2, BmsListSorter, BME2WAV, BMX2WAV, LunaticRave 2, ruv-it!, ナナシグルーヴ, feeling pomu 2nd, forgetalia#, BMSE, iBMSC, μBMSC, GDAC2, uBMplay, PMSee-V (1.1.6+), o2play, O2mania (#LNTYPE 1 必須), charatbeatHDX・BMIIDXView2015 (終端再生可)
  • charatbeatHDX・BMIIDXView2015 では、チャージノートとヘルチャージノートを使い分けることができます。拡張命令タブに以下のように記述すると、譜面内のロングノート専用オブジェクトはすべてヘルチャージノートとして解釈されます。

    #OPTION charatbeatHDX:LONGMODE 1

    ヘルチャージノートとは、「入力状態を正しく維持できない間グルーヴゲージが減少し続ける」という、2015年に beatmania IIDX 23 にて導入された特徴です。ヘルでないチャージノートは以下のように強制できます。

    #OPTION charatbeatHDX:LONGMODE 0

    この拡張命令が存在しない場合、ユーザ環境で設定された値が既定値として適用されます。charatbeatHDX・BMIIDXview2015 は、終端を判定しない旧来型ロングノートをサポートしません。

  • beatoraja [https://github.com/exch-bms2/beatoraja/releases] (外部リンク) では、長いノートそれぞれがロングノート・チャージノート・ヘルチャージノートを使い分けることができます。ただし、そのためには BMS フォーマットではなく BMSON フォーマット [https://bmson.nekokan.dyndns.info/] (外部リンク)で譜面を書く必要があります。BmsONE [https://excln.github.io/bmsone.html] (外部リンク) という最新鋭の BMSON エディタが既にあります。LN/CN/HCN の使い分けに関しては楽曲製作者向け資料 [https://github.com/exch-bms2/beatoraja/wiki/楽曲製作者向け資料] (外部リンク)を参考にしてください。

    BMS フォーマットの場合に限り、譜面内のロングノート専用オブジェクトの種類を一括で指定することもできます。BMSE の拡張命令タブに以下のように記述すると、譜面内のロングノート専用オブジェクトはすべてヘルチャージノートとして解釈されます。

    #LNMODE 3

    #LNMODE の値が 1 なら終端を判定しない旧来型ロングノートになり、値が 2 ならチャージノートになります。

現在は BMSE より新しい BMS エディタもいくつか登場しています。特にロングノートは視覚的に編集しやすくなっています。

BMSE-dttvb [https://github.com/dtinth/UCN-BMSE/tree/master/BMSE] (外部リンク)

タイ国の dtinth 氏による、BMSE のフォーク版です。ロングノートを視覚化した点以外は BMSE とまったく同じです。既存の不具合も未修正です。

O2mania 用のテーマが同梱されています。

iBMSC [https://hitkey.nekokan.dyndns.info/ibmsc_ja/] (外部リンク) (NoteTool mode / BMSE mode)

NoteTool mode

BMSE mode

中国の doaz 氏による高機能エディタです。NT mode では LN をドラッグで伸縮できます。

umt_ki 氏による外観設定テーマ “BMSEmdk [http://iroirokiba.web.fc2.com/other.html] (外部リンク)” はおすすめです。

μBMSC [https://github.com/zardoru/iBMSC/releases] (外部リンク)

zardoru 氏による iBMSC の私的改造版です。

使い方や詳細は各ドキュメントなどを参照してください。

フリーゾーン

フリーゾーンとは、スクラッチの自由演奏区間です。5 鍵盤時代の beatmania 最初期にわずかな間だけ存在していた特徴ですが、“Beat” の “discipline” を “score” とする “Game” の “design” にそぐわず支持されませんでした。

BMSE にはフリーゾーン用のレーンはありません。フリーゾーンオブジェクトを編集したい場合、BMSC [http://tixlab.com/software/bmsc.shtml] (外部リンク)GDAC2 [http://www.asahi-net.or.jp/~nm4j-tyn/gdac2/] (外部リンク) を使用するか、ダミーオブジェクト配置後にテキストエディタから置換するなどしてください。

チャンネル #xxx172737475767 のサポート状況

フリーゾーンとして
BM98k, BMSC, BMS Viewer, nBMplay, forgetalia
フットペダルとして
ナナシグルーヴ, Angolmois, Sonorous, GDAC2
BME 型 PMS のボタンのひとつとして
LunaticRave 2, feeling pomu 2nd, PMSee-V, Angolmois, Sonorous, GDAC2
18 keys PMS のボタンのひとつとして
ナナシグルーヴ, feeling pomu 2nd, Angolmois, Sonorous, GDAC2

前述のチャンネル #xxx[1-6]7 を使用する譜面を BMSE で開くと、読み込み時に該当オブジェクトがすべて削除されます。これを避ける場合、BMSC [http://tixlab.com/software/bmsc.shtml] (外部リンク)GDAC2 [http://www.asahi-net.or.jp/~nm4j-tyn/gdac2/] (外部リンク) を使用するか、該当行を他のテキストに退避させてください。

拡張命令タブ内に、ダミーの #RANDOM 分岐を記述する方法もあります。

#RANDOM 1
#IF 1
// ここから退避内容
#00117:01010101
// この区間内の記述は消されない
// ここまで退避内容
#ENDIF
#ENDRANDOM

地雷

地雷とは、触れるとグルーヴゲージが減少するオブジェクトです。#WAV00 に爆発音をひとつだけ定義することができます。近年のトレンドは、ストップシーケンスと地雷や小節線などを組み合わせて譜面をアニメーションさせる “BGA のような譜面” です。

BMSE には地雷用のレーンはありません。地雷を編集したい場合、μBMSC [https://github.com/zardoru/iBMSC/releases] (外部リンク) で譜面を開いて、書き込みモードを選択し、CtrlShift を押しながら左クリックして書き込んでください。この方法が最も簡単です。他には、GDAC2 [http://www.asahi-net.or.jp/~nm4j-tyn/gdac2/] (外部リンク) を利用するか、ダミーオブジェクト配置後にテキストエディタや不可視地雷コンバータ [https://nekokan.dyndns.info/~otlovers/guidance/guidance_4b.html] (外部リンク)などから置換する、などの古い方法もあります。

参考資料
地雷対応
beatoraja, Bemuse, Pulsus, Angolmois, Sonorous, charatbeatHDX (1.09+), BMIIDXview2015 (3.02+), ナナシグルーヴ, LunaticRave 2, forgetalia++, GDAC2, PMSee-V (1.11.0+), uBMplay (1.5.0+), μBMSC (3.2+)

LunaticRave2 や他いくつかの実装の地雷ダメージ量は、必ずしもナナシグルーヴが策定した地雷仕様の通りではありません。独自のバランス調整が適用されており、またゲームモードによっても変化するようです。

すくなくともナナシグルーヴと LunaticRave2 (ノーマルゲージ) において、地雷番号 ZZ は「触れると爆発して即死するオブジェクト」です。触れた時点で爆発音とともにステージが中断され、リザルト画面に移行します。仕様は「即死」の振る舞いを規定していないので、実装によっては単にゲージが 0 % になるだけの場合もあるし、爆発音が鳴らずにリザルト画面に移る場合もあります。

いくつかの実装には既定の爆発音が用意されていません。したがって #WAV00 に音声ファイルが定義されていない限り、それらのソフトウェア上でのプレイでは地雷に触れても音が鳴りません。

ある演奏レーンに地雷以外のオブジェクトが存在しない場合、一部の実装では指定位置に地雷が出現しません。同様の不具合はロングノートでも発生する場合があります。適当にテストプレイして配置を調整してください。

地雷の退避と保護

地雷を使用する譜面を BMSE で開くと、読み込み時に爆発音スロット #WAV00 とダメージ用チャンネル #xxxD1-E9すべて削除されます。該当行を他のテキストなどに退避して対処してください。拡張命令タブ内にダミーの #RANDOM 分岐を記述する方法も利用できますが、#WAV00 だけはこの方法でも削除されてしまうのでご注意ください。

#RANDOM 1
#IF 1
// ここから退避内容
#WAV00 explode.wav
#001D1:14141414
#001E5:0014001400140014
// この区間内の記述は消されない (but #WAV00 is gone)
// ここまで退避内容
#ENDIF
#ENDRANDOM

地雷チャンネル文だけを抜き出したい場合は、正規表現を検索条件に指定できるテキストエディタを使うと楽です。

地雷チャンネル文
^\s*#\d{3}[DEde][1-9]:[0-9A-Za-z]+$
地雷を除くすべてのチャンネル文
^\s*#\d{3}[^DEde][1-9]:[0-9A-Za-z]+$
  1. 地雷使用譜面ファイルを別名でコピーしてテキストエディタで開く。
  2. 地雷以外の全チャンネル文を正規表現で検索して、空文字列に置換。
  3. 地雷チャンネル文だけが残る。これを適宜処理する。

オブジェクトの重なりについて

オブジェクトを重ねないで下さいBMS アプリケーションの構文解析上の不具合の大半は、重なったオブジェクトによって引き起こされます。

同一のグリッド座標上に可視オブジェクト同士を重ねて 書き込むと、新しく書き込んだ可視オブジェクトのみが残り、古い可視オブジェクトは破棄されます。不可視オブジェクト同士・ロングノート専用オブジェクト同士を重ねて書き込む場合も、同様に古い側が破棄されます。

配置済みオブジェクトと同一のグリッド座標上に オブジェクトを移動するか貼り付けた場合、その譜面の編集中に限りオブジェクトが一時的に重なったままになります。トランプのカードを積んだり崩したりする要領です。プレビュー時や保存時は、“最前面にあるオブジェクト” のみが反映されます一時編集情報を破棄した時点で、重なり情報も破棄されます。

オブジェクトが積まれた山に対して、単体選択で “最前面にあるオブジェクト” のみを選択します。範囲選択で “山自体” を選択します。

オブジェクトが積まれた山に対して、 削除モードや右クリック削除や【範囲選択 → Delete キー】で、最前面のオブジェクトのみを削除します。

オブジェクトが積まれた山に対して、【範囲選択 → コンテキストメニュー → 削除】などで “山自体” を削除します。これは非演奏領域の各オブジェクトについても同様です。

これらの挙動は把握しづらく、気付かずに編集を誤るリスクが増大するので、一時的であってもオブジェクトを重ねることはお薦めできません。


可視・不可視・ロングノート専用オブジェクトはそれぞれ配置データチャンネルが異なるため、同一のグリッド座標上に重ねて書込・編集・保存できます。しかし、オブジェクトを重ねないでください。

配置データ文 チャンネルの意味
#00111:01 1P 側可視・1 鍵盤
#00131:02 1P 側不可視・1 鍵盤
#00151:03030000 1P 側 LN・1 鍵盤

ロングノート登場当初は、LN 始端と同じ番号の可視オブジェクトを LN 始端に重ねておく手法が奨励されていました。これは、ロングノート非対応ソフトには可視オブジェクトを再生させることを狙ったもので、可能な限り多くの環境で違和感なく遊べるようにするための配慮でした。

しかしロングノート対応アプリケーションが事実上の標準となって長い現在、ロングノート非対応ソフトは既に使われなくなり、オブジェクトを重ねることによる利点よりも、重なりによって譜面の解釈がぶれる欠点のほうが目立つようになってきています。

たとえば前述の表で示した譜面は、通常は 1 本のロングノートですが、一部の機種でスーパーランダムオプションを適用すると可視オブジェクトが増えます。同様に、演奏ノート総数が不正確になったり、それに伴いスコア計算が狂うなど、アプリケーション次第で多彩な結果になります。

Angolmois は、「地雷と不可視オブジェクトを同じ位置に重ねることによって、地雷の爆発音を挿げ替える」というアクロバットを受け入れます。他の機種で問題が発生する可能性はありますが、それでも構わない方やこの種の手法に魅力を感じる方は試してみてください。

その他の注意点

#000 の 1 拍目に演奏オブジェクトを配置すると、再生ソフトの一部はこれを譜面ロード直後に表示するため、正確に演奏できません。

これを考慮して、ほとんどの譜面は #001 (もしくは #001 のアウフタクト) から演奏オブジェクトが配置されています。

非演奏オブジェクトは #000 先頭に配置しても問題ありませんが、特別な意図がない限り演奏オブジェクトは #000 先頭には置かないでください


#000#999 の両方に内容があると、LunaticRave2 などで不具合が生じます。

BMS イベントなどで「LunaticRave2 での正常動作」が出場条件に課せられる場合は注意を払う必要があります。

LR2 に限らず、小節数に関する例外は少なくありません。

  • BMS Viewer は #511 までしか解釈できません。
  • DDR は #998 までしか解釈できません。
  • bemaniaDX や GALLI は #399 までしか解釈できません。
  • BGAencoder は #249 までしか解釈できません。
  • BMEV は #000 にしか内容が無い譜面を開くと強制終了します。
  • rhythm-it! は #000 にしか内容が無い譜面をスクロールできません。

演奏領域の表示環境

プレイモードは【設定パネル “基本” タブ】から変更できます。BMS、PMS、oct/fp の各プレイモード外観は【メニューバー設定Select Theme】から手動で変更する必要があります。

演奏領域の表示形式は【設定パネル “環境” タブ】から変更できます。

キー表示:セパレート、キー配置: 7keys・14keys、スクラッチ:左
  • 「セパレート」のとき、全列を等幅で表示します。
  • 「7keys・14keys」のとき、鍵盤 6・7 番を表示します。
  • 「左」のとき、スクラッチを鍵盤の左側に表示します。
キー表示:ハーフ、キー配置: 5keys・10keys、スクラッチ:右
  • 「ハーフ」のとき、黒鍵を白鍵列の間に表示します (ピアノのように)。
  • 「5keys・10keys」のとき、鍵盤 6・7 番を隠します。
  • 「右」のとき、スクラッチを鍵盤の右側に表示します。

作成する譜面のタイプに合わせて、表示環境を変更すると便利です。プレイ時の見映えに編集環境を近づけることで、運指などをイメージしやすくなります。beatmania IIDX 専用コントローラ [https://www.konamistyle.jp/products/detail.php?product_id=19964] (外部リンク)などのデバイスを考慮する場合は、スクラッチ表示位置の変更によって多くのヒントを得られるでしょう。


メインパネルの操作

以下の操作は BMSE 1.3.8 におけるものです。他のバージョンでは操作方法が異なる場合があります。

モード問わず

Home
垂直スクロールバー先頭へ移動 (つまり、#000 へ移動)
End

垂直スクロールバー末尾へ移動

(つまり、譜面全長 + 最大 16 小節の余白を加えた小節へ移動)

方向キー上下ホイール上下垂直スクロールバー上方向スクロールボタン・垂直スクロールバー下方向スクロールボタン 左クリック

VScroll 設定値 × 1 倍量、上下にスクロール

(初期値 96 × 1 は、4/4 拍子における半小節)

Page UpPage Down 垂直スクロールバートラックを左クリック

VScroll 設定値 × 8 倍量、上下にスクロール

(初期値 96 × 8 は、4/4 拍子における 4 小節)

垂直スクロールバートラックを Shift + 左クリック
[Windows 2000/XP 以降] クリック地点に瞬時にスクロール
方向キー左右水平スクロールバー左右スクロールボタン 左クリック
レーン 1 本分、左右にスクロール
水平スクロールバートラックを左クリック
レーン 4 本分、左右にスクロール
水平スクロールバートラックを Shift + 左クリック
[Windows 2000/XP 以降] クリック地点に瞬時にスクロール
垂直スクロールバーノブを左ドラッグ

上下にライブスクロール

(垂直方向の移動量はスクロール範囲長などに依存)

水平スクロールバーノブを左ドラッグ
左右にライブスクロール
テンキー 456
Grid 6、12、24 に変更
テンキー 123
Grid 8、16、32 に変更
テンキー 0
Grid FREE に変更
メインパネル右クリック

メインパネルの

コンテキストメニューを開く

ここに 1 小節挿入

右クリックメニューを開いた位置に、オブジェクトが無い 4/4 拍子の小節 (空の小節) を追加する

  • “元に戻す/やり直し” 可能
  • クリック地点小節を含む、以降の小節全体が後方に 1 小節スライドする。#999 の内容は押し出され消える。
  • #999 で小節挿入を行うと、#998 に空小節が挿入され、#999 の内容は押し出され消える。
この小節を削除

右クリックメニューを開いた位置の小節を削除

  • “元に戻す/やり直し” 可能
  • 以降の小節全体が前方に 1 小節スライドし、#999 に空小節が補填される。
  • #999 で小節削除を行うと、#000 の内容が削除され、#001#999 が新たな #000#998 となる。
[Ctrl + X] 切り取り
選択状態のオブジェクトを、コピーしてその場から削除
[Ctrl + C] コピー
選択状態のオブジェクトを、クリップボードにコピー
[Ctrl + V] 貼り付け

クリップボードにあるオブジェクトを、任意の小節に転写

(貼り付け位置についてはメニューバー【編集】を参照)

[Delete] 削除
選択状態のオブジェクトを削除
[Ctrl + A] すべて選択
メインパネル上の全オブジェクトを選択状態にする
[Ctrl + F] 検索・削除・置換
検索・削除・置換ウィンドウを開く
[Ctrl + Z] 元に戻す
Undo (編集履歴を 1 ターン戻る)
[Ctrl + Y] やり直し
Redo (編集履歴を 1 ターン進む)
Ctrl + N
新規作成
Ctrl + O
譜面を開くダイアログ
Ctrl + S
上書き保存
Ctrl + D
編集中のディレクトリを開く
F1
bmse.iniHelp キーに指定したファイルを実行
F2
編集モードに移行
F3
書込モードに移行
F4
消去モードに移行
F5
選択中のビューワで現在の譜面を最初から再生
F6

選択中のビューワで現在位置から再生

現在メインパネルに描画されているうち、最も先頭側の小節から再生

F7
再生中のビューワを停止
F10
  • メニューバーにフォーカス
  • もしくは sirodius.exe の起動を試みる

編集モード時

オブジェクトを左クリック

オブジェクト単体を選択状態にする

  • このとき他のオブジェクトは非選択にする (排他選択)

さらに “オブジェ単体選択時にプレビューする” が有効なら:

  • 選択オブジェクトが演奏領域か BGM 領域で、かつ音声ファイルが定義されていれば、それを再生
  • 選択オブジェクトが映像領域で、かつ画像ファイルが定義されていれば、それをプレビューウィンドウに表示
オブジェクト以外の場所を左ドラッグ (範囲選択)
  • マウス左ボタン押下時、ドラッグ開始判定
  • マウス左ボタン押下中、ドラッグ開始位置からマウスポインタ位置までの矩形範囲内にあるオブジェクトを範囲選択
  • ドラッグ解除時、範囲選択枠に収めたオブジェクト群を選択状態にする
  • 範囲選択枠をメインパネル外まで広げたとき、マウスポインタが飛び出した方向にスクロールしながら範囲選択 (斜め方向も可)

  • メインパネルからマウスポインタまでの距離が何であれ、スクロール量は スクロールボタン上下左右 と等しい (左ボタンを離すか、ポインタがメインパネルに戻るまで連続入力される)
オブジェクト以外の場所を左クリック
選択状態のオブジェクトがあるとき、選択状態を解除
選択オブジェクトを左ドラッグ (+ 移動キー)
  • ドラッグ中、選択状態のオブジェクトを移動

  • メインパネル外にドラッグすると、マウスポインタが飛び出した方向にスクロールしながら移動 (斜め方向も可)

  • 選択状態のオブジェクト上でマウス左ボタン押下中、方向キーホイール回転Page UpPage DownHomeEnd を入力すると、スクロールしながらオブジェクトを移動 (配置を掴んで固定したまま、パネル側を動かすような感覚)

Ctrl + 範囲選択

Ctrl 押下中、選択枠内に収めたオブジェクトの選択状態を反転

(つまり、追加選択、もしくは選択状態の解除)

オブジェクトを Ctrl + 左クリック

Ctrl 押下中、単体選択したオブジェクトを追加選択

[Ctrl + 左クリック] で追加選択した水色オブジェは、[Ctrl + 範囲選択] で選択状態を反転することはできない ……いつのまにかできるようになっていたが理由が不明

選択オブジェクトを Ctrl + 左ドラッグ

オブジェクトをコピーして移動 (== 複写)

  • 選択状態のオブジェクト上で [Ctrl + マウス左ボタン押下] した瞬間に複写が実行される。この時点で Ctrl キーやマウス左ボタンは離してもよいし、離さなくてもよい
  • [コピー → 貼り付け → 移動] を一挙動で行う感覚
  • Ctrl を押しながら何度も左クリックすると、オブジェクトが同一グリッド座標上に重なりまくる
選択オブジェクトを Shift + 左ドラッグ (+ 移動キー)

オブジェクトを Y 軸固定移動 (== 縦にずれない)

Shift 押下中、オブジェクトは水平方向にのみ移動する

オブジェクトを水平方向に移動しているとき、マウスポインタが垂直方向にずれると、ドラッグ中のオブジェクトもマウスポインタに追従して垂直移動してしまう。しかしドラッグ中に Shift を押していれば、オブジェクトはマウスポインタ垂直移動には追従しない。

  • Y 軸固定移動中、方向キー上下ホイール回転Page UpPage DownHomeEnd を入力すると、オブジェクトを Y 軸固定移動しながらメインパネルだけをスクロール

    (方向キー左右なら、単にオブジェクトを左右に移動)

オブジェクト、または選択オブジェクトを、Shift + 右クリック

定義番号スポイト

Shift 押下中、右クリックしたオブジェクトの番号に、定義リストカーソルが移動する

(このときプレビュー右クリック削除は行わない)

  • 右クリック位置がオブジェクトでなければ、単にメインパネルのコンテキストメニューを開く

書込モード時

左クリック

可視オブジェクト書込

定義リストから選択した番号を、マウスポインタ直下のグリッド座標に書き込む

Ctrl + 左クリック
不可視オブジェクト書込
Shift + 左クリック
ロングノートオブジェクト書込 (開始点と終了点が必須)

消去モード時

オブジェクトを左クリック
オブジェクトを単体削除
オブジェクト以外の場所を左クリック
選択状態のオブジェクトがあるとき、選択状態を解除
オブジェクトを Shift + 右クリック

定義番号スポイト