doubledepth

μBMSC私家版 3.5.0.8

(更新に気付くのが遅れました……)#LNOBJ型LongNotesもBMSON形式にexport可能になった。#LNMODEもBMSON変換時に反映されるようになった。不正な値も可能な限り仕様に沿う形に正規化してくれる。

  • Opaque Couchéの[Junkie]図表を変換すると、最初のLongNoteScratchが途中で切れる。当該noteの"l"はちゃんと設定されているように見えるのだが……、私には原因がよく分からなかった。beatorajaの分解能制限とかだろうか。
  • 不可視notesが"key_channels"配下要素に変換されていないように見える。

_wsh_bms2bmson.js v0.3.0

  • μBMSC私家版3.5.0.2以降の2OCT themeで生成されたBMSから、BMSONへの変換に対応。
  • 24/48 keys BMSONから、μBMSC私家版2OCT theme用のBMS形式への変換に対応。
  • 不正な書式#LNMODE 0[0-3]の正規化。

μBMSC私家版 3.5.0.7

どこまでが開発者氏の意図された仕様なのかよくわからないので、μBMSC 3.5.0.7で私がBMSON形式へのexportを試して把握した事実だけを以下に列挙してみる。

#LNTYPE 1型LongNotes

#LNTYPE 1, channels 516Zかつ始点と終点の定義番号が同一の場合、図表著者の期待通りにBMSON形式のLongNotesに変換される。#LNMODEは反映されない。[追記] μBMSC 3.5.0.8以降は#LNMODEも反映されるようになった。

HDX拡張LongNotes

#LNTYPE 1, channels 516Zかつ始点と終点の定義番号が異なる場合、見た目はBMSON形式のLongNotesに変換されるが、終点側発音は変換されない。終点側のnoteは単に捨てられる。

[追記] ちょっと正しくなかったので訂正します。HDX拡張LongNotesを用いた図表を、μBMSC私家版で開いた時点で、終点側のnoteは正規化されて捨てられる(なのでそもそもHDX拡張図表はμBMSCで開いてはいけない)。

#LNOBJ型LongNotes

LongNote終点専用定義として音声未定義番号を指定した場合、BMSON形式のLongNotesに変換されない。[追記] μBMSC 3.5.0.8以降は変換されるようになった。


拙作変換器は前述の全状況に一応対応しているはずだが、#LNMODE 02などの書式違反への寛容さを忘れていた。μBMSC私家版の2OCT themeへの対応も忘れていた。夏頃まで書きかけていたscriptのほうではそのへんは対応していたような気がするし、たしか括弧拡張への変換も可能にしていたはず…… あ〜当時の変換結果が出てきた。でも書きかけscriptはGUIで詰まっていた。

_wsh_bms2bmson.js v0.2.8

  • beatoraja 0.8.3以降(?)の拡張、BMSON用不可視・地雷notesへの変換に対応。
  • BMSON用不可視・地雷notesからBMSへの変換に対応。
  • その他修正。
  • 必要なImageMagickの最小versionを12箇月前の7.0.10-34から最新版7.1.0に変更。

beatoraja専用BMSONの地雷・不可視notesの例

註釈: この記事の内容は現時点ではbeatoraja公式Wikiに記載されていない。今後変更されるかも。

(Sample code:)
{
    "version": "1.0.0",
    "info": {
        "init_bpm": 130
    },
    "sound_channels": [
        {
            "name": "visible.wav",
            "notes": [
                {"c": false, "l": 0, "x": 7, "y": 1920}
            ]
        }
    ],
    "key_channels": [
        {
            "name": "invisible.wav",
            "notes": [
                {"damage": 0, "x": 1, "y": 960}
            ]
        }
    ],
    "mine_channels": [
        {
            "name": "bomb_1.wav",
            "notes": [
                {"damage": -20, "x": 4, "y": 960},
                {"damage":   2, "x": 4, "y": 1920}
            ]
        },
        {
            "name": "bomb_2.wav",
            "notes": [
                {"damage": 2, "x": 2, "y": 1200},
                {"damage": 2, "x": 2, "y": 1440}
            ]
        }
    ]
}

