編集

「編集」メニューには、以下の項目が収められています: File View Options Tools Help Undo Redo Cut Copy Paste Delete Select All Find/Delete/Replace Edit Mode Write Mode Delete Mode 元に戻すやり直し切り取りコピー貼り付け削除すべて選択検索・削除・置換編集モード書込モード消去モード

オブジェクトに対する編集操作を行うメニューのグループです。

元に戻す

直前の操作を取り消します。作業履歴をひとつ戻ります。

BMSE はメモリが許す限り何度でも “元に戻す/やり直し” を行えます。

やり直し

取り消した操作を再実行します。作業履歴をひとつ進みます。

BMSE はメモリが許す限り何度でも “元に戻す/やり直し” を行えます。

切り取り

選択状態のオブジェクトを切り取ります。BMSE では「コピーして、かつその場から削除する」という操作です。

BMSE のオブジェクト配置データは、別のソフトに渡すことができます。

コピー

選択状態のオブジェクトを一時的に記憶します。選択されたオブジェクトそれぞれの内容、つまり番号や値と位置を、クリップボードという一時的な保存場所に格納します。

BMSE のオブジェクト配置データは、別のソフトに渡すことができます。

貼り付け

コピーもしくは切り取りによって一時的に記憶されたオブジェクトの内容を、描画地点から最初に小節線が現れる小節に転写します。

貼り付け先の例

#000 (Home キーを押した直後の状態なら、オブジェクトは #000 から貼り付けられます。)

#001 (#000 に貼れる状態からメインパネルをわずかに先にスクロールし、#000 の小節線が隠れ #001 の小節線が見えている状態なら、オブジェクトは #001 から貼り付けられます。)

#001 (#000 と #001 が非常に長く、メインパネルに #001 の小節線だけが見えている状態なら、オブジェクトは #001 から貼り付けられます。)

#005 (非常に短い小節が密集し、メインパネルに描画されるうち最も先頭側の小節線が #005 のものであるなら、オブジェクトは #005 から貼り付けられます。)

#002 (小節が長すぎてメインパネルに小節線が一本も描画されておらず、メインパネルに描画されている小節が #001 の一部分であるなら、オブジェクトは #002 から貼り付けられます。)

貼り付けるとオブジェクトが選択された状態で出力されます。配置済みのオブジェクトの真上にも重なって出力されます

BMSE のオブジェクト配置データは、別のソフトに渡すことができます。

切り取り・コピー・貼り付けを、別の BMSE と相互に行うこともできます。

#999 以降で貼り付けを行うと、#999 に貼り付けます。

貼り付け時、#999 より後方に溢れたオブジェクトは消滅します。

選択されたオブジェクトをドラッグなどで移動しているとき、

  • #000 より前方
  • #999 より後方
  • BPM 変更レーンより左方
  • BGM レーン 32 番より右方

に溢れたオブジェクトは、選択状態を解除したとき消滅します。

書込モード中も貼り付けは実行することができます。

削除

選択状態のオブジェクトを削除します。

すべて選択

メインパネル上にある全オブジェクトを選択状態にします。

検索・削除・置換

様々な条件でオブジェクトを検索し、該当オブジェクトに対して選択や削除や置換などの処理を行う検索・削除・置換ウィンドウを開きます。

編集モード

メインパネルのカーソルを 編集モード に変更します。

BMSE 起動直後はこのモードが選ばれています。

おもに Microsoft Office 関連製品などを導入済みの一部の環境では、ツールバーの 矢印アイコン が隠れていて押下できない状態になっている場合があります。必要ならツールバーを修正してください

書込モード

メインパネルのカーソルを 書込モード に変更します。

消去モード

メインパネルのカーソルを 消去モード に変更します。


BMSE はメモリが許す限り何度でも “元に戻す/やり直し” を行えます

