doubledepth

/

_wsh_bms2bmson.js

v0.2.5

更新履歴

v0.2.5
  • ImageMagickのversion検証用関数がpreReleaseVersionを誤判定していたのを修正。
v0.2.4
  • 必要なImageMagickの最小versionを4箇月前の7.0.9-6から最新版7.0.10-3に変更。
  • BMSONへの変換時に非ASCII文字をescapeするoptionESCAPE_NON_ASCII)を追加。
  • BMSONへの変換時に改行文字をLFのみにするoptionUSE_UNIX_NEWLINE)を追加。
  • 解説頁をhttps://hitkey.nekokan.dyndns.info/bmson/_wsh_bms2bmson/に移した。
v0.2.3
  • #LNTYPE 2を用いたBMSを変換できなくなっていたのを修正した。
  • #999を用いたBMSを変換すると無限loopに陥っていたのを修正した。
  • 必要なImageMagickの最小versionを一年前の7.0.8-14から最新版7.0.9-6に変更。
  • [v0.2.2] Uploadし忘れていたため欠番。BigNumber.jsのversionを7.2.1から9.0.0に変更。
v0.2.1
  • BMSON形式からBMS形式へ変換する際、BMS仕様に準拠するLAYER画像を出力する。
  • 一部のBMS-on定義番号の置換に失敗していたbugを修正した。
  • "bga"関連の"id"番号を詰めてから変換するようにした。
  • "lines":[]を「小節線のないBMS」に変換できるよう修正した。
  • 変換後のBMSのData文の長さが、LR2の文字列長さ上限(102400)を超えないようにした。
v0.2.0
  • BMSON形式からBMS形式への、BMS-on記法による擬似的な)変換をsupportした。
  • 定義されたBMS-onが別の#WAV定義に上書きされると変になるのを修正した。
  • いくつかのあまり知られていないBMS tagsをsupportした。値を右から左に渡すだけ。
v0.1.11
  • #ARGBおよび透過channels#xxx0B0E)の変換をsupportした。画像生成はしない。
  • LAYERとして#BGAを切り出す際に、canvasを透過し忘れていた。このbugを修正した。
  • 前述のbugの修正に伴い、v0.1.10の例示BMSに、出力画像確認用のHTML文書を追加した。
v0.1.10
  • #EXBMPに部分的に対応した。当面はalpha channelを含まないBMP画像のみ変換する。
  • #DIFFICULTY 4のような、余計な空白を含む値に対応しきれていなかった。直した。
  • Notes/Eventsが出尽くした後も、長さ一拍未満の小節が続く間は図表を継続するようにした。
  • COLONで区切られたHEADER文や、SPACEで区切られたDATA文も、受け入れるようにした。
v0.1.9
  • #EXRANK ddd#DEFEXRANK dddと同一視するようにした。(本来の#EXRANKzz dddとは異なる)
  • #BPM 0"init_bpm":0に変換してしまっていたbugを修正した。
  • #TOTAL 0"total":0に変換できなかったbugを修正した。
  • #DIFFICULTYの打ち間違いを(ある程度)吸収するようにした。
v0.1.8-2
  • var LIMITED_RESOLUTION = 3;のとき、"resolution"を最小化するようにした。
  • [v0.1.8-2] 前述の処理が酷くbuggyだったので一時的に無効化した。
  • 値が0や負数の#STOP sequenceを従来は無視していたが、今回から変換するようにした。
v0.1.7
  • #BMP定義があるが#xxx0[467A]がない図表を変換しようとすると強制終了する問題を修正。
  • FULL STOPから始まり数字が後続する文字列を、有効な小数値として解釈するように変更。
  • 図表基底名の重複に対処するために、出力される図表名に元の拡張子も含めるように変更。
  • #GENRE stringを複数行に複数回記述する、異なる値の多重定義を受理するように変更。
v0.1.6
  • #BMP00/#BGA00が存在する図表で、bga関連idの並べ替えが失敗していたbugを修正。
  • ImageMagick 7以降で不要になったconvert commandをやめた。magickのみを使う。
v0.1.5
  • #EXRANK#CHANGEOPTIONの変換後の"y"座標が再計算されなかったbugを修正。
  • option_events[n].notesoption_events[n].triggersに改称した。
  • 拡張子*.m4vも動画とみなすようにした。