構造は"sound_channels"とほぼ同じ。余計なpropertiesを生やすとすぐに強制終了する。"damage"に負数を充てると「触れるとGroove Gaugeが増加する地雷」になる。不可視・地雷用の音声は複数定義できる。演奏者が予め鍵盤を押し込んだ状態で地雷を待ち受けて接触しても、beatorajaは爆発音を鳴らさないしgaugeも増減しない(っぽい)。というかbeatoajaでは、おそらく地雷の当たり判定が#RANK#DEFEXRANKに依存している。


私は拙作変換器をこれらの拡張に対応させたが、自分が以前どのminifierを使っていたのか思い出せず、公開できない。そのminifierはECMAScript 3の範囲内でcodeを圧縮できなければならない。


[追記] 半分寝ていて書き忘れた。先日のμBMSC私家版LongNotesのBMSON変換がうまくいかない。

μBMSC私家版 3.5.0.56

#TOTAL入力枠の位置が変更された。先日の日記のような事故は今後は減るだろう。あと24/48 keys図表の列が誤った位置に変換されてしまうbugsも修正された。しかししかし、"bpm_events"配下のeventsが"bpm"でなく"duration"として出力されてしまう…… beatorajaあやうし…… [追記] この日記をuploadしてから30分も経たずにbugsが修正されていた! Commentsで教えてくださった方もありがとうございます! っていうかしれっとBMSONに地雷が実装されていたことに今頃気付きました(beatoraja限定)!!!


公式beatoraja + #DEFEXRANKを用いて、図表側から判定幅をLR2に寄せることも不可能ではないように思う。個人的に興味がないせいで#DEFEXRANKを見るたびに思い出しては忘れてしまっていたが、私はついにこの思いつきを日記にmemoすることに成功した。

beatorajaとよく光る曲

Legende der Morgenröte

NORMAL図表はiBMSC/μBMSC/μBMSC私家版/pBMSCのいずれかで編集され、いみじくも#TOTAL#DEFEXRANKの入力欄を間違えられた結果、初心者向け図表として優勝している。

#RANK 0 vs. #DEFEXRANK 398
#RANK 0の判定幅は、最悪の判定結果まで含めてもとても狭い範囲に収まる。
#DEFEXRANK 398の判定幅は、「#RANK 0で最悪の判定さえ得られないタイミング」さえも最良判定に化けるほど、ゆるい。

[追記] VERYHARD判定で“POOR”が出るtimingさえ、この図表では“JUST GREAT”になる。

what was his name...

Another図表はLayered Notesを用いる。Rhythm座標・列座標・長さがすべて一致する複数個のKEY音群を、演奏者は一回の入力によって一斉に鳴らすことができる(あたかも通常の一個のnoteを演奏して一個の波形を発音するように)。beatoraja, Pulsusおよびraindropがこの仕様を実装している。

ただしraindropはこのBMSON作品を演奏しようとすると強制終了する。32-bit applicationのmemory制限に抵触するのか、あるいは24-bit音声が原因なのかは不明。

BananaBestsとBemuseはLayered Notes未実装。各Layered Notesはどれか一つしか発音されない。(私の演奏があまりにも下手なせいで正しく調査できていない可能性あり)

QwilightもLayered Notesを実装していないものと思われる。Qwilight環境でこのAnother図表をfullcomboしたい演奏者は、各Layered Notesをとても素早く2回から3回連打しなければならない。


この動画は男性同士のウホみを描いているように見える。BMSに前例が無いでもないが、珍しい。

愛歌「ネグラドルナ」#998に愛がある