いまとなっては解説が必要ですが、BMSE が公開された当時の BMS 譜面エディタ (BMSC および GDAC2) は、操作を一回しか取り消すことができませんでした。BMSE のこの特徴は、当時の譜面著者にとっては革命だったのです。

  1. 0 ターン目、譜面を開いた直後の状態です。

    BMSE は配置データに対する操作すべてを一時的に記憶します。Undo Buffer Size・Undo Counter に注目。

  2. 1 ターン目の操作、オブジェクト 01 を移動しました。

    譜面に対する操作 1 ターンごとに、行った操作が一時的に記憶されていきます。

  3. 2 ターン目の操作、オブジェクト 02 を移動しました。

    現在の作業履歴の状況はメニューの【ヘルプ → バージョン情報】から参照できます。

  4. 3 ターン目の操作、オブジェクト 03 を移動しました。

    Undo Counter の値は “現在位置のターン / 保持されている履歴アイテムの最新ターン” です。(後述)

  5. 4 ターン目の操作、オブジェクト 04 を移動しました。

    Undo Buffer Size の値は、一時的に記憶されている作業履歴の容量です。

  6. 5 ターン目の操作、まとめて選択して移動しました。

    ここから以降 “元に戻す/やり直し” を行った例を以下に示します。

  7. Undo/Redo: “元に戻す” で作業履歴を 1 ターンずつ戻ります。(0 ターンより前には履歴がないので戻れません)

    “やり直し” で作業履歴を 1 ターンずつ進みます。(5 ターンより先には履歴がないので進めません)