v0.1.4
  • 必要なImageMagickの最小versionを一年前の7.0.7-11から最新版7.0.8-14に変更。
  • #CHANGEOPTIONzzも変換するようにした。
v0.1.3
  • #TEXTzz#EXRANKzzも変換するようにした。
v0.1.2
  • #BGAの不正な値を受け入れていたbugを修正。
  • 出力されるBMSONのbga関連idをsortするように修正。
  • 出力されるBMSONのbgaHeaderに余計なkeysが生えていたbugを修正。
  • #MOVIE#VIDEOFILEにごく大雑把に対応(bga_events"y":0が空いていれば挿入)。
  • 「同じ内容のBGA関連notesが連続する場合、後続分を休符に置き換える処理」をやめた。
v0.1.1
  • #BGA関連処理を多少改善した。
  • #BMPの多重定義を検出する処理が穴だらけだったのを改善した。
v0.1.0
  • #BGAzzの変換に対応した(つもり)。
  • #BMP00が変換されていなかったbugを修正。
  • PNG画像を生成出力しないようにもできる設定を追加var GENERATE_PNGS = false;)。
v0.0.17
  • LongNotesの入れ子が現れうるbugを修正。
  • Notesを一個も配置していない音声定義は変換しないように修正。
v0.0.16
v0.0.15
  • 指定されたOUTPUT_FOLDERが存在しない場合に異常終了していたv0.0.14のbugを修正。
v0.0.14
  • BMS-on記法において、自己参照#WAVyy C-yyは波形始端とみなすように修正。
  • 各設定項目のPath区切り文字として、U+002F ‘SOLIDUS’も使えるように修正。
v0.0.13
  • BMS-on記法において、各#WAVの最初のnoteが継続指示"c":trueなら波形始端"c":falseとみなすように修正。
  • 基底名が一文字の図表(“tit0.bmsなど)が変換対象として列挙されなかったbugを修正。
  • 始端と終端の定義番号が異なる#nnn[51-69]型LongNotesを、BMSON拡張定義"up"に変換。
  • 「便宜上の192分音符」を仮定しない設定を追加。var LIMITED_RESOLUTION = 3;
v0.0.12
  • BMS-on記法において、波形始端"c":falseに競合する継続指示"c":trueは無視するように修正。
  • 継続指示#WAVxx C-yyと同名のfileC-yyが実際に存在する場合は波形始端とみなすように修正。
  • GrooveGauge増加率を、変換前と変換後で可能な限り一致させるように修正。
  • unsigned longでない#PLAYLEVEL値を"level_string"に隔離するように修正。
v0.0.11
v0.0.10
  • #SCROLL/#SPEED/#EXTの変換をsupport。
  • Scrolling関連命令に不正な値が指定される状況をちょっぴり想定し、ちょっぴり対処。
v0.0.9
  • #RANK#TOTALの誤変換を修正。
  • BigNumber.js v4.1.0 v7.2.1
v0.0.8
  • #STP(bemaniaDX書式)を実装。
v0.0.7
  • #LNTYPE 2(MGQ書式)を実装。
v0.0.6
  • 重複するBGM notesが変換されないBugを修正。
v0.0.5
  • FilePathの定義を変換する際に、FilePath文字列の加工を誤っていたのを修正。
v0.0.4
  • #xxx5nの行に#LNOBJの番号が現れると強制終了するBugを修正。
  • HDX/IIDXvのC-like Comment Syntaxを実装。変数HDX_COMMENTを追加。
v0.0.3
  • Installer版ImageMagickに対応できていなかったのを修正。
  • 一度以上参照される未定義#WAVに任意名を設定できる変数BLANK_AUDIOを追加。
v0.0.2
  • LongNotesが変換されないBugを修正。
  • 一部の画像がPulsusなどで警告される現象を、ImageMagickにPNG32を強制して回避。
  • #OPTION charatbeatHDX:LONGMODE nも、beatoraja用BMSON key "t"に反映するよう変更。
v0.0.1
  • 初公開。

概要

BMS形式の図表群をBMSON形式に一括変換する、Windows Script Host用のJScriptです。