#873にも欠片がある。愛を失った図表は四分音符だけで表現しきれる(BMSON "resolution": 1)。

私は普段はbeatorajaのプレイオプションハイスピード固定を無効にして、かつHI-SPEED倍率を1に設定したうえで中程度の難易度(#DIFFICULTY 3相当)を遊んでいる。しかし前述の#BPM 2222は私には手も足も出なかった。仕方なくHS-FIXを有効化した。


日本語環境でQwilight v1.13.45がまたもや起動不可能になっていた。ZIPしか勝たん。

図表のbugとまではいわないが

SkylineのHYPER図表の序盤と終盤について、いわゆる人工知能が図表を自動生成した場合、こういう出力にはならないように思う(その状況で最も目立つinstrumentsをKEY音として選定する工程と、選定されたphraseから視覚化に値する結節点を抽出する工程を、algorithmが区別しているなら)。

今日は3 teamsを遊んだ

VerwirrungもbeatorajaでPortAudio環境だと#009以降の全音声がmute状態になる。3_000.ogg, 3_001.ogg, 3_002.oggおよび3_003.oggを図表から参照不可能にすれば、問題は解決される。

“Whatever I wanted” teamまで巡回完了

BMS作者が高画質動画と低画質動画を別々に用意してくださっている場合、私は両方ともdownloadして同一のBMS folder内にまとめている。(『BMS folder内にMP4動画しか存在しない場合、mBMplayのresources読み込み進捗状況が99 %から先に進まない』などの不具合を避けるためでもある)

3HP MISSIONSの長調vocalと短調backingが同居するような響き、好き。ぱっと思い出せる範囲では、BMSだとCode-B.T.S.#021以降のmarimba vs. synthとか、非BMSだとblackerとか? Afro方面でわりと耳にするこれ系、専門用語だとどう呼ぶんだろう。“blue note”

Lost in the Void#068以降、beatoraja PortAudio使用環境だと全音声が鳴らなくなるsnare_013.wavsnare_014.wavを図表から隠せば直る。こういう素朴な響きのtrance、好き。

Astatineのtext encodingがbyte-order-mark無しのUTF-8になっている。一般的な簡体字中国語Windows環境のLR2上で、このBMS filesはGB2312として解釈されるため、図表著者氏ご自身はこの誤りに気付いておられないものと思われる。でも音楽に影響がない文字化けならBMS event会場を参照すれば済む話なのだし、大した問題ではないという見方もある。[追記] 誤りではなかった。GB2312の“一転”と、UTF-8の“һܞ”は、byte sequenceが完全に同じだった。すみません。


(以下私信。高水準の情報系会話に私がついていける自信がまったくありません。せめて私が書きかけscriptを仕上げるまではご遠慮させてください…… なけなしのJavaScript知識さえ私の記憶から揮発しつつありますが……)

beatoraja/HDX専用BSS図表の例

AntipodeのHYPER図表をbeatoraja専用に微修正した差分。今回は例としてBMS形式の図表も同梱したが、LR2などを徒に混乱させないようにBMSON形式の図表だけを示すほうが安全かもしれない。

余談:

元のHYPER図表やANOTHER図表は、意図的にか事故なのか元のBEGINNER図表とは微妙にrhythmが異なる。全小節全列のrhythm座標を統一的に取り扱うBMSEやBMSONの方式で算出すると、元のHYPER図表を正しく表現するために必要な小節分解能は6970656(BMSON形式の拍分解能換算で1742664)、元のANOTHER図表が要求する小節分解能は195832512839968804800となる。元のBEGINNER図表は小節分解能96(BMSON換算24)が最低限必要であり、分解能192のBMSEでもrhythmを改竄なしで編集できる(ただしBMSEではBGM列数が足りず音抜けが生じる)。元の図表の#WAV7Uが未使用かつarchiveに含まれていなかったり、元のNORMAL図表#025#WAV81が他の図表とずれていたりして、どの図表を基準とするべきかよくわからないところがあるが、差分作成用のbaseとして最も無難そうに見えたBEGINNER図表に今回は合わせた。


beatoraja/HDX専用BSSをbeatorajaで演奏する際、終端側のnoteは明示的に逆回転を入力する必要がある。擬似BSSならいわゆる押し押し(同方向へのturntable device二回入力)やShift key連打などでも判定されたかもしれないが、専用BSSの場合それらの入力はmissとなる可能性が高い。beatmaniaIIDX専用controllerなら逆回転は問題なく入力できるが、PC keyboardで遊んでいる人は複数keysの入力を強いられるので最初は戸惑うかもしれない。事前に選曲画面を経由してkeyconfigを行い、scratchを複数keysに割り当てておくとよいでしょう。


現在は既に修正されているが、Teunimの24 keys/48 keys図表がbeatorajaの曲更新を不可能にしていたらしかった。修正前の現物をいただけたので調べてみたが、"bpm_events"配下に"bpm": 0のeventが一個でも含まれていると、

(Log)
11月 12, 2021 7:45:48 午後 bms.player.beatoraja.MainController$SystemSoundManager <init>
情報: 検出されたBGM Set : 1 Sound Set : 1
java.lang.RuntimeException: Wait timed out
        at com.portaudio.BlockingStream.writeFloats(Native Method)
        at com.portaudio.BlockingStream.write(BlockingStream.java:119)
        at bms.player.beatoraja.audio.PortAudioDriver.run(Unknown Source)
        at java.base/java.lang.Thread.run(Thread.java:831)
[Controllers] added manager for application, 1 managers active
11月 12, 2021 7:45:49 午後 bms.player.beatoraja.audio.AbstractAudioDriver setModel
情報: 音源ファイル読み込み開始。
Exception in thread "LWJGL Application" java.lang.NegativeArraySizeException: -1511826
        at bms.player.beatoraja.song.SongInformation.<init>(Unknown Source)
        at bms.player.beatoraja.song.SongData.setBMSModel(Unknown Source)
        at bms.player.beatoraja.song.SongData.<init>(Unknown Source)
        at bms.player.beatoraja.PlayerResource.setBMSFile(Unknown Source)
        at bms.player.beatoraja.MainController.create(Unknown Source)
        at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:150)
        at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:127)