これは、感覚的には Web ブラウザの “戻る/進む” と似ています。

  • “元に戻す/やり直し” 中に新しい操作を行うと、“やり直し” の移動先が変わります

    たとえばターン 5 から 4 に戻って、そこでオブジェクトを書き込むと、その操作が新しいターン 5 として記憶されます。

    ターン 5 からは 43 に戻ることができますが、ターン 4 から “やり直し” しても、もはや旧ターン 5 に進むことはできません (ターン 5 に進みます)。

    操作履歴は、後入れ先出し型のスタック構造になっています。

  • 一時的に記憶されている作業履歴が初期化されるタイミングは、「開く」や「最近開いた譜面」などによって 新しく譜面を開いたとき、Ctrl + N などによる 新規作成時、閉じるボタンなどによる BMSE 終了時、となります。これらの操作を行ったとき、Undo Counter はリセットされ “0 / 0” に戻ります。

    (他のソフトではファイルを保存した時に作業履歴を破棄するものもありますが、BMSE は間に保存を挟んでも “元に戻す/やり直し” が可能です。)

  • 「メモリが許す限り」を超えると BMSE が強制終了します。

    「ErrorNo.7 メモリが不足しています。」

    バックアップは作成されますが、たとえばオブジェクト 100 個を一挙に貼り付けて 50 個まで貼り付け完了した時点でメモリが不足した場合、バックアップ側には残り 50 個が貼り付けられないまま保存されます。

    メモリに余裕がない環境では、こまめに保存して BMSE を再起動する・すべて選択切り取り貼り付け」のような「Undo Buffer Size が大きい操作」は避ける、などの工夫で対処してください。

    メモリ不足エラーの前兆として、「貼り付け」などの編集操作に非常に時間がかかったり (このときストレージデバイスへの書き込み音が確認できる場合もあります)、ページファイルを拡張する Windows OS からの警告が表示される場合もあります (動的拡張を許容する環境に限る [https://atmarkit.itmedia.co.jp/fwin2k/win2ktips/077setpgflmin_max_eq/077setpgflmin_max_eq.html] (外部リンク))。幸運にもこういった兆候を確認できた場合は、即座に譜面を保存して BMSE を閉じてください。

  • “元に戻す/やり直し” が有効な操作は、基本的に配置データへの操作のみです。

    ファイルや譜面ヘッダへの操作は記憶されません。設定パネル項目の変更、定義リストに対する登録・消去・リネームの各操作は元に戻せません。

    定義リストに対する移動 (定義アイテムを上に移動定義アイテムを下に移動)、未使用定義を消去定義リストの整列は、ファイル操作が絡まないので “元に戻す/やり直し” が可能です。

  • 拡張命令タブダイレクト入力枠は “元に戻す/やり直し” の対象外です。テキストボックス内コンテキストメニューから “元に戻す” ことは可能ですが、これは BMSE 自身とは無関係の機能であり、通常 1 ターンしか操作を遡行できません。
  • オブジェクトパネル内 “拍子” タブは配置データとして専用チャンネルを持つため、これに対する操作は “元に戻す/やり直し” が可能です。

BMSE のオブジェクト配置データは、別のソフトに渡すことができます

複数起動した BMSE の間で、一方でコピーした配置データをもう一方に貼り付けたりできます。

コピーもしくは切り取りによって一時的に記憶されたオブジェクトの値と座標は、一種のテキストデータとしてクリップボードに格納されます。これを経由して配置データを渡すことができます。(BMSC [http://tixlab.com/software/bmsc.shtml] (外部リンク) ではクリップボードへの入出力は明示的に行う必要がありました。)

あくまで値と座標のみを扱います。BMSE-A と BMSE-B で同一の配置データを使いまわしても、両者の定義リスト内容が異なれば再生内容も別物になります。コピーした配置番号の定義内容が A と B で同期していれば、再生内容も等しくなります。

BMSE ClipBoard Object Data Format は以下の書式になっています。オブジェクトひとつひとつが以下の情報を保持しています。

bxxayyyyyyyn…

b
  • 0 なら、xx は BGM 以外のチャンネル番号
  • 1 なら、xx は BGM の列番号 [01-32]
xx
  • x 軸座標 (2 桁の符号なし 10 進数整数)
a
  • 0 なら、オブジェクトの属性は可視・通常
  • 1 なら、オブジェクトの属性は不可視
  • 2 なら、オブジェクトの属性はロングノート
yyyyyyy
  • y 軸座標 (7 桁の符号なし 10 進数整数 [0000000-3072000])
  • 値はメインパネル全長における、グリッドの分解能座標を示す
  • 複数小節にまたがる場合、各小節ごとに [192 × 小節長] を加算
  • 貼り付け可能な値の上限は 3071999
n…
  • オブジェクトの値 (可変長 10 進数。型はチャンネル番号に依存)
  • bxx008 なら、有効数字 7 桁の符号つき実数 (BPM 変更値)
  • bxx009 なら、有効数字 7 桁の符号つき整数 (STOP 値)
  • それ以外なら、定義番号の 10 進数換算値 11295
  • BPM / STOP の 8 桁以降の値は、浮動小数点数で大雑把に表す

BMSE ClipBoard Object Data Format を利用できるアプリケーション

bMoL
クリップボード内の配置データを変更し、配置の横軸伸縮を実現。
BmWh [https://cerebralmuddystream.nekokan.dyndns.info/] (外部リンク)
クリップボード内に配置データを作成し、任意の連番配置を出力。
BmrF
BMSE でコピーした配置データを解析し、配置通りに WAV を生成。
woslicerII / woslicerIII [https://cerebralmuddystream.nekokan.dyndns.info/] (外部リンク)
BMSE 型の UI で音声を裁断し、切った通りに配置を BMSE に出力。
Be-Music Helper [https://excln.github.io/bmhelper.html] (外部リンク)
MIDI を裁断しやすく組み換え、woslicer と連携して BMSE に配置。
Mid2BMS [https://mid2bms.net/] (外部リンク)
MIDI から音を裁断して BMSE に配置するまでを自動化。
iBMSC [https://hitkey.nekokan.dyndns.info/ibmsc_ja/] (外部リンク)
BMSE のクリップボードデータを iBMSC に貼り付け可能。ただし複数行の BGM は 1 行しか貼り付けられないし、iBMSC の配置データを BMSE に渡すこともできないので、それを前提に運用する必要はあります。
μBMSC [https://github.com/zardoru/iBMSC/releases] (外部リンク)
BMSE のクリップボードデータを μBMSC に貼り付け可能。μBMSC の配置データを BMSE に渡すことはできませんが、iBMSC の前述の不具合は修正されており、woslicer, Be-Music Helper, Mid2BMS と連携できるはず。

また、クリップボード拡張ソフト (たとえば Clibor [https://chigusa-web.com/clibor/] (外部リンク)CLCL [https://nakka.com/soft/clcl/] (外部リンク) など) を導入すれば、クリップボード履歴を配置データバンクとして活用でき、コピー操作の自由度が向上します。


検索・削除・置換

検索・削除・置換操作には、専用の子ウィンドウが用意されています。

条件を指定してメインパネルを検索し、絞り込んだオブジェクトに対して各種処理を適用します。

このウィンドウから “実行” した操作は “元に戻す/やり直し” が可能です

このウィンドウはモードレスです (開きっぱなしでも譜面編集が可能)。

検索対象の指定

全オブジェクトから検索するか、すでに選択されているオブジェクトから検索するかを決定します。後者は絞り込み検索を行う際に便利です。

  1. まず “全てのオブジェ” からごく大雑把に条件を指定し、選択” する。
  2. その結果をさらに、選択されているオブジェ” から絞り込み検索。
  3. 絞り込んだ選択オブジェクトを目視確認。問題なければそのまま “置換”。

……などのように、「検索・削除・置換」を重ね掛けすることができます。

小節範囲の指定

検索する小節の開始番号と終了番号を範囲指定します。10 進数で小節番号を指定します。

オブジェ番号の指定

検索する定義の開始番号と終了番号を範囲指定します。16 進数または 36 進数で定義番号を指定します。

左右ともに同じ番号を入力して、特定番号のオブジェクトを “選択” し、メインパネル上から見つけやすくする、などの使い方もあります。

列の指定

検索する対象レーンを限定します。各列選択肢 (チェックボックス項目) から有効・無効を切り替えます。選択されている (チェックされている) レーンだけが検索されます。

“Invert / Reset / Select All” は特に「反転」を使いこなすと便利です。

反転
全列のチェック状態を入れ替えます。
全解除
全列を非選択状態にします。
全選択
全列を選択状態にします。

処理

検索条件に合致した対象に適用する処理を、操作選択肢 (ラジオボタン項目) から指定します。

選択
検索条件に該当したオブジェクトをすべて選択します。
削除
検索条件に該当したオブジェクトをすべて削除します。
置換

検索条件に該当したオブジェクトの全番号を、任意の番号に置換します。

置換先定義番号 入力フォームに、置換する定義番号を指定します。

たとえば初期状態から条件を変えずに置換を実行すると、メインパネルにある全オブジェクトの番号が 01 になります

この場合の検索条件は、つまり「全オブジェから検索・全小節を検索・全番号を検索・全列を検索・置換処理を適用・置換先番号 01」という指定と同義です。

右下の “実行” ボタンを左クリックすると、指定した処理を実行します。


注意点など

  • “検索・削除・置換” ウィンドウが非アクティブのとき、このウィンドウの右上の 閉じるボタン を左クリックすると BMSE が強制終了します。バックアップは作成されません。

  • 拡張命令タブには “検索・削除・置換” は適用されません

  • ラジオボタン (排他的な選択肢) は、常に選択肢のどれかひとつだけが有効化されます。複数の項目を同時に有効化したり、すべて同時に無効化したりすることはできません。

  • 不可視オブジェクトおよびロングノート専用オブジェクトは、検索条件に指定できません

不可視・ロングノート・地雷などを検索したい場合

iBMSC [https://hitkey.nekokan.dyndns.info/ibmsc_ja/] (外部リンク)/μBMSC [https://github.com/zardoru/iBMSC/releases] (外部リンク) で処理する:

BMSE とほぼ同じ感覚で “検索・削除・置換” が使用でき、さらに不可視オブジェクトやロングノートオブジェクトも検索できます。

正規表現で処理する:

サクラエディタ [https://sakura-editor.github.io/] (外部リンク)Mery [https://www.haijin-boys.com/wiki/] (外部リンク) などのテキストエディタでは、文字列の検索条件に正規表現を指定することによって、大雑把に検索できます。

フリーゾーン
^\s*#\d\d\d[12]7:[0-9A-Fa-f]+$
不可視
^\s*#\d\d\d[34][1-689]:[0-9A-Za-z]+$
ロングノート (Shift + 書き込み型)
^\s*#\d\d\d[56][1-689]:[0-9A-Za-z]+$
地雷
^\s*#\d\d\d[DEde][1-689]:[0-9A-Za-z]+$

正規表現と BMS 書式に関する知識があれば、さらにきめ細かく絞り込んで削除や置換を行うことも可能ですが、ここでは解説しません。

GDAC2 [https://www.asahi-net.or.jp/~nm4j-tyn/gdac2/] (外部リンク) + 対応レーンスクリプトで処理する:

BMSE で開くことができる譜面も GDAC2 では開くことができない場合があります。適当にレーンスクリプトをカスタマイズするか、面倒なら既存のレーンスクリプトを流用してください。BGM 本数は最低でも 32 本は用意してください。

まずスクリプトを選択します。

レーンスクリプト “BM98 7LineData” は既定で不可視オブジェクトを配置でき、不可視オブジェクトのみを検索することもできます。

「オブジェの検索」ウィンドウで

“裏オブジェ” を検索すれば、不可視オブジェだけが選択されます。

レーンスクリプト “Rhythm-it” で譜面を開いて “裏オブジェ” を検索すると、ロングノートのみが検索されます。

BMSE がサポートしていないフリーゾーン地雷などを検索・編集したい場合は、pmsee-v.gsc を書き換える例なども参考にしてください。

#LNOBJ を使用する:

BMSE 上で、ロングノートを [Shift + 左クリック] では書き込まずに、#LNOBJ (ロングノート終端定義) を用いるのも有効です。この場合、ロングノートの始端は通常の可視オブジェクトから変更する必要がなく、終端は譜面エディタ上ではすべて 1 種類の可視オブジェクトとして扱えるため、“検索・削除・置換” からの一括処理が容易になります。

拡張命令タブ内に #LNOBJ XX を記述します。XX任意の未定義の #WAV 定義番号です。可視オブジェクトの後方に可視オブジェクト XX を書き込むことで、任意の可視オブジェクトから XX までの区間が (再生ソフト上では) ロングノートになります。

たとえば、“#lnobj FF” のように記述します。

小文字を認識しないソフトがあるため、定義番号は大文字で指定してください。

#LNOBJ を使う譜面はファイル拡張子を “.bml” に変更してください。#LNOBJ 命令を知らないソフトは、通常の可視オブジェクトと #LNOBJ を区別できません。譜面拡張子を変更しておけば、#LNOBJ 使用譜面を非対応ソフトは読み込まないので、比較的に安全です。

#LNOBJ は、ある意味では緑色ロングノートよりも便利です。

  • 可視オブジェクトの後方に、可視オブジェクトを書き込むだけでよい
  • 元々の可視オブジェクトをロングノートに置き換える手間が要らない
  • エディタ上で見分けづらいなら、終端番号を一括選択して色分け
  • ロングノートの一時解除は、終端を一括選択して BGM に水平移動
  • ロングノートに戻す場合は、終端を一括選択して演奏領域に水平移動
  • ロングノートの永久解除は、終端を一括削除するだけで済む
  • #LNOBJ は事実上すべての BMS エディタで編集できる
  • 緑色ロングノートは、BGM に移動すると BMSE が強制終了して危険

そのかわり #LNOBJ は、BMSE 上で見分けづらかったり、dttvb 版 [https://github.com/dtinth/UCN-BMSE] (外部リンク)で矩形化されなかったり、一部のソフトで実現できる「ロングノート終端で別の音を鳴らす拡張機能 [https://hitkey.nekokan.dyndns.info/cmdsJP.htm#KEYUP-SOUNDING-AT-ENDPOINT-OF-LNTYPE1] (外部リンク)」を使えなかったり、対応ソフトが普通のロングノートよりもわずかに少なかったりします。

#LNOBJ のサポート状況

非対応
BM98k, BM98de, MixWaver, bemaniaDX, BM2DXEmu, MacBeat, BmsToAvi, BMSV, BMEV, nBMplay, BMS2WAV, BMS Printer, BmsListSorter, BME2WAV, otama, GALLI, SMB, KbMedia
非対応 (ただし Shift で書き込む緑色ロングノートには対応)
BananaBeats, DDR (DDR モードのみ), Aqua'n Beats, O2mania (#LNTYPE 1 宣言必須), o2play (バグ多め), WAview, in_bm2
対応
beatoraja, Bemuse, Pulsus, Angolmois, Sonorous, QMS, Qwilight, rhythm-it! (1.61+, #LNOBJ FZ まで), ruv-it!, nazo (#LNOBJ FZ まで) + Glasopal (#LNOBJ ZZ まで), BMX2WAV, LunaticRave2, ナナシグルーヴ, feeling pomu 2nd, forgetalia++, forgetalia#, charatbeatHDX (1.09+), BMIIDXView2015 (3.01+), iBMSC (3.0+), μBMSC, mBMplay, uBMplay, PMSee-V
複数の #LNOBJ 定義に対応
raindrop, TechnicalGroove

#LNOBJ をサポートしていない再生ソフトは、すくなくとも日本ではもはやほとんど使われていませんが、代替不可能な用途がある WAview などにも対応したい場合は、#LNOBJ の使用を避けてください。各ソフトウェアの正式名称や入手先に関しては bmsplayer data [https://hitkey.nekokan.dyndns.info/bmsplayer_data2010.shtml] (外部リンク) などをご覧ください。


“検索・削除・置換” は応用が利きます。工夫すれば地雷オブジェクトなども #LNOBJ と似た要領で配置できたりするので、いろいろお試しください。


“検索・削除・置換” ウィンドウの操作

左クリック、TabShift + Tab
各カラムにフォーカスを移動
左クリック、方向キー
各カラム内の項目を移動もしくは選択
フォーム右クリック、アプリケーションキー

入力フォームのコンテキストメニューを開く

チェックボックス を左クリック、チェックボックス 項目にフォーカスして Space
フォーカスがあるチェックボックス項目の有効無効を切り替え
ボタン左クリック、SpaceEnter
フォーカスがあるボタンを押下
閉じるボタン か [閉じる] を左クリック、Alt + F4
“検索・削除・置換” ウィンドウを閉じる
Alt + F6
メインウィンドウと子ウィンドウ間のフォーカス移動 (各ウィンドウを左クリックする操作と等価)
タイトルバー右クリック
コントロールメニュー (システムメニュー) を開く
中央カラム BGM 列の垂直スクロールバー
  • ホイール回転で設定値量ずつスクロール
  • ノブを左ドラッグでライブスクロール
  • トラックを左クリックでページ単位スクロール
  • 【Windows 2000/XP 以降】

    トラックを [Shift + 左クリック] で、クリック位置に瞬時にスクロール

  • トラックを右クリックでコンテキストメニュー開く
  • 矢印アイコンを左クリックで行単位スクロール
  • HomeEnd でリスト先頭/末尾へスクロール
  • Page UpPage Down でページ単位スクロール

番号入力フォームの制限

小節範囲の指定フォーム
  • 文字列長: 3 文字まで
  • 入力すべき値: 10 進数整数
  • 記号や多バイト文字: 0 とみなす。先頭が数字なら数字部分のみ解釈
  • 負数: 範囲として解釈
  • 小数: 始端側切り上げ、終端側切り捨て
  • 空の値や 0: 範囲として解釈
オブジェ番号の指定フォーム
  • 文字列長: 2 文字まで
  • 入力すべき値: 36 進数整数
  • 記号や多バイト文字: 謎解釈 (?)
  • 負数: 範囲として解釈
  • 小数: 始端側切り捨て、終端側無視
  • 空の値や 0: 範囲として解釈
置換番号の指定フォーム
  • 文字列長: 2 文字まで
  • 入力すべき値: 36 進数整数
  • 記号や多バイト文字: 謎解釈 (?)。結果によっては BMSE が強制終了
  • 負数: 強制終了
  • 小数: 強制終了
  • 空の値や 0: 定義番号 00 に置換

数値入力は桁を揃えなくても受け付ける。大文字小文字も問わない#001 小節を 1 と指定したり、定義番号 0Aa と指定してもよい。

マルチバイト文字は数字より大きいインデックスとして扱われるので、おそらく文字コード換算と思われる (ただし変換規則は筆者にはわかりません)。

番号 00 のオブジェクトは、編集中は他のオブジェクトと同様に扱えるが、保存されない。00 は一時的な置換先 (他の番号に影響を与えない隔離番号) として利用できなくもないが、安全性が疑わしいので推奨はしない。

不正な置換による強制終了後、編集作業バックアップ譜面 ___bmse_temp.bms は、指定値を (おそらく) 文字コードに換算して置換済みとなる (一例)。もし置換結果も不正な値だったなら、このバックアップ譜面を読み込むと BMSE が再び強制終了する。