doubledepth

近況

  • Secure Loginの自動更新が昨日降ってきて、WebExtension版に誘導され、それがFirefox 51以上で問題なく動作したので、当日記で無効化していたwebclapを一時的に差し戻しました。
  • userContent.cssuserChrome.cssでは、Firefox自体の#searchbarなどにCSS ime-modeを適用できません。Users’ dataの収集を始めて騒動になったStylishを、仕方なく使い続けています。
  • pupulyやその他いくつかのsiteがHTTPS化していたのを見つけたので、それらを参照していたBMSE非公式helpなどを近日中に改訂します。あと、ruv-it!のURLもWeb Archiveに張り替えなきゃ……
  • 先の段落を書いてから改訂・修正しました。もう限界。寝ます。

酷い分解能を見た

Lots Of Spices[This is Not A Game]” (00_LOS_Frdy.bms)は分解能201600000を要求するようです。

#01202:0.0000025
#01201:01
#01201:0002
#01201:1R00001S

#012を正確に再生するためには「4/4拍子小節の1/400000の長さ」を「4等分」できる精度が必要です。仮に他の小節#XXXが「4/4拍子小節を3等分するrhythm」を記述しているなら、#012#XXXの両方を正しく表現するための単位として「4/4拍子小節を4800000等分する精度」が要請されます。この調子で全小節を表現できる最小単位を求めたところ、件の分解能が算出されました。

BlackCity [7EXTRA]” (Blackcity_spa.bme)は、たった一小節だけで先の分解能2億を凌駕します。#073では、「4/4拍子小節の13/16の長さ」が「13等分、52等分、39936等分、60385等分」されます。この小節の分解能は228311040です。じつのところ、LR2でさえ#07306を正しく再生できません。なお私の計算が正しければ、この図表全体の分解能は318950522880です。千億分音符なる力ある言葉。

お知らせ

今後はwebclapに反応できません。Webclapへのlinkを撤去し、代わりのservicesを探すか、それが見当たらなければcomment欄などを設置する予定ですが、ちょっと時間がかかりそうです。

Firefox 51.0.1にupdateしたところ、Webclapなどの古いweb servicesのlog-in画面から先に進めなくなり、何度log-inしてもふりだしに戻されます。Secure LoginがFirefox 51で動作しないっぽい? Firefox 51の更新内容のひとつ「安全でない接続で配信されたログインページに対して警告が表示されるようになりました」とも関係があるかもしれませんが、わかりません。Firefoxの代わりにSRWare Ironでもlog-inを試みましたが、今度は自分が設定したはずのpasswordが通らず困惑しています。

Web全体が非HTTPSなpagesを締め出す方向に向かっていることは数年前から明らかでしたが、webclapもまた非HTTPSなserviceであることを、私は今に至るまで忘れていました。他にはFC2 blogなども影響がありそうです。つらい。

woseqについて

BMSからの変換も可能なBMSON editorです。仕様への準拠度や安定性・操作性の観点から、現在はbms2bmsonおよびBmsONEを使用することを強くおすすめしますが、音声channelsの把握しやすさや選びやすさではwoseqがBmsONEを凌駕している部分もあります。図表著者は常に波形に興味があるわけではないので、波形をひとつしか描かないwoseqのほうが編集効率が勝る状況も珍しくありません。とはいえLayered notesや「BMSON向けの音構成(後述)」を編集する場合は、複数channelsの波形を同時に閲覧できたほうが便利であろうことも明らかです。結局は大が小を兼ねる形でBmsONEのUIに収斂するのですが、従来通りに波形が実際に細切れにされたBMSをBMSON形式に変換して編集しようとすると、今のBmsONEではまだ辛いのですよね……BmsONEの検索機能がchannel列の描画そのものもwoseqのように絞り込んでくれれば、見通しは良くなりそうに思うのですが。