G2R2014/BOFU2015/BOFU2016/BOFU2017は一括変換処理が完遂されたことを確認しています。(いずれもpackage版の図表のみ。変換の正誤は確認していません。)

動作環境

  • Windows Vista以降
  • ImageMagick 7.0.10-3以降(Portable版を推奨)

Installer版ImageMagickは環境変数%Path%の優先順位などを変更するらしいので本頁では推奨しませんが、このWSH JScript自体はInstaller版ImageMagickを参照しても変わらず動作します。DLL版よりはstatic版のほうが安定して動作するらしいです。

特徴

  • BMS仕様のBackGround Animationを、BMSONの仕様に適合するように画像filesごと変換できる。(元の画像には影響を及ぼさない。新たに画像を生成して元々のBMS folderに追加する形)
  • 変換対象図表のText Encodingを個別に指定できる。
  • 倍精度浮動小数点数で表現しきれない値も正しく変換できる(あんまり意味ないけど)
  • BMSON仕様に無い不可視notesや地雷notesの情報も変換して残す。後で何かに使えるかも。

使い方

  1. _wsh_bms2bmson.js.txtを「名前をつけて保存」する。
  2. 保存したText fileを、メモ帳などのText Editorで開く。
  3. 先頭の“Config”区間内にある大文字の変数の値を、適宜設定する。詳細は別項を参照
  4. 保存してText Editorを閉じる。
  5. このText fileの名前を変更する。名前末尾の.txtを削除し、拡張子.jsにする。
  6. 拡張子.jsに変更したText fileを、double-clickなどで実行する。
  7. 変換が完了したら、Enterを押してConsoleを閉じる。
  8. 保存先として指定したfolderに、変換済みfilesが出力される。出力されたBMSON filesおよびPNG files(あれば)を、元のfolderに全てcopyする。保存先folderの中身ごと「切り取り上書き」が楽。

注意点

  • 設定はScript fileをメモ帳などで直接編集することによってしか行えません。Drag-and-Dropには対応していません。

  • File pathはJavaScriptの文字列として指定する必要があります。Windowsのpath区切り文字\は、引用符の中では二重に書かなければなりませんので、ご注意ください。たとえば:

    var TARGET_FOLDER = "C:\\Users\\IRUser\\Desktop\\BMS";

    \のかわりに/を用いても構いません。

    var OUTPUT_FOLDER = "C:/Users/IRUser/Desktop/BMSON";
  • #RANDOM#SWITCHにはいまのところ対応していません。分岐を持つ図表は変換せずskipします。BOFU2017一括変換中に無視される図表が多くて申し訳なくなったので、今後対応するかも。

  • 図表fileのHashの算出にcertutil.exeを用いています。Windows 7以降ではSHA-256が、Windows VistaではSHA-1が算出され、変換完了後にLog.txtに記録されます。

  • 変換後の分解能を制限したはずであるにもかかわらず、LIMITED_RESOLUTIONの制限を超える"resolution"の値が出力される場合があります。これは「値をこれ以上丸めると、同時押しになるべきでないnotesが同時押しに化けてしまう」という状態を抑止した結果かもしれません。かわりにBmsONEなどで変換してみてください。

  • 「透過用の画像とは別に、元の非透過画像がそのままBGA BASEとして使われる状況」もあるので、変換前の画像は消さないでください

  • File名が.(FULL STOP)から始まる図表は読み込みません。Mid2BMSの中間filesや、Mac OS特有のResource Forkなどがこれに該当します。これらは時々BMS書庫に同梱されています。

Configの詳細

var TARGET_FOLDER = "D:\\bms\\BOFU2017";

変換対象BMS群のroot folderをfull pathで指定する。JavaScriptの文字列値なので、WindowsのPath区切り文字\は引用符内では二重に記述する必要がある(\\)。面倒ならSLASH区切りでも大丈夫。

var OUTPUT_FOLDER = "D:\\bms\\BOFU2017toBMSON";

変換されたfilesが出力されるべき場所、つまり保存先のroot folderをfull pathで指定する。指定したPathにfolderが存在しない場合は、変換実行時に自動的に作成される。

指定したPathにfolderが既に存在し、その配下に変換済みBMSON/PNG filesが既に存在する場合、変換実行時に前回の出力済みfilesを確認なく上書きする