11月 12, 2021 7:45:49 午後 bms.player.beatoraja.audio.AbstractAudioDriver setModel
情報: 音源ファイル読み込み完了。音源数:11
11月 12, 2021 7:45:49 午後 bms.player.beatoraja.audio.AbstractAudioDriver setModel
情報: AudioCache容量 : 8 開放 : 0
11月 12, 2021 7:45:49 午後 bms.player.beatoraja.external.BMSSearchAccessor read
重大: BMS Search更新中の例外:Error parsing JSON on line 2 near: IC "-//IETF//DTD HTML 2.0//EN">
*ERROR*<html><head>
<title>301 Moved Permanently</title>
</head><body>

11月 12, 2021 7:45:49 午後 bms.player.beatoraja.play.bga.BGAProcessor setModel
情報: BGAファイル読み込み完了。BGA数:122
_

BMS parsing中に例外が発生し、以降もcommand lineが停止しないっぽい(これはBMSON形式のみで生じる問題で、BMS形式の拡張BPM変更で値0の定義を参照した場合は特に何事もなく演奏が進行する)。

なぜこんな変換結果になっているのだろう? これらはμBMSC私家版3.5.0.2の24 keys用themeを介して作成・変換された図表のように見えるが、私が変換を試したときは(wheel列の変換結果が狂ったことを除けば)こんな誤変換は生じなかったように記憶している……

Pseudo-BSS

beatmaniaIIDXのBackSpin Scratchを、LR2などの古いBMS apps上で擬似的に再現するための方法。Your Smile#008などでこれを確認できる。[追記] にHYPER譜面が修正されました。以下の記事は修正前の版を対象とした古い内容です。