「BMSON向けの音構成」とは、BMSONのon-demandな音声裁断機能を利用しつつも、裁断されたKEY音が可能な限り綺麗に響くように、単独の楽器のnotesを複数の波形に分けて書き出す手法を指します。この手法をなんと呼ぶべきかわかりませんが、BMSON専門家たちの間では名前がついているかもしれません。BOFU2016において、TEAM-BMSONのいくつかの作品がこの手法を採用していました。たとえば以下の音声群はGoliath(62–68小節)からの引用です。(および、Test用の差分

以下の一本の波形をそのまま裁断すると、完璧に演奏しない限りKEY音の響きが濁ります。

そこで“Goliath”はKEY音の残響成分を潰さずに確保するべく、三本の波形に音符を出し分けています。

woseqの調査まとめに戻ります。私が知る範囲では、付けのbinaryが最終版ですが、この版のwoseqから出力されるBMSON fileはBMSON 1.0.0-beta仕様(版)に準拠しません。woseqが出力したBMSON fileをBmsONEで開いて保存しなおすのが簡単ですが、確実を期すならtext editorsなどでBMSON fileを開き、いくつかの箇所を修正する必要があります。

  • BMS, BME, BML, PMSからの変換が可能。非ASCII文字を扱う場合はcopied UTF-8 BMSが必要。
  • ただし、まともに視覚化され編集できる図表は5 keysと7 keysのみ。
  • “Convert from bms”からBMS fileを選択して開いた時点で、original BMSと同じ基底名の*.bmson fileが生成される。この時点では暫定的な変換は済んでおり、"bpm_events""stop_events""bga"関連の内容も残っている。
  • BMSからの変換後、生成された*.bmson fileは明示的に“Open”されなければならない。それを怠ったまま“Save”すると、*.bmsonのみならずoriginal BMSさえもBMSON codeで上書きされ、変換元となったoriginal BMS fileの内容は失われる。怖すぎ。
  • BMSからの変換後に正しく“Save”されたBMSON file(仮称asdf.bmson)は、"bpm_events""stop_events""bga"関連の内容を失う。もし必要なら、変換直後のBMSON fileを確保しておくこと。"bga_notes" / "layer_notes" / "poor_notes"の各keyは、"bga_events" / "layer_events" / "poor_events"に変更すること。
  • もし必要なら、"banner""banner_image"に変更すること。
  • "subartists" keyはまるごと削除するか、値nullを空の配列[]に変更しなければならない。必要なら文字列値の配列要素を含めてもよい。値がnullのままだとbeatorajaなどにrejectされる。
  • もし必要なら、"subtitles""subtitle"に変更すること。
  • "resolution": 0なので、仕様に準拠する実装は分解能として240/拍を適用する。必要なら適宜変更してもよいが、woseqのmain panelは描画上は240以外の値に対応していないように見える。BMSでいう小節長も内部的には正しく変換されるが、woseqの表示上の小節線位置は変わらない。
  • もし必要なら、"mode_hint"に適切な値を指定すること。
  • 仕様に忠実な実装は、"version": "v1.0"を不正な値とみなすかもしれない。不安なら値を"1.0.0"に変更すること。
  • ubmpathにはuBMplay.exeのpathを指定する。非ASCIIの文字を使うならUTF-8 encodingで保存すること。BOMの有無は問われない。
  • “Test for uBMPlay”を実行すると、fbmsonplayのようにBMSON図表を一時的にBMS形式に変換してuBMplayでpreviewする。woseq.exeの同位に_temp.bmsが生成され、これがuBMplayに渡される。_temp.bmsはBOMなしUTF-8なので、非ASCIIの定義名はuBMplayでは参照できない。なお_temp.bmsの改行文字はU+000A (LF)。この一時fileはwoseqを閉じたとき消滅する。
  • 存在しない音声をwoseq上で参照すると強制終了する。
  • LongNoteはBMSからの変換時に解除される。
  • woseq windowの高さは自動的にdisplayの高さに合わせられる。が、displayの高さそのものが低い場合は、定義欄の上端あたりから描画が変になる……
  • BMSでいう#RANKは良い感じに変換される。
    判定難易度名BMSBMSON
    VeryHard#RANK 0"judge_rank": 60.0
    Hard#RANK 1"judge_rank": 70.0
    Normal#RANK 2"judge_rank": 84.0
    Easy#RANK 3"judge_rank": 100.0
    VeryEasy#RANK 4"judge_rank": 120.0

以下は後日追記分。

  • #WAV00が定義されたBMSを変換しようとすると、強制終了する。
  • 定義されただけの未配置の#WAV番号が存在するBMSを変換しようとすると、強制終了する。
  • #999に内容があるBMSを変換しようとすると、強制終了する。(これはbms2bmsonも同様)
  • MP3などを参照しようとすると、強制終了する。
  • 定義リストの音声previewは、4/4拍子小節1小節分の長さまでが再生される(BPM依存)。
  • “PrevMax”がどこに作用するのか、単位は240/拍なのか192/小節なのか別の何かなのか、不明。
  • BMSONのLongNoteは視覚化されないし編集できないが、長さ"l"の値は保持される。
  • 不可視notesは裁断予定点に置換される。fading gears, still-burning soul. [tale of notes]"c": true」を検索すると、それらしき例がいくつか見つかる。

CircularRhythmについて

Web BMSON player。専用の図表を用意して、http://circularrhythm.github.io/のメニュー画面にBMS/BMSON folderをdropすれば、任意のBMSON図表をplayできます。"x"座標の割り振りは以下の通り

CircularRhythm (Single)
Blue Green Yellow Red Special
4 3 2 1 5
CircularRhythm (Double)
Blue Green Yellow Red Special Red Yellow Green Blue
4 3 2 1 9 5 6 7 8

すくなくともSingle modeに関しては「SCRATCH notesのない5 keys図表」とほぼ同じなので、BMSEなどで下地を作ってbms2bmsonに渡すことができます。例としてsightCircularRhythm用差分を作りました。ただこれ、いまのところBemuseでしか図表著者の期待通りに動作しないんですよね……"mode_hint": "beat-5k"に変更すれば、Pulsusやraindropでもうまくいくのですが。

  • CircularRhythmは"stop_events"を解釈しようとするが、うまくいかない。
  • "bpm_events""stop_events"が同じ"y"座標にあるとき、beatoraja 0.3.7は"bpm_events"よりも先に"stop_events"を適用してしまう。(Original版BMS形式ではBPM変更が優先されている)
  • BananaBeatsは"stop_events"をうまく解釈できれば恰好良い。うまくいかない場合が多い。
  • BananaBeats, beatoraja, Bemuse, Pulsus, raindropの場合、いくつかのkey-value pairsは省略できる:
    • "c"が省略された場合、"c": falseと解釈される
    • "l"が省略された場合、"l": 0と解釈される
    • "t"が省略された場合、"t": 0と解釈される(beatoraja extension)
    • "x"が省略された場合、"x": 0と解釈される
    しかしCircularRhythmで"notes"配列要素のmembersを省略すると、音が鳴らなかったりする。

fbmsonplayについて

結論から書くと、現在はfbmsonplayの代わりにbeatoraja, Pulsus, raindropなどを使用するべきです。これは過渡期を凌ぐための暫定的な間に合わせのviewerであり、迅速に実装することが優先されたはずです。BMSON関連toolsが出そろった現在は役目を終えており、もはやmaintenanceされないでしょう。

  • fbmsonplay.exeにBMSON fileをdrag-and-dropなどで渡すと、同位のuBMplayでpreviewする
  • (BMSON形式をuBMplayで疑似的に再生するために、中間的な_temp.bmsが生成される)
  • 2P側SCRATCH note(s)を持つ10 keysまたは14 keysのBMSON図表を渡すと、強制終了する
  • "sound_channels"配列の先頭側から1295番目までの要素([0]..[1294])が、正常に#WAV定義として変換される。1296番目以降は定義番号が化ける(#xxxyy:[1[2[3など)
  • LongNoteは決め打ちで#LNOBJ ZY(1294番目の音声channelが存在する場合さえ)
  • 音声裁断予定点は決め打ちで#WAVZZ(1295番目の音声channelが存在する場合さえ)
  • 分解能は決め打ちで192/四拍子小節……のはずだが偶にぶれる
  • "bga_header", "bga_events", "layer_events", "poor_events"には対応しない
  • "bpm_events", "stop_events"には対応しない
  • Layered notesを用いたBMSON図表を渡すと、中間BMS生成段階で応答を停止する
  • 中間BMSの#WAVにはabsolute pathが定義される
  • 中間BMSの改行文字は'LINE FEED (LF)' (U+000A)、文字符号化方式はUTF-8 (without BOM)
  • したがって言語環境次第では、path文字列に非ASCII文字を含んでいる音声は、再生されない
  • _temp.bmsのencodingをANSIに変更してuBMplayに投げても、:が定義に含まれる限りerror

Pulsus.exeuBMplay.exeにrenameし、その同位でfbmsonplay.exeを使うことは可能です。settings.jsonから"assistMode": "Autoplay"を指定しておき、非ASCII pathに出くわしたら_temp.bmsをBOMつきUTF-8で保存して再び投げます。面倒ならPulsus.exe*.bmsonをdropしましょう。

Test用BMSON差分。いつものFoon。音声も画像も定義数1300以上。clapの座標を"x":7に変えればLayered notesになる。BPMを1回変更、STOPを256回使用。音声裁断予定点を最後で無理やり使用。beatorajaとPulsusではおおむね図表著者の期待通りに再生される。Bemuseとraindropでは画像が描画されないが、音声と図表はおそらく図表著者の期待通りに再生される。BananaBeatsは現時点では多重channelsをsupportしていない。Playback Behavior — bmson-spec 1.0.0-beta

[beatoraja, Bemuse, CircularRhythm, Pulsus, raindrop]
ひとつの音声が複数のchannelsに多重に定義された場合、その音声の波形は複数同時に鳴らすことができる。
[BananaBeats Alpha Build 20161203] (abstract image)
BananaBeatsは、多重に定義された音声を常にひとつしか鳴らさない。

bms2bmsonについて

  • #WAV, #BMP, #BPM, #STOPを各01-ZZまで扱える
  • #WAV00も一応変換されるが、肝心の#xxx[DE]xが無視されるので、地雷は事実上非対応
  • 不可視objects (#xxx[31-49])は可視notesに変換されるので、変換前に除去しておく
  • #RANDOM分岐が存在する図表を変換すると、強制終了する
  • 'SPACE' (U+0020) indented channels (#xxxyy:…)を持つ図表を変換すると、強制終了する
  • LongNotesは#xxx[51-69]#LNOBJも始点側が可視notesに変換され、終点側は捨てられる
  • 分解能は「240/拍」。「BMSEが表現できないrhythm」は変換時に丸められうる
  • 非ASCIIの文字を扱う場合は、変換対象の図表をUTF-8 encodingでcopyしておく
  • 変換後に"judge_rank""total"を編集する(基本値100
  • 9k/10k/14k図表は、変換後に"x""mode_hint"を編集する
  • #STOP objectsが存在する場合、変換後に"duration"を編集する(通常は値を5倍に)

停止時間はBMSでは192分音符単位でしたが、BMSONでは"resolution"の値に依存します。

(BMSON "resolution": 240)
noteBMSBMSONLRS
448240480
5N/A192384
824120240
161260120
3263060
6431530
128N/AN/A15
1921510

BMSON仕様によれば停止時間は分けて書けますが、それを解釈できる実装は現在Bemuseのみです。分割記述なしなら、Bemuseに加えてbeatorajaとPulsusも、図表著者の期待通りに"stop_events"を解釈してくれます。raindropとBananaBeatsの"stop_events"解釈はよくわかりません。

変換後のBMSON図表の"resolution"を変更すれば、「BMSEで表現できないrhythm」も編集することは可能です。たとえば128分連打を「192分音符と共存可能な形で」表現するなら、分解能に480を指定し、"y"座標を15刻みで加算しつつnotesを書き込みます:

{"info":{"init_bpm":140,"judge_rank":100,"mode_hint":"beat-7k",
"resolution":480,"title":"128th note","total":150},"lines":[{"y":0},{"y":1920},{"y":3840},{"y":5760}],"sound_channels":[{"name":"kick.wav","notes":[{"x":1,"y":1920},{"x":5,"y":2880},{"x":1,"y":3360},{"x":3,"y":3375},{"x":5,"y":3390},{"x":7,"y":3405},{"x":1,"y":3420},{"x":3,"y":3435},{"x":5,"y":3450},{"x":7,"y":3465},{"x":1,"y":3480},{"x":3,"y":3495},{"x":5,"y":3510},{"x":7,"y":3525},{"x":1,"y":3540},{"x":3,"y":3555},{"x":5,"y":3570},{"x":7,"y":3585},{"x":1,"y":3600},{"x":3,"y":3615},{"x":5,"y":3630},{"x":7,"y":3645},{"x":1,"y":3660},{"x":3,"y":3675},{"x":5,"y":3690},{"x":7,"y":3705},{"x":1,"y":3720},{"x":3,"y":3735},{"x":5,"y":3750},{"x":7,"y":3765},{"x":1,"y":3780},{"x":3,"y":3795},{"x":5,"y":3810},{"x":7,"y":3825},{"x":1,"y":3840},{"x":5,"y":4320}]},{"name":"kick.wav","notes":[{"x":3,"y":2400},{"x":7,"y":3120},{"x":3,"y":4080},{"x":7,"y":4560}]}],"version":"1.0.0"}

BmsONEは現時点では、128分音符や、"stop_events""bga_events""layer_events""poor_events"を編集できません。それら非対応のrhythmや、非対応eventsの"y"座標や"duration"値は、BmsONE上で分解能を変更したとき変更に追従しないので、自分で書き換える必要があります。

beatoraja 0.3.7に関する調査

正しく調査できていない可能性があります。有名でないtagsは調査しきれていません。

Support:

  • #WAV[00-ZZ]
  • #BMP[00-ZZ] (#xxx04, #xxx06, #xxx07)
  • #BPM[01-ZZ] // #EXBPM[01-ZZ]には対応しない。負数はなんかよくわからない挙動に
  • #STOP[01-ZZ] // 負数はskip
  • #TITLE, #SUBTITLE, #ARTIST, #SUBARTIST, #DIFFICULTY, #GENRE, #RANK [0-3], #BPM, #PLAYLEVEL, #VOLWAV, #TOTAL
  • #STAGEFILE, #BANNER, #BACKBMP
  • #RANDOM n, #IF n, #ENDIF
  • wav, ogg, mp3
  • bmp, rle, png, gif, jpg,
  • mpeg-1, mp4
  • BMS, BME, BML, PMS, BMSON
  • 5k, 7k, 9k, 10k, 14k
  • #xxx[5-6]x (omissible #LNTYPE), #LNOBJ
  • BMS, BME, BML, PMS: ANSI // 非ASCIIのfilenameおよび文字列値(描画されるとは限らない)
  • BMSON: UTF-8 // BOM無しも可。非ASCIIのfilenameおよび文字列値(描画されるとは限らない)

おおむねLR2と同等と思われます。違いは#VOLWAVが効くことや、図表をdropして単曲演奏する際も#RANDOMなどの乱数が固定されないこと、極まった地雷artの判定、LR2では許容されるIndentが効かないこと、などなど。

Not support:

  • #EXBPM
  • #SETRANDOM, #SWITCH family
  • webm
  • Indent style

Bemuse v36.1に関する調査

BMS Support in Bemuse

Support:

  • #WAV[01-ZZ]
  • #BPM[01-ZZ] // #EXBPM[01-ZZ]には対応しない。負数は逆流
  • #STOP[01-ZZ] // 負数はskip
  • #TITLE, #SUBTITLE(s), #ARTIST, #SUBARTIST(s), #GENRE, #BPM, #PLAYLEVEL, #DIFFICULTY
  • #RANDOM n, #IF n, #ENDIF // “they can be nested”とあるけど、nest_testなどがうまくいかない
  • wav, ogg, mp3, m4a
  • BMS, BME, BML, BMSON
  • 5k, 7k
  • #xxx[5-6]x (omissible #LNTYPE), #LNOBJ
  • CP932|936|949|その他自動判別 // 非ASCIIのfilenameおよび文字列値(encodingが正しく判別されるとは限らない)
  • UTF-8|16 (BOM), UTF-32BOM (Blink/WebKitのみ) // 非ASCIIのfilenameおよび文字列値
  • #SCROLLzz, #xxxSC, #SPEEDzz, #xxxSP, #EXT #xxxyy:… // Bemuse’s BMS extensions
  • Indent style

BMSON形式なら、title画像・背景画像・WebM/MP4 videoなどを使用できます。Everyday evermoreなどを参考にしてください。BMS形式の場合は基本的に音声+図表のみです。

非UnicodeのCharacter encoding detectionの精度はWeb browsersに依存します。文字化けが不安なら非ASCIIの文章などを図表file内に直接書いておくと誤爆しづらくなります。UTF-32はWebで使ってはならない」とされています(いまだにsupportしているBlink/Webkitが問題)。

Not support:

  • 不可視、地雷、画像全般
  • #VOLWAV, #RANK, #TOTAL
  • #EXBPM
  • #SETRANDOM, #SWITCH family
  • 図表fileの同位にないresource filesを参照する定義

BananaBeats Alpha Build 20161203に関する調査

正しく調査できていない可能性があります。有名でないtagsは調査しきれていません。

Support:

  • #WAV[01-ZZ] (#xxx[1256][1-9]) // 不可視notesや地雷には対応しない
  • #BMP[01-ZZ] (#xxx04, #xxx07) // 現在はPOOR画像は表示されない
  • #BGA[01-ZZ] (#xxx04, #xxx07) // 現在はPOOR画像は表示されない
  • #BPM[01-ZZ] // #EXBPM[01-ZZ]には対応しない。負数があると図表を末尾から遡行する?
  • #STOP[01-ZZ] // 負数は無視
  • #TITLE, #ARTIST, #SUBARTIST(s), #GENRE, #RANK [0-3], #BPM, #PLAYLEVEL, #VOLWAV
  • #STAGEFILE, #BANNER
  • #RANDOM n, #IF n, #ELSEIF n, #ELSE, #ENDIF // Nestable
  • wav, ogg, mp3
  • bmp, rle, png, gif, jpg,
  • mpeg-1, webm
  • BMS, BME, BML, PMS, BMSON
  • 7k, 9k, 14k, BananaBeats Original (使用される列数次第のflexible layout)
  • #xxx[5-6]x (omissible #LNTYPE) // #LNOBJには対応しない
  • #COMMENT // “時の行商人 アリエス・オールドフィールドのscreenshotがあるが、現在は無効? あとなんか複数の#COMMENTsに対応していそうな雰囲気を出しているけど未検証
  • CP932, UTF-8|16|32 (BOM) // Non-ASCII String value
  • Non-ASCII filenames // 図表がUTF-8|16|32 (BOM)の場合のみ
  • Indent style

図表がUTF-8|16|32 (BOM) encodingでも、🎹.wav”は鳴りません。UTF-32 (BOM)の場合、𠮷野家.wav”も鳴りません。最短表現でないUTF-8 sequenceやCESU-8は正しく無害化されます。

Not support:

  • #TOTAL, #LNOBJ, #SUBTITLE, #DIFFICULTY, #EXBPM, #BACKBMP
  • #WAV00, #BMP00, #xxx06, #xxx[34]x, #xxx[DE]x
  • #SETRANDOM, #SWITCH family
  • mp4

選曲画面右上の“Options”から、設定窓をPDFようにgrab-and-dragすると、画面下方にkeyconfig領域が現れます。図表listも同様にgrab-and-dragでscrollingします。

散らかったmemo

  • “PIXEL.Heart”の一部のKEY音が鳴らない状態でpackageに収録されています(*.ogg~)。

  • 第14回自称無名BMS作家が物申す!の開催に今頃になって気が付きました。BMS event関連まとめへの掲載がほぼ二ヶ月遅れたことになります。ごめんなさい。

    Event用siteはUTF-8 encodingが宣言されていますが、HTML fileそのものはUTF-16 (with LE-BOM)で符号化されており、Lynxなどは文字化けします。Yahoo! GeoCitiesが頁末尾に自動挿入するaccess analysis用のHTML tagsも、文字化けによって無効化されます(これは盲点でした)。

  • bms2bmson版)は"judge_rank""total"などの値を変換しません(値が実装依存だからかも)。BMSからBMSONへの変換を試みる図表著者は、これらの値を適宜書き換える必要があります。よくわからない場合は値として100を指定しておけばよいようです。

    on beatoraja 0.3.7
    BMSBMSON
    #RANK 0"judge_rank": 40
    #RANK 1"judge_rank": 70
    #RANK 2"judge_rank": 90
    #RANK 3"judge_rank": 100
    #RANK 4"judge_rank": 120

    そういえばDPBMSも変換されません。まあ1P側と2P側を別々にBMSONに変換して合成すれば済む話……と思いきやそう簡単でもなかった。

    [以下追記] DPBMSは図表著者が期待する結果とはやや異なる変換がなされます。

    IIDX 2P-side 1 2 3 4 5 6 7 SC
    BMS channel 21 22 23 24 25 28 29 26
    Wrong "x" 11 12 13 14 15 16 17 18
    Correct "x" 9 10 11 12 13 14 15 16

    変換された*.bmson file内の"x"を正しい座標に置換したうえで、"mode_hint": "beat-7k",」を「"mode_hint": "beat-14k",」に書き換えて、BmsONEで保存し直せば、問題ありません。

    ついでにぽっぽんも
    pop’n music 1 2 3 4 5 6 7 8 9
    PMS channel 11 12 13 14 15 22 23 24 25
    Wrong "x" 1 2 3 4 5 12 13 14 15
    Correct "x" 1 2 3 4 5 6 7 8 9

    変換された*.bmson file内の"x"を正しい座標に置換したうえで、"mode_hint": "beat-7k",」を「"mode_hint": "popn-9k",」に書き換えて、BmsONEで保存し直せば、問題ありません。

Pulsus 0.5.1に関する調査

正しく調査できていない可能性があります。有名でないtagsは調査しきれていません。

Support:

  • #WAV[00-ZZ] (#xxx[1-6DE][1-9]) // 現在は不可視notesは鳴らず、地雷は可視notesに置換
  • #BMP[00-ZZ] (#xxx04, #xxx06, #xxx07) // 現在はPOOR画像は表示されない
  • #BPM[01-ZZ] (#EXBPM[01-ZZ]), #STOP[01-ZZ] // negative-able
  • #TITLE, #ARTIST, #GENRE, #RANK [0-3], #TOTAL, #BPM, #PLAYLEVEL, #VOLWAV
  • wav, ogg
  • bmp, rle, png, gif, jpg,
  • mpeg-1, webm, mp4, およびその他の「FFmpegがsupportする動画形式」?
  • BMS, BME, BML, PMS, BMSON
  • 5k, 7k, 9k // DP列は自動的に他の列に割り振られる
  • #xxx[5-6]x (omissible #LNTYPE), #LNOBJ, #LNTYPE 2 // 一応MGQ形式も読む
  • #PREVIEW audioFilename // raindrop extension // 現在は構文解析のみ?
  • Indent style
  • CP932, UTF-8|16|32 (BOM) // Non-ASCII String value / Non-ASCII filenames

ANSIではなくShift_JIS (CP932)だけを特別扱いするようです。最短表現でないUTF-8 sequenceやCESU-8は正しく無害化されます。このへんiBMSCも同様で、.NET FrameworkのUnicode関連libraryは無難。

Not support:

  • #RANDOM n, #IF n, #ENDIF, #ENDRANDOM // 構文解析は行われるが非対応
  • #PLAYER, #STAGEFILE, #DIFFICULTY, #SUBTITLE, #SUBARTIST, #BANNER, #COMMENT, #BACKBMP // 構文解析は行われるが非対応
  • mp3

わざわざ載せないけど#xxxA0#MUSIC#MAKER#SCROLLzzなども非対応。あとLots Of Spicesの追加差分のように極端な分解能を要求する図表を読むと、きちんと「無理」と知らせてくれます。

CommandLine Options:

SettingsParser.csに一覧があります。Pulsus -hの結果は以下の通りです:

Usage: Pulsus.exe [OPTIONS] CHARTFILE

Options:
  -h, --help                         Prints this
  --settings, --config               Opens configuration window
  --skin SKINNAME                    Skin override
  --debug                            Shows console window for debugging

  -p, --preview, -a, --autoplay      Enables chart preview mode (autoplay)
  -m VALUE, --measure VALUE          Starts the chart from measure number VALUE [0-999]

  --render OUTPUT.wav                Renders all audio of CHARTFILE to file
  --resample-quality [low|medium|high|highest]
                                     Changes resampling quality of audio samples
  --dump-timestamps OUTPUT           Dumps all generated note event timestamps of CHARTFILE

BMS/BMSON editorsから呼び出すことも可能ですが、より重要なことに、Pulsusは“bmson2wav”の変換を実行できる現在唯一のapplicationです。以下のように指定できます:

Pulsus.exe "D:\[BMSON]Goliath_ogg\Goliath_7kA.bmson" --render "D:\[BMSON]Goliath_ogg\Goliath_7kA.wav" --resample-quality highest

ただし現時点ではうまくいかないらしく、耳をつんざく雑音が出力されたりします。

あとなんやかんや試して設定が変わってしまった場合、settings.jsonを消すなり退避するなりすればdefaultの設定fileが自動的に生成されます。

ruv-it! support page: 404 Not Found

http://nvyu.net/rdm/
404 Not Found
http://nvyu.net/
403 Forbidden

昨秋も約一月ほどaccessできなくなっていましたが、今回の障害も一時的であることを祈ります。二月まで様子をみて、復旧しないようなら当siteからの参照先をweb archiveに切り替えます。

raindrop 0.400に関する調査

正しく調査できていない可能性があります。有名でないtagsは調査しきれていません。

Support:

  • #WAV[01-ZZ]
  • #BMP[00-ZZ] (#xxx04, #xxx06, #xxx07, #xxx0A) // Layer2!
  • #TITLE, #SUBTITLE, #ARTIST, #RANK [0-4], #TOTAL, #STAGEFILE, #BPM, #PLAYLEVEL
  • #BPM[01-ZZ] (#EXBPM[01-ZZ]), #STOP[01-ZZ] // negative-able
  • #xxx[3-4]x
  • #xxx[5-6]x (omissible #LNTYPE), #LNOBJ (2016-08-03 multiplied) // 1 LN == 2 COMBO
  • #BACKBMP (== #STAGEFILE)
  • #DIFFICULTY (Beginner, Normal, Hard, Another, Another+)
  • #RANDOM n (== #SETRANDOM n), #IF n, #ENDIF // 入れ子にすると固まる
  • WASAPI (Shared/Exclucive/Exclusive)
  • MP3/OGG (#WAVxx *.wav, #WAVxx *.mp3, #WAVxx *.ogg)
  • RLE (#BMPxx *.bmp)
  • PNG (#BMPxx *.png)
  • JPEG (#BMPxx *.jpg)
  • BMS, BME, BML, PMS, BMSON // and o2jam, osu!, stepmania, etc.
  • 5k, 7k, 9k // and others (cf. config.ini)
  • #MUSIC, #OFFSET, #PREVIEWPOINT (#PREVIEWTIME), #PREVIEW, #MAKER // v0.230 or later
  • #SCROLLxx, #xxxSC (Bemuse’s BMS extensions)
  • Shift_JIS (CP932) string value

Not support (?):

  • #wav00, #xxx[DE][1-9] // ??
  • MPEG-1 // ??
  • #GENRE, #VOLWAV, #SUBARTIST, #BANNER,
  • #SPEEDxx, #xxxSP (Bemuse’s BMS extensions) // ??
  • Indent style
  • Non-ASCII filenames

曲情報と図表情報:

たとえば以下の場合、(^^) by Yamajet (Chart: Beginner by 131)のように表示されます:

#TITLE (^^)
#ARTIST Yamajet
#MAKER 131
#DIFFICULTY 1

一部の文字列値は字句解析され自動的に処理されるようです(“-Hyper-/ obj.xxxなど)。

前述の#TITLE文字列値は全角文字ですが、BMS fileのencodingがShift_JIS (CP932)である場合は特別にUTF-8 sequencesへの変換を試みます。運が良ければ日本語の#TITLEも正しく表示されます。たとえShift_JIS (CP932)であっても、#WAV01 (^^).wavなどのnon-ASCII filenameは参照できません。また、raindrop 0.400がBMS fileのUnicode encodingをsupportしているわけでもありません。

#DIFFICULTY [1-5]が存在しない場合、Chart nameはBMS filenameから自動的に命名されます:
E.g.: firedup-last8bars.bms → “Chart: iredup-last8bars

分岐:

#RANDOM#SETRANDOMと混同されるようです。たとえば以下の場合、常に#IF 2が選ばれます:

#RANDOM 2
#IF 1
#WAVZX kick.wav
#ENDIF
#IF 2
#WAVZX clap.wav
#ENDIF
#ENDRANDOM

これは普通にbugだと思いますが、私のtestのやりかたが間違っているかもしれません。前述の#RANDOM 2#SETRANDOM 1に変えたうえでBMS Editorsからviewersとしてraindropを呼び出すと、なぜか#IF 2が適用されるようなので。よくわかりません。

独自拡張:

#MUSIC audioFilenameは、選曲画面でのpreviewや、演奏開始時の演出音を指定します:
#MUSIC bolero.mp3

この場合、「選曲画面においてbms-folder\this.bmsが選択されたとき」および演奏開始時に、bms-folder\bolero.mp3がstreaming再生されます。Streaming再生中にnotesが判定される場合、それらのKEY音は再生されません。

#MUSICは指定したいが選曲画面では音声を再生したくない」という場合は、以下のように空の#PREVIEWを指定する必要があります:

#MUSIC bolero.mp3
#PREVIEW
#OFFSET nは、#000以降が開始されるtimingを、指定した秒数ぶん遅らせます:
#MUSIC bolero.mp3
#OFFSET 704

この場合、演奏を開始してから11分44秒後に#000が開始されます。この間は見せかけの(空の)小節群が挿入されます。Padding小節群は#000-#999の制限に影響を及ぼしません。

#PREVIEW audioFilenameは、選曲画面においてpreviewされるべき音声を指定します:
#MUSIC bolero.mp3
#OFFSET 704
#PREVIEW yellows.mp3
#PREVIEWPOINT 310

この場合、選曲画面においてbms-folder\this.bmsが選択されたとき、bms-folder\yellows.mp3が、310秒地点からstreaming再生されます。

#PREVIEWが指定されない場合、選曲画面において、bms-folder\bolero.mp3が、310秒地点からstreaming再生されます。しかしそうならない場合もあります……#PREVIEWのcacheが残っているのかもしれません。)

#PREVIEWPOINT nは、選曲画面でのpreview開始位置を秒単位で指定します:
  • 単独では無意味です。#PREVIEWまたは#MUSICと併用する必要があります。
  • 省略時は#PREVIEWPOINT 0と等価です。
  • Preview用resourceの長さを超える値が指定された場合も、#PREVIEWPOINT 0と等価です。
  • #PREVIEWTIME n#PREVIEWPOINT nと等価です。

あと、BMS Editorsからviewerとして呼び出すこともできるはずです。Command-Line optionsはcatch.hppの4719行目以降あたりに載っています。raindrop -?の結果は以下の通りです:

Allowed options:
  -? [ --help ]                   show help message
  -p [ --preview ]                Preview File
  -i [ --input ] arg              Input File
  -o [ --output ] arg             Output File
  -c [ --gencache ]               Generate Cache
  -g [ --format ] arg             Target Format
  -m [ --measure ] arg (=0)       Measure
  -a [ --author ] arg (=raindrop) Author
  -A [ --A ]                      Auto
  -S [ --S ]                      Stop Preview Instance
  -R [ --R ]                      Release IPC Pool
  -L [ --L ] arg                  Load Custom Scene
  -T [ --test ]                   Run test suite

私の環境ではこれらの引数がまともに働かないようです。日本語環境のWindows上でraindropに引数を与えてうまく動作する方は、私にやり方を教えていただけるとありがたいです。

[追記] Wikiに方法が書いてあったけれども……書いてある通りの手順を踏んでもうまくいかず。

beatoraja 0.3.7

先日のBMSON差分が期待通りに演奏可能になりました。ついでなのでWindows上でbeatorajaをEXE化する方法も書いておきます。

  1. launch4jDownloadlaunch4j-3.11-win32.zipから、「最新のZIP版」をdownloadする。現時点での最新版は3.11。Installerが必要ならZIP版ではなくEXE版をdownloadする。
  2. ZIP版を適当な場所に展開し、launch4j.exeを実行する。
  3. “Basic” tabの“Output file”および“Jar”欄に、あなたのbeatorajaのpathを指定する。たとえば:

    Output file:
    D:\bms\beatoraja\beatoraja.exeこれから生成するEXE fileのpath)
    Jar:
    D:\bms\beatoraja\beatoraja.jar
  4. “JRE” tabの“Min JRE version”欄に、1.8.0と入力する。

    beatorajaは一応32-bit JREでも動作しないこともないが、気になるようなら右のdropdown listから“64-bit only”を選択しておいてもよい。

  5. Toolbarの歯車iconをclickし、適当にlaunch4j-beatoraja-config.xmlなどと名付けて“保存”。
  6. Compileが成功すると、launch4j window下部のtextboxに以下のようにmessageが表示される。

    Compiling resources
    Linking
    Wrapping
    Successfully created D:\bms\beatoraja\beatoraja.exe

    指定したpathにEXE fileが生成されていることを確認したら、launch4jを終了する。

beatorajaのversion up時は、

  1. まずbeatoraja.jarやその他のfilesを上書き更新する。
  2. 次にlaunch4j.exeを起動し、Toolbarのfolder icon(左から二番目のicon)をclickする。
  3. あらかじ保存してあった設定file “launch4j-beatoraja-config.xmlを読み込む。
  4. Toolbarの歯車iconをclickする。

beatorajaをEXE化しておくと、beatoraja.exeにBMS/BMSON fileをdropして単曲演奏したり、BmsONEから外部viewerとしてbeatorajaを呼び出したり、いろいろできるようになって便利です。

たとえば「最初から再生」には “-a "$(filename)"” を、「現在位置から再生」には “-p "$(filename)"” を指定します。

BMSC/BMSE/iBMSC上で32-bit Float WAVが鳴ったり鳴らなかったりする

GDAC2やBmsONEは、24-bit WAVや32-bit Float WAVを鳴らすことができない。

  • Dragon Tributeの32-bit Float WAVは、BMSC/BMSE/iBMSC上で鳴らない。01.wavのみ24-bit)
  • yearn [BMS edit]の32-bit Float WAVは、BMSC/BMSE/iBMSC上で鳴る。

“Dragon Tribute”側のWAVは、metadataを剝がしても依然として鳴らない。同じ32-bit Float WAVでも鳴るものと鳴らないものがあり、すぐ思い出せる範囲でいえばRun n’ Chaseのそれらは鳴る。

woseqは“Dragon Tributeの32-bit Float WAVも鳴らすことができるが、今となってはBmsONEのほうが高機能かつ安定して動作するので、BMSON EditorとしてはBmsONEをおすすめします。

BMSON Layered Notesのtest

Special Travel (BMS Edit)append data (14 keys)です。比較用のBMS fileも同梱しています。BMSON版はbeatoraja 0.3.7以降では未公開)、かつbeatoraja default skinでのplayを推奨します。これはじつのところ、Layered notesに"t" property (beatoraja extension)を与えるtestでもあります。

なぜBMSON "t" property (beatoraja extension)が必要なのか

“Exargon”のBass Scratchをturntable deviceで演奏する感覚を雑に表してみます。

このSCRATCH LONGNOTEを、beatmania IIDXのBACKSPIN SCRATCH (終端で逆回転させるべきnote)として解釈してしまうと、図表著者が想定したであろう演奏感は損なわれるでしょう。このように終端を明示・判定するべきでないnotesに対して、BMSONで"t": 1を指定すれば、各notesを「終端を明示・判定しないLONGNOTE」に固定することができます。

前述の例は、本来なら「ひとつの区間内での新しい入力」を図示できるnoteこそ必要でしょう。「turntableの回転状態を保持しつつ、回転方向のみ変更する操作」や、「鍵盤の押下状態を保持しつつ、鍵盤を押下する指のみを変更して操作」などを要求するnoteが必要であり、その外観は往年のFREE ZONEのようになるはずです。

そのようなfeatureが存在しないので、このbass sequenceの「回転方向のみ変更」は、現行機種に既に実装されている「終端を判定しないLONGNOTEs」を複数組み合わせることによって、疑似的に図表化されています。

BMSON差分の作り方memo

  1. bms2bmsonをdownloadする。古い版は期待通りに動作しない場合があるので注意。
  2. Base BMSをcopyし、copied BMSをUTF-8 encodingで保存し直しておく。
  3. Copied UTF-8 BMSをbms2bmsonにdropする。ものによっては変換に時間がかかる。Lots Of Spicesの追加差分778_LOSmineds.bmlのような極まったgimmick図表はまともに変換できないので注意。
  4. 変換後のBMSON fileをBmsONEにdropする。

2017年

あけましておめでとうございます。

去年の3月ごろから見させてもらっております。

今でも更新されているBMS関係のブログは少ないので、こういったサイトがあるのは嬉しいです。

今年も宜しくお願い致します。

— どっかでサイト運営している人

お読みいただきありがとうございます。此処もまともに更新できているとはいいがたい状態ですが、Nekokan氏や反応してくださる方々のご厚意でなんとかえるながらえることができております。重ね重ねありがたいことです。あともちろんBMSが書かれ続けていることもです、新年一日目から文字譜面を見かけて思わずにっこり。今年もよろしくお願いいたします。

日本語で書かれたBMS関連Blogは少ないながらも一応存在し、2016年に私が新しく見つけたBlogも2つ3つは記憶にあります(私の観測範囲はごく狭いけれども)。Web拍手などを見かけたら特に何も考えずclickしていますから、どこかで既に無言のやりとりが交わされていたかもしれません。

日記

BMS関連

拙作BMS
bubble / hitkey
二次配布BMS
ノイズの海と鯨 / moka
PARTY TIME IN MY DREAM / HAIJI
BMSE非公式ヘルプ
Lite
Lite-online
Full
Full-online
buglist
iBMSC
Web (Japanese version)
issues
BMS差分
a­nal­gam
boléro
Ketch­up
quovadis
SELF
yellows
Do not use non-ascii filenames
雑多なメモ
bmsplayer data
bms benchmark
Secrets - Feeling Pomu 2nd
grid2sec
bmx2xxx
BMx Outliner
BMS command memo
BMS command memo (Japanese version)
BMS EVENT LITE
#RANDOM BMS list
BMS #OPTION command
BMS Bitmap test
Extended BPM
STOP Sequence
BMS Edge Cases
BMS extensions proposed by Sonorous (unofficial Japanese version)
BMS 2.0 (unofficial Japanese version)
BMS Editors
Do not use non-ascii filenames
BM98 Kikuchan Version 3.30 Revision #4.2
BMSON Checker

その他

HTML関連メモ
Dakuten on HTML
nest1000
EVS
Nervous Cascading
Source Han Sans test
User-Agent String
CSS Logical Properties