var IMAGE_MAGICK = "C:\\ImageMagick-7.0.10-3-portable-Q16-x64";

ImageMagickをinstallした場所を、full pathで指定する。EXE fileの位置」ではなく「Folderの位置」。ImageMagickをinstallした場所によっては、Scriptを管理者権限で実行する必要があるかも。

var DEFAULT_CHARSET = "Shift_JIS";

読み込み時にUnicode Byte-Order-Markが見つからなかった図表のうち、変数FORCE_CHARSETS内で文字符号化方式が指定されていない図表は、ここに指定したEncodingで読み込まれる。

Code Page Identifiers“.NET Name”を指定できる。有効な名前の一覧は、Windows Registry Entry "HKEY_CLASSES_ROOT\\MIME\\Database\\Charset"配下SubKeysを参照されたい。

var FORCE_CHARSETS = {"Chart Path": "Encoding Name", …};

TARGET_FOLDER配下に「個別に文字符号化方式を指定したい図表」がもしあれば、そのpathとEncoding名をCOLONで組にして指定することができる。複数の組をCOMMAで区切って列挙できる。

Full path、またはTARGET_FOLDERから子方向へのpath」が有効。後者の場合、TARGET_FOLDER"Chart Path"を足し合わせてFull pathが構築される。指定された位置に図表が存在すれば、Pathと組にされたEncodingで読み込む。指定された位置に図表が存在しないなら読み込みをskipする。

var LIMITED_RESOLUTION = 3;

Rhythmの表現精度を、0から3までの整数値で指定する。

0
無制限。最高精度。9007199254740991を超える値は引用符で括られる。
1
beatorajaが解釈できる範囲内に値を丸める(2147483647以下)。
2
BmsONEが解釈できる範囲内に値を丸める(24000以下)。
3
[v0.0.13]「便宜上の192分音符」を仮定しない(結果、既定値240を下回る可能性も)。

精度が足りずにが同時押しに化けうる場合は、それを抑止するために変換後の"resolution"が制限値を超えることがある(たとえば設定値2 vs. “Lots Of Spices [Abusive]”)。BmsONEならうまく変換できる可能性もあるので、そちらをお試しください。

参考までに、Bemuse/raindropの上限は1.7e±308BMSON仕様やPulsusの上限は4294967295

var OMIT_FALSY = true;

trueなら、「省略してもしなくても大部分の実装で解釈が変わらない値」を省略する。具体的には"sound_channels"配下の、"c":false"l":0、および"x":0。これらの各key-value pairsは出力されない。"y":0を省略すると実装によって解釈が異なるので、これは省略しない。)

falseなら、Falsyなkey-value pairを省略しない。CircularRhythmをsupportしたい場合や、BMSON仕様を遵守したい場合は、falseに変更されたい。

var LINIFY = false;

trueなら、出力されるBMSON codeを改行しない。

var BLANK_AUDIO = "___undefined___";

[v0.0.3] BMS図表内で一度以上参照されている#WAV番号のitemが未定義である場合、BMSONへの変換時にこの変数の文字列値が"name"の値として使われる。

値は空文字列("")か、Windowsの妥当なfile name文字列を指定する。"CON"とか書くと叱られる。

var HDX_COMMENT = false;

[v0.0.4] trueなら、charatbeatHDX VIOLETおよびBMIIDXView2015のC-like Commentを解釈する。

var GENERATE_PNGS = true;

[v0.1.0] falseなら、PNG画像filesを実際には生成せず、図表上での定義内容の変換のみにとどめる。

var BMSON_TO_BMS = false;

[v0.2.0] trueなら、BMS filesを検索せず、かわりにBMSON filesを検索し、BMS形式へ変換する。

var ESCAPE_NON_ASCII = false;

[v0.2.4] trueなら、BMSONへの変換時、非ASCII文字をescapeする。これにより、他機種との互換性を損なうことなく、特定の機種で非ASCII文字の音声や画像などを参照できるようになる。

var USE_UNIX_NEWLINE = false;

[v0.2.4] trueなら、BMSONへの変換時、Windowsの既定の改行文字CRLFのかわりに、UNIXの既定の改行文字LFを使う。