Turntable lane上に配置された#WAVVEのLongNotesと、その直後に配置された#WAVVF。

LongNotes終端を判定しないLR2などの古いBMS appsの場合、前述のようにすれば、図表著者の期待通りに擬似的にBSSが再現される。beatorajaの場合も、#LNMODEが指定されない場合(または#LNMODE2でもなく3でもない値が指定され、かつプレイオプションロングノート種類LONG NOTEである場合)なら、この方法のまま図表著者の期待通りに擬似的にBSSが再現される。

しかし、Your Smileにはbeatoraja拡張たる#LNMODE 2が指定されている。beatoraja上でこの#008のturntable lane上には、一本のBSSと一個のscratch noteが存在することになる。演奏者は約一拍の間turntableを回し続けたのち、逆方向への回転を入力し、その直後にさらなる逆回転を入力する必要がある。これはおそらく図表著者の意図にそぐわない操作だろう。


#LNMODE 2または#LNMODE 3を指定すれば、beatoraja上でその図表は本物のBSSを再現できる。[追記] BSS終点で専用の音声を鳴らすこともできる。LongNotes専用channels(BMSEでいうとShiftを押しながら書き込む型の緑色のnotes)で組まれた一対のLongNotesの始点と終点に、それぞれ異なる番号の音声を配置すればよい。

Turntable lane上に配置された#WAVVEのLongNotes始点と、そのLongNotesの終点として配置された#WAVVF。

これはつまり、charatbeatHDX拡張「LN終端で別の音を鳴らす」をbeatorajaも実装しているということ。わざわざBMSON形式に変換して"up": trueを指定しなくても、BMS形式のままで本物のBSSを図表著者が再現できる。この仕組みは数年前から実装済みだった。ただし本物のBSSを実装した図表は、LR2と互換しなくなる(BSS終端側の音声がLR2上では鳴らなくなる)。


擬似BSSAntipodeも使いまくっていて面白かった。

Your Smileはじつは#LNMODE 2でなく#LNMODE 02だが、beatorajaはこの仕様違反をうまいこと解釈してくれる。私の変換器や書きかけscriptはこれを#LNMODE 0として解釈してしまっていた。でも#LNMODEの値は今後も増える可能性がありそうなのに、私が勝手に忖度するのもおかしいような気がする。

Multi-Spin-Scratch

beatmaniaIIDX CastHourから登場した、途中で何回か回転方向を入れ替えることを強いられるturntable用LongNotes、らしい。日記に書くことで私が公称を思い出せますように。そういえば数年前に考えていたことを思い出したが、現在の鍵盤deviceひとつひとつにtouch-panelを組み込めば、MSSの鍵盤版もありえそう。「鍵盤を押し下げていないが、鍵盤に指が触れている状態」を筐体が検出できれば、「keyup-keydown状態を複数回往復するLongNotes」は実装できそう。そんなdeviceを配備するお金は無さそう。「鍵盤に指が触れている状態」が要求としてsevereすぎるなら、「鍵盤の直上10 millimètre以内に指らしき物体が存在する状態」みたいな感じで。

BOFXVIIをteam名順に遊んでいる。BMS Video teamまで遊んだ。ついさっき遊んだA.O.のHYPER図表が素直で楽しかった。

BOFXVIIを遊び始めた

昨年に引き続き非公式packageにお世話になりました。beatorajaや日本語環境Windows上のLR2などでうまく遊べないであろうteam folder名は以下の通り:

  • Schläfer im Untersnow
  • 一群の
  • bass

Bemuseなら環境を選ばず全部そのままのfolder名で遊べる。あと、Alt keyを押しながら選曲するとBemuseがAUTOPLAYになる

Bemuse以外にもteam folder名を変えずに遊べるBMS appsはいくつかある。Qwilight, charatbeatHDX, Pulsus, ruv-it!およびmBMplayなどなど。

名盤にごつ

複数同時再生といえば、こちらは既にチェック済みでしょうか。https://www.youtube.com/watch?v=prfEM-3Lh6E

現場で目の当たりにして、目からウロコとともに全身が震える衝撃と熱さを感じました。

凄いですよねこれ、場の意義や文脈を理解しきった大正義選曲だと思います。映像も往年のBMS fanへのhospitality溢れる仕上がり。これを現地で体験できた匿名氏が羨ましい! ArchiveしてくださったDJ氏ご本人(乃至staffの方々?)には感謝しかありません。Commentをいただいて思い出しましたが、bemuri meets GDBG stylish track 44mm DJMIXも複数同時再生率高めだったような。

つつくと早口で喋り奴

beatissimoの感想貴重です!DP守備範囲外なので、曲と低難度以外オートの見た目でしか判断できませんでした。そして英語の壁。

私も難しい図表はshadow-playingでしか判断できません! Gamepadさえまともに操作できなくなった身なので、PC keyboardでも遊べるaccessibleなBMS形式には本当に助けられています。BMSをたくさん作るぜ'20ソフローニアの絨毯絵や、GroundbreakinG DJMIX 2021のPhleguratone氏のFull versionの中盤のような、polyscore概念を突き詰める方向性はまだ探求され尽くしていないような気がします。複数同時再生できるように書かれた曲もBMS以外ではけっこうあり、二枚使いというか同じ曲を別のtimingで同時再生できるように設計された曲もあり、ちょっと違う話になるけど繋ぎに徹底的に気を遣ったOCTOPATH TRAVELERみたいな発想もあり、なんというかそういった概念を視覚化できるrhythm-action gameって面白いなあと思うんですよね。

beatissimo

a vast field of cornはBPMを一切変えない代わりに小節長とnotesのrhythmを細かく編集し、それによって生演奏らしく揺らぐtempoを表現している。BPMも小節長も実際の値から半減されている。視覚化された揺らぎは垂直方向に潰されて読み取りづらくなっている。

弥生は実際にBPMを変えているが、tempoの揺らぎよりもnuance表現が重視されている。Pianissimoの打鍵感が味わえるBMS作品は多くない。最後のLongNotesの「鍵盤押下中にsustain pedalを踏むのをやめた」かのような表現も面白い。

Praetoriumの素朴ながら演奏している実感が味わえる図表、わりと好き。

十日前にNu FlameにBGAが追加されていた。このBMSは曲と図表でやりたいことがなんとなく共感できる気がしてけっこう好き。

Plastic Gardenはぁ〜〜〜好き。NORMAL図表の指一本で遊べそうな感じも好き。

CloserのBPM変化がわりと好き。後半で小節線が半小節ずれるのはご愛嬌。

saccharine dropperのNORMAL図表、なぜかなんだか楽しい。

watermelon did NOT give me a titleの左右へのnotesの散らし具合と浸れるbassLongNotesがとても気持ち良かった。

私はOSWindows 11にupgradeした

Internet Explorerは無くなったが、Microsoft Compiled HTML Helpは閲覧も作成もできた。「Internet Explorerの検索プロバイダーの変更」や「Internet Explorerのオートコンプリートの有効化または無効化」も残っていたが、誰がどこでこれらを使うのかわからない。

Windows 11上でもBM98kは動作し、BMS editor appsからviewerとして起動することもできた。

いまのところWindows 11のtaskbar iconに対してfileをdrag-and-dropできないのが地味に不便。年内には修正されるらしい。非結合状態にできないTaskbar iconも修正してほしい。

Windows10用WinHlp32.exeインストールバッチファイルがWindows 11でも動作確認されていた。

日記

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
Brilliant Techno Square
雑多なメモ
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
_wsh_bms2bmson.js

その他

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