doubledepth

Ubuntu 19.10上のAngolmoisは普通にUTF-8 BMSを読む

「Angolmois 2.0 alpha 2Windows executables」や「Ubuntu 19.10環境でbuildされたAngolmois 2.0 alpha 3」は、“system default encoding”に従う。私がWindows環境でcompileしたAngolmois 2.0 alpha 3が非ASCII filenamesを一切受け付けないのは、compile時の指定がまずかった可能性😢

Build時に用いられるlibraliesのversionによって、WAV filesの<JUNK> tagなどに対する寛容性が変わる。基本的に新しいものほど寛容。最近は24-bit WAVも演奏可能になっているようだが未検証。

Ubuntu 19.10でAngolmoisを遊ぶ(成功)

先日の続きから。libsmpeg2-2.0.so.0/usr/local/libに普通に存在するので、

sudo ldconfig

とするだけで良かった。Ubuntu 19.10上でAngolmoisとbeatorajaが動作するようになった。

現在UbuntuのaptでpackagingされているSDL_mixerはまだAngolmoisで使えているが、

2.0.4:
  • Removed smpeg support for mp3 music, now that it's replaced by libmpg123
  • Fixed mp3 mad decoder to skip tags, which otherwise would lead to crashes
  • Added support for Opus music playback using opusfile library

ということになっているので、将来も継続して使えるかは怪しいように思う。よくわからないが。

  • GitHubのAngolmoisはversion 2.0 alpha 2なので、SDL2系では使えない
  • Bitbucketから2.0 alpha 3のsource codeを拾ってきてmakeする
  • sudoSuper User DOであることをついさっき知る。せやかてsudo

Ubuntu 19.10でAngolmoisを遊ぶ(失敗)

先人の記録を参考にSDL2 librariesをinstallする。smpeg2のmakeは以下のerrorで失敗する。なろうing

audio/hufftable.cpp:587:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘unsigned int’ [-Wnarrowing]

同じerrorが出ている方の記録を参考にhufftable.cppを修正する。これでsmpeg2のmakeが成功する。ここからAngolmoisのmakeまでは難なく進む。しかし実行するとerrorが出る。

./angolmois: error while loading shared libraries: libsmpeg2-2.0.so.0: cannot open shared object file: No such file or directory

足りないのはこのlibsmpeg2-2.0.so.0だけらしい。で、ここからどうすればいいのか。

sudo ldconfig

[追記] 一度でもldconfigを実行すれば、以降angolmoisが実行可能になる。

smpeg2の導入を試す過程で間違ってARM用のpackageを導入してしまい、uninstallの方法さえ知らないのでUbuntu 19.10を再installしている。しかし時計の長針が二周したのにまだthrobberだかsplashだかが延々とanimationしている…… 以前はもうちょっと素早く完了したと思うんだが……

beatoraja 0.7.6がreleaseされた

基底名の大文字小文字が実際の名前と一致する#WAVのみが演奏される。拡張子の大文字小文字は問われない(拡張子の代替検索機能による副産物?)

副産物というよりはそういう実装(?)になっています。

Comment氏に教えていただいた箇所を起点になんとなく辿ってみたところ、Ubuntu上で一部の音声が鳴らなかった原因を見つけることができたと思います。よきhintをありがとうございます!

私の理解が正しければこのあたりUbuntu上では「拡張子の大文字小文字も一致している必要がある」、「ただし実際の拡張子が全部小文字である場合に限っては、大文字小文字が不一致でも結果的に読み込まれる」という処理になっているように読めます。たとえば1F3B9BMSONでいうと、

  • 実物你好.oGgに対して"name":"你好.wav"は鳴らない。代替拡張子oggoGgに一致しない。
  • 実物안녕하세요.Ogg*.wavとして定義すると鳴らない。代替拡張子oggOggに一致しない。
  • 実物ជម្រាប សួរ។.OGG*.wavとして定義すると鳴らない。代替拡張子oggOGGに一致しない。

これらの例については実物側の拡張子を全部小文字にするか、あるいは定義側を実際の名前に厳密に(大文字小文字まで)一致させれば、Ubuntu上でも全部鳴りました。beatoraja 0.7.5/0.7.6では、Livin' in a dance machine!Meme.exe)はそのままでは鳴りません。

“Me”に関しては#BMPにも落とし穴があって、実物側の画像filesの拡張子と#BMP定義側の拡張子のでなければ描画されない」っぽいです。

Ubuntuに友好的な書庫形式を探る

7z、RAR5、UTF-8 ZIPの各形式に関しては、Windows 10上と同様に展開されることを確認済み。

  • Ubuntu 19.10上のUNRAR 5.61 beta 1では、RAR4形式の書庫は期待通りには展開されない。
  • このUTF-8 ZIP書庫は、Windows 10上のWinRAR 5.90 beta 3では期待通りには展開されない。(7-Zip 20.00 alpha、Explzh 8.04、Windows 7以降(KB2704299以降)のExplorerでは、期待通りに展開された)
「神(U+795E)」を基底文字とする異体字
  • U+FE00神︀
  • U+E0100神󠄀
  • U+E0101神󠄁
  • U+E0102神󠄂
  • U+E0103神󠄃

花園明朝(HanaMin)書体がinstallされているWindows 8以降またはMac OS X 10.6以降なら、前述の例には異体字selectorが反映される。U+FA19)」の話。TwitterにおけるUnicode正規化の話。CJK互換漢字より異体字selectorを使おうという話。そもそもCJK互換漢字など使うべきではないという話。Mac OS X上でこれらのfilenameはどうなるのという話。たぶんまともに展開できないと思うけど。

beatoraja on Ubuntu

Filename: A.WAV
#WAVSound
A.WAVYes
A.wavYes
a.wavNo

Linux上のbeatorajaでは、基底名の大文字小文字が実際の名前と一致する#WAVのみが演奏される。拡張子の大文字小文字は問われない(拡張子の代替検索機能による副産物?)「大文字小文字まで一致するもののみが演奏される」(一部の例外を除く)Windows以外の環境においてはこれらすべてが実際に別々の音声として存在する可能性さえある。

日本語版でないUbuntu 19.10を試した。CodePage932のBMS fileをText Editorで開くと文字化けするが、beatorajaはCodePage932 BMSを再生できる。一方でText Editorで文字化けしないUTF-8 BMSは、beatorajaでは再生されない。私はbeatorajaはBMS形式ではsystem default encodingを用いているものと勘違いしていたが、そうではないのかもしれない。まあBMSON形式なら問題にはならない。

と思いきや、1F3B9BMSON化したやつがうまく再生されない。具体的にはជម្រាប សួរ។.wav안녕하세요.wav你好.wavが鳴らない。Unicode filenameに関する私の知らない決まり事があるのかもしれない(たとえば「無意味な制御文字は書庫圧縮時に削ぎ落とすべき」みたいなZIP仕様が)。[追記] これらのfileの実際の拡張子OggoGgOGGが、Linux上ではoggでなければ駄目っぽい、ということが判明したあとescaped BMSONをbeatorajaに投げると強制終了するっぽい? "total":32の後にCOMMAをつけ忘れていただけだった。修正後のBMSONは正常に演奏されるが、前述の音声3個は鳴らないまま。

Ubuntu 19.10の「名前順」がUbuntu 16.04や18.04と変わっていて驚いた(調査して追記した)。

Filerの先頭側に表示させたいfileをどう名付けるべきか

結論からいうと「感嘆符またはASCII数字から始まる名前」が良さそう。

Windows Explorerの「名前順」は謎めいているが、Linuxも同程度に不思議。
Unicode Codepoint order Windows 10 Explorer Windows 2000 Explorer Ubuntu 18.04 Nautilus Ubuntu 19.10 Nautilus
!!!0!
###1%
$$$2&
%%%3'
&&&4(
'((5)
())6+
),,7,
+..8-
,''9;
---10=
.;;11@
0@@![
1[[$]
10]]%^
11^^&_
2__'`
3``({
4{{)}
5}}+~
6~~,0
7++-1
8==2
900;3
;11=4
=@5
@210Ab6
Ab311Zz7
Zz42[8
[53]9
]64^10
^75_11
_86`$
`97aA
aA108zYaA
zY119{Ab
{aAaA}zY
}AbAb~Zz
~zYzY
ZzZz..
##
  • .から始まる名前のfileは、通常はLinux上では表示されない。
  • U+4E00 '<CJK Ideograph, First>' (Shift_JIS codepoint: 0x88EA
  • U+FF11 'FULLWIDTH DIGIT ONE' (Shift_JIS codepoint: 0x8250
  • BMSE “Sorting by filename”の結果は、Unicode Codepoint orderと一致する。

たまに見かける# [ _から始まる名前は、Windows以外では期待しない位置に並ぶ可能性が高い。……と思っていたが、後日Ubuntu 19.10を調査したら「そうでもないかな」と思えてきた(“#だけはやばいが)。Ubuntu 20.04 betaもUbuntu 19.10と同じ結果になった。

BMSを遊ぶ人は九割がたBMS player appsの選曲画面を使うだろうから、実際は非ASCII文字でさえなければどんな名前を付けても構わないだろう。PABAT!2020の公式packageはFolder名さえASCII化しているし、非ASCII名のfilesはLEGGENDARIA.bms鬼哭[HARD CORE]_xxx.bms인코딩.batしか見当たらない(追記:AND_OR_XOR_NOT配下ANDORXORNOT_xxx.bmsも)。そういう戦略もありだろう。ちなみに当環境ではタホトレオ・batという拡張子なしのfileに文字化けしていた。

GNOMEは私の窓には広すぎた

beatorajaをLinuxで起動する

「OpenJRE」には「javafx」が含まれていないので、上記記事ではOracle JREを手動で展開しているんですが、Debian系だとaptでやるもっと簡単な方法がある というダイマDirect Marketingです。

https://www.gaftalk.com/2020/03/22/beatoraja-ubuntu/

うお〜~〜~これは超簡単で素晴らしいですね! Debian系?apt?って感じの私でも一瞬でbeatorajaの起動まで持っていけました! ありがとうございました。

私が記事の想定を下回る知能だったため「beatoraja-config.commandをターミナルで実行」で多少躓きましたが、以下の手順でできました。

  1. 展開したbeatoraja” directoryを開き、
  2. beatoraja-config.commandとかのfilesが見える場所の「何もないところ」を右clickして、
  3. 開かれるcontext menuから“端末で開く”を左clickし、
  4. ./beatoraja-config.command

    と入力してEnterを押す。

Ubuntu 16.04および18.04で確認済み。来月に予定されているUbuntu 20.04も日本語版が出たら試すつもりでいます。

Full版BMSE非公式Helpを更新しました

動作確認がつらすぎて途中で切り上げての更新です、すぐまた更新するかも、しないかも。

再び更新

Full版とLite版を更新しました。

Windowsの標準機能としてMicrosoft EdgeがEPUB形式をsupportしてくれていたからこそ私もEPUB fileを同梱していたのですが、EdgeHTMLがBlinkに挿げ替えられた結果、Windows環境では外部appsを導入しない限りEPUBを閲覧できなくなりました。う〜ん。他にまともなReaderが見つからない…… 閲覧しただけでEPUB書庫を悪意なく改竄してくるやつとか(META-INF配下にbookmark用のtxtを埋め込んでくる)、便利かもしれないけどそれはこれから配布しようとしていたfileなので……

Gorilla Problem

BananaBeats 20180529に1F3B9.bmsonの音声を全部演奏させる方法を二つ見つけた。

  • BOMを付加する。Bemuseやraindropに図表が認識されなくなる。
  • またはBMSON上にある非ASCII文字を全部escapeする。
    {
    "":"🎹",
    "version":"1.0.0",
    "info":{
    "title":"\uD83C\uDFB9 (escaped)",
    "artist":"\uD83C\uDFB9",
    "init_bpm":140,
    "judge_rank":84,
    "total":32,
    "level":1,
    "mode_hint":"beat-5k",
    "resolution":2
    },
    "lines":[{"y":0},{"y":8},{"y":16},{"y":24}],
    "sound_channels":[
    {
    "name":"\uD83C\uDFB9.wav",
    "notes":[{"x":1,"y":8},{"x":1,"y":21}]},
    {
    "name":"\u0E2A\u0E27\u0E31\u0E2A\u0E14\u0E35\u0E04\u0E48\u0E30-\u0E2A\u0E27\u0E31\u0E2A\u0E14\u0E35\u0E04\u0E23\u0E31\u0E1A.wav",
    "notes":[{"x":1,"y":10}]},
    {
    "name":"\u1787\u1798\u17D2\u179A\u17B6\u1794 \u179F\u17BD\u179A\u17D4.wav",
    "notes":[{"x":1,"y":12}]},
    {
    "name":"\uC548\uB155\uD558\uC138\uC694.wav",
    "notes":[{"x":1,"y":14}]},
    {
    "name":"\u4F60\u597D.wav",
    "notes":[{"x":1,"y":16}]},
    {
    "name":"\uD842\uDFB7\u91CE\u5BB6.wav",
    "notes":[{"x":1,"y":17}]},
    {
    "name":"v_o.wav",
    "notes":[{"x":1,"y":18}]},
    {
    "name":"v_foon.wav",
    "notes":[{"x":1,"y":19}]}
    ]}

これなら互換性を高める形でBTS差分を修正できそうだ。気づくのが遅かった……

BMSE非公式Helpをcompileした

一生Internet Explorer 6と添い遂げるためにこれから地獄の検証作業をします。特に問題がなければ今月中に新しい版をuploadします。白地に黒字という配色はcontrastがきつすぎて私には辛い。

Angolmois, bms diff tool, GDA Creator Professional Edition, ifPNG.spi, oggdec/oggdropXPd, otama, PMSee-V, Yukari, その他への参照をHTTPSに切り替えた。bmsoffighters.netucn.tokonats.netもHTTPS化していそうな気配はあるのだけど、実際にaccessするとweb browsersがなの……

昼行灯 (Hill & Dawn)

Windows OSが“D:\ とかにinstallされている状況を私は想定していなかったので不安になった。が、一週間くらい不安に耐えていたら気にならなくなってきた。こんな名前に設定できるのか私は知らないけど、仮に設定できたとして、Windows NT系ならcommandのpath部分を引用符で括れば済む話だろうし、Windows 9x系でこんなひねくれた%windir%を設定できる人なら私の文書など読むまでもなくだろう。……でもpath部分は全部引用符で括るように変更した。

(Unicode 13, U+1F977 'NINJA', Twemoji)

俺氏、今度はMicrosoftにbot扱いされて無事死亡

BMSE非公式HelpはRuntimeのinstall関連は書き終えて(結局その頁の高さが倍以上になった)、そういえばRuntimeのuninstallについて何も書いてなかったなと気がついた。後で書き足そう。あとMicrosoft謹製Visual Basic 6.0 Service Pack 6 Runtime packageの内容物(MSVBVM60.DLL以外のやつ)について、Windows 10/8.1ではそれらのfilesはWindows Updateで自動的に最新版に更新されるけど、supportが終わったOSでの最終patch版とか一応調べたほうがいいかなと思い立って調査してたらYour request has been blocked.とか撥ねられて一気にやる気なくした。

Blockが解除されるまで他のことをやる。beatorajaをLinuxで起動するなる記事を見たので後で試そう。長い名前のfileを内容に含むBMSが認識されないらしい。Linuxだと「階層ごとにUTF-8換算で256 bytes以内」だっけ? [追記] 「255 bytes以内」だった模様。

附録完了

加筆前と比較してHTML file sizeは4倍になった。非公式Help本文への追記は最小限にとどめたい。

雑記

7-Zip 20.00 alpha版、uninstallしても“Apps & features”の一覧から項目が消えない。19.00版だときちんと消えてくれるので、これはbugだろうか。それとも「alpha版はHKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\XXXの情報を消すべきではない」みたいな作法でもあるのだろうか。OSVER.BATがまさにこの情報を参照して7-Zipの有無およびversionを判定しているのでつらい。

beatorajaでWHIRLWINDが音抜けする理由」が凄い。明らかにKEY音が抜け落ちているのが分かる#019の先頭を例にとると、この瞬間は確かにBGMで128個の波形が同時に鳴っているように見える(ざっと数えただけだから間違っているかもしれないが)。こんな条件をよくぞ見つけたなあ……

もしかしてと思い、BTS差分の隠し譜面の「長さ数十秒の音声を32分音符間隔で24小節間連続させた箇所」を同時発音数256に上げて演奏したところ、10:3011:10で挿入される予期しないnoise」が抑制された! ありがたい、これは後でreadme.htmlに加筆しておきたい。[翌朝追記] 確認したら全然関係なかった…… 同時発音数を変更するまでもなく解決されていた…… 起動時にmemoryを多めに確保するようにしたからか? それともSound driverを入れ直したからか? 全然わからない……

I am, We are non-ascii

BOMは事実上必須です。メモ帳やruv-itやHDX/IIDXvは、BOMなしのUTF-8を認識しません。

notepad.exeはWindows 2000のそれでさえBOMなしUTF-8を普通に認識できる。正しくはこう

Windows 95/98/ME/NT 4.0のメモ帳は、BOMなしのUTF-8を認識しません。

なんだけど、Windows 95/98/ME/NT 4.0はOS自体がUTF-8を知らないのだから当たり前だ(Windows 95/98/ME/NT 4.0のメモ帳は、BOMつきUTF-8符号化text fileを開いても文字化けする)

BOMは事実上必須です。ruv-itやHDX/IIDXvは、BOMなしのUTF-8を認識しません。

そう。

そもそも私はなぜ「メモ帳がBOMなしUTF-8を認識しない」などと勘違いしたのか。検証する際にtext fileの先頭に🎹を書き込まなかったからだ。<!-- † -->Unicode Snowmanでは役不足だったのだ。私は今まで以上に呪術に詳しくなれたことを喜ぶべきだ。


以下追記。「メモ帳は、BOMなしのUTF-8を認識できない場合があります。」なら正しい。これはメモ帳に限らず「Encoding detectionがLegacy encodingとBOMなしUTF-8を誤判定しがち」という話。

なお、この日記は「役不足」の使い方を誤っている。うるせ〜知らね〜FF2

(Do not) Use non-ascii filenames

数年前にまとめた検証用書庫と解説(1)解説(2)。書庫内容を数年ぶりに見直しました。

  • readme.txt内のURLsをいくつか修正しました。
  • _unicode.jsをWindows 95/98/ME上でも動作するように修正しました。
  • Batch fileにJScriptを埋め込み、旧_unicode.jsを削除しました。

JScript部分はWindows Script Host 1.0以降の環境で動作するはずです。が、そもそもWindows 9x系のOS上には「CodePageが表現可能な名前」しか存在しえないので、このBatch fileは不要です。

Windows 10 1803以降で「System LocaleをUnicode UTF-8に変更」すると、書庫内の全OGG filesがoggdec.exe単独で変換可能になるので(oggdec *.ogg)、やはりこのBatch fileは不要です。


mBMplay v1.20.0222.0がreleaseされたので、関連頁を非公式helpに追加するつもりです。

OSVER.BAT

2020-03-15 v0.0.3
2020-03-15 v0.0.3
  • Commandのpath部分をすべて引用符で括るように変更。
2020-03-03 v0.0.2
  • 7-Zipの導入状況も調査するように変更。
  • Windows NT 4.0関連の調査を改善。
  • Windows 10のReleaseIdを取得するように変更。
  • Windows 95のnotepad.exeの制限に配慮して容量を削減。
  • BMSE非公式Help附録にこのBatch fileの解説を加筆(2020-03-07 加筆完了)。
2020-02-21 v0.0.1
  • 公開。

これはBMS関連Visual Basic 6.0 Runtimesの導入状況を確認するための、Windows用Batch fileです。このZIP書庫をdownloadして展開し、中身のOSVER.BATをdouble-clickなどで実行することによって、

  1. 現在のVB6 Runtimesの導入状況が確認されます。(註1)
  2. 「VB6 Runtimesがinstallされるべき場所(folder)」が開かれます。(註2)

このBatch fileは非公式BMSE Helpの内容の一部であり、それ以上のものではありません。このBatch fileを実行しても、環境への影響はありません(もしあればそれは著者の意図しないBugです)。

  • [註1] Windows Script Host 2.0(5.1)以降の版が導入済みで、且つWSHが有効なら、対象Runtime fileのversionおよびRegistry登録状況も確認されます。
  • [註2] folderを開くには、Internet Explorer 4.0以降が導入されている必要があります。explorer.exeが存在しないWindows環境もあるそうですが、このbatch fileはInternet ExplorerのversionやExplorerの有無までは確認していません。また、IE4を迂回したIE5/IE6環境も考慮していません。

[追記] すまん、ありゃウソだった。でもまあ俺にはうまくいかない理由がわからないからさ……

Comma-Separated ProductVersions

完全に自分用備忘録。
%SystemRoot%\SysWOW64
filenameProductVersion
BWContextHandler.dll1,0,0,1
CAPICOM.DLL2,1,0,2
ctl3d32.dll2,31,0,0
FlashPlayerApp.exe32,0,0,330
FlashPlayerCPLApp.cpl32,0,0,330
icuin.dll61,1,0,0
icuuc.dll61,1,0,0
NTSVC.OCX1,0,0,1
VBPrnDlg.dll2,1,0,0
wvc.dll1,0,0,1

Microsoft EdgeHTML 18.17763検証用の仮想Windows 10Visual Basic 6.0 Runtime Plus 2.2をほぼ最小限の構成で導入し、SysWOW64配下filesのProductVersionをscriptによって一括出力した。その際に、奇妙な値が混じっていることに私は気がついた。これは運用上の理由? ただのtypo?

このFlashは先週の“Patch Tuesday”にて更新された版だが、たまたま持っていた古い版を確認したところ、そちらはFileVersionProductVersionも両方とも32,0,0,238になっていた。

(翻訳)Windowsモジュールの製品バージョンとファイルバージョンの違い」とかFileVersionInfo.ProductVersion プロパティとかVERSIONINFO resourceとかを読んだ。

FileVersion
Version number of the file?for example, "3.10" or "5.00.RC2". This string is required.
ProductVersion
Version of the product with which the file is distributed?for example, "3.10" or "5.00.RC2". This string is required.

つまりこれら、内部的には決まりがあっても、表に出る部分はただの文字列? もしそうなら、Versionを律儀にcheckするappsをほとんど見かけないのも、そりゃそうだよね……

まあ、BMS関連appsが使いうるruntime librariesに限れば、「Comma区切りかFullstop区切りの数字4組」みたいな感じで決めつけちゃっても大丈夫っぽいけど……ていうか決めつけるけど……

こんな状態でversion管理できているのが不思議。Registryを見る限りでは、「最新版のfileを登録すると、そのfileの過去版のGUIDも全部まとめて登録される」ような感じっぽいけど。わからん。

Batchy Jobs

C:\Users\IEUser%SystemRoot%\System32\systeminfo.exe /FO CSV /NH

"IE7VISTA","Microsoft® Windows Vista Enterprise ",

唐突に登録商標(R)とか商標(TM)とか出してくる。ASCII前提の小細工は死ぬ。

C:\Users\IEUser%SystemRoot%\System32\wbem\wmic.exe os get Caption /format:CSV

Node,Caption
IE7VISTA,MicrosoftR Windows Vista? Enterprise

次はどこからいつ襲ってくるんだ。

“WMIC is deprecated.” オレのそばに近寄るなああーッ

先日の続き

未練がましく調べている。環境によってはWSHを導入する選択肢が現れる。しかし導入済みならversionを問わずinstallingがskipされるから、選択肢が意味を持つOSは事実上Windows 95/NT4.0のみWSH 5.6未満環境を必ずWSH 5.6に引き上げる」なら最高なんだけど、残念ながら違う。

WSHの再頒布条件がどこかに書いてあったか探していて、WSH 5.6の公式日本語Helpをいまさら得た。この頁を初めて見た当時の私は、三種類のEXE filesのうちどれを選べばいいかさえ分からなかった。そういう右も左も分からぬ人にこそ薦めたいpackageなんだけどな〜これ。

結局WSHのlicenseはまだ見つからない。このinstallerがVisual Basic製でないのなら、VB Runtimesを再頒布するのは条項に抵触しているはずだし、大量に含まれる選択肢それぞれのlicensesを探して確認することも私には難しい。もう腹を括って諦めるしかないか。

Visual Basic 6.0 Runtime Plus 2.2

Visual Basic 6.0関連の脆弱性修正をこれほど反映してくれているthird-party packagesを私は他に知らない。uBMplayやnazobmplayが用いるDX7VB.DLL/DX8VB.DLLなんかも一発で揃ってしまう。このpackageで揃わないBMS関連Visual Basic apps動作環境なんて、VB6JP.DLLくらいでは。

備忘録:
  • 2010年代前半の脆弱性修正は網羅されている。2010年代後半の脆弱性修正は未収録とはいえ、過去10年間最も悪用例の多い『Microsoft Office』のバグ」などは対処済みなので、2004–2006年頃までの更新しか反映されていない日本のpackagesを初心者に紹介するよりは遥かに安全。
  • Windows 95–10に適用可能。自分の環境(OS Version, Processor Architecture, System Root, installed runtime/ActiveX, Registry Entries, …)を把握したうえでCommand-line Interpreterを管理者権限で起動して云々、みたいな「Casual usersを捕まえるなら後回しにしたい解説」を短絡できる。
  • 所定の位置に既に同名のfileがある場合は、そのfileのinstallingがskipされてしまう(ProductVersionの新旧やRegistry Entriesの有無など一切合切無視される)。尤もそこまで照合したうえで賢く振る舞ってくれるinstallerは、Microsoft謹製のRuntime packageくらいではある。
  • Full installationを選ぶと約300 filesがinstallされる。7-Zipでも中身を覗けないので、必要なものだけ欲しい人は手動導入不可避。でも「“:が打てない場合はShift+(日本語106/109 keyboard用のdriverが当たってない状況)」みたいな気が滅入る追記を消せたのはこいつのおかげ。
  • Uninstallすると、System Directory内にinstallされたfilesはそのまま残されるがinstall時に追加されたRegistry Entriesは一掃される。OS Built-in Runtimes(たとえばWindows ME以降のMSVBVM60.DLL)の登録は残るようなので、おおむね導入前の状態に戻せると考えてよさそう。[追記] 私は勘違いしていた。Installed filesのは、uninstall時にちゃんと一掃される。一部は残る。
  • あれ? でもWindows ME同梱のMSVBVM60.DLLってたしかSP5相当とかだから、これ更新してくれないとBMSEとか動かねんじゃね? でも元からあるやつは古くても据え置きだから、これに丸投げするのは結局むりじゃね? え、これ確認すんの糞面倒くさくね…… [追記] SP3相当らしい。細かい挙動差までは確認していないが、BMSE 1.3.8もuBMplay 1.4.4もVB6 SP3版で普通に動作した。私は“VB5”“VB6 SP5”を勘違いしていたようだ。
  • あとはinstaller自体の素性が信頼できるかどうかだが、技術者でも専門家でもない私には判断できない。英語は読めないし日本語の情報も皆無なので、非公式helpを書いていなかったら私は近づいていなかったと思う。VirusTotalの検査結果はおおむね安全であるように見える

あ、でもこのpackageがlicense的に白いか黒いか私にはわからんわ、はい終了〜あっ涙出てきた……

Virtual Machineが起動も削除もできなくなった

状況を改善できなかったので諦めて他の作業を進めた。“Windows Subsystem for Linux”を新環境に導入した。Linuxと縁がない私にはLinuxの利点が長らく分からなかったが、幾多の自信ニキがこぞって喜んでいたことにあやかり軽率に導入した結果、Command Promptから直接w3mやBashを使えるようになったのは僥倖だった。最近のWindows 10上でLynxは日本語版英語版もよくわからなくなっていただけに、助かった。って、なんかLynxのwebpagesもHTTPS化している……いつのマン

Command PromptからWSL経由でBOMつきUTF-8のBMSを列挙する:
cd /d "D:\bms\Be-Music West II"
bash
find . -type f \( -name '*.bms' -or -name '*.bme' -or -name '*.bml' -or -name '*.pms' \) -exec file {} + | grep "(with BOM)"
Command Promptからw3mする:
bash
w3m https://hitkey.nekokan.dyndns.info/bmse_help_full/

grid2secはInternet Explorer 5.01以降で動作する(IE5.0は駄目)。ということはこのscriptはWindows 3.1上でも動作するはず。30年前のOS…… 見たことさえない……

HTML Help Frequently Asked Questions

旧住所:

https://msdn.microsoft.com/ja-jp/library/ms669980(v=vs.85).aspx#i_m_using_microsoft_internet_explorer_3.x_on_a_windows_95_operating_system._when_i_try_to_look_at_the_help_for_html_help_workshop__i_don_t_see_anything._what_s_wrong_

新住所:

https://docs.microsoft.com/ja-jp/previous-versions/windows/desktop/htmlhelp/html-help-frequently-asked-questions#im-using-microsoft-internet-explorer-3x-on-a-windows-95-operating-system-when-i-try-to-look-at-the-help-for-html-help-workshop-i-dont-see-anything-whats-wrong

僕は ついてゆけるだろうか 機械処理の賢さに (二週間ください)

あっ

raindrop 0.600bのみならず、BananaBeats 20180529も、たぶんnon-ascii resourcesを参照できないっぽい。俺はなぜ勘違いを…… わざわざ修正したreadmeでさらに間違うなんて……

beatoraja 0.7.5, Bemuse 47.1, Pulsus 0.5.3は、以下のBMSONを正しく再生できた。
{
"version":"1.0.0",
"info":{
"title":"🎹",
"artist":"🎹",
"init_bpm":140,
"judge_rank":84,
"total":32,
"level":1,
"mode_hint":"beat-5k",
"resolution":2
},
"lines":[{"y":0},{"y":8},{"y":16},{"y":24}],
"sound_channels":[
{
"name":"🎹.wav",
"notes":[{"x":1,"y":8},{"x":1,"y":21}]},
{
"name":"สวัสดีค่ะ-สวัสดีครับ.wav",
"notes":[{"x":1,"y":10}]},
{
"name":"ជម្រាប សួរ។.wav",
"notes":[{"x":1,"y":12}]},
{
"name":"안녕하세요.wav",
"notes":[{"x":1,"y":14}]},
{
"name":"你好.wav",
"notes":[{"x":1,"y":16}]},
{
"name":"𠮷野家.wav",
"notes":[{"x":1,"y":17}]},
{
"name":"v_o.wav",
"notes":[{"x":1,"y":18}]},
{
"name":"v_foon.wav",
"notes":[{"x":1,"y":19}]}
]}

これらの実装ではUnicode filenameを使えそうだが、beatorajaの場合は「BMSON形式に限り」という但し書きが付く(BMS形式のencodingはいまのところANSIだけがsupportされている[訂正] beatoraja 0.7.6は“System default encoding”ではなくShift_JISのみをsupportしている)。

BTS差分を微修正した

登録期間内であれば書庫を修正しても構わない、という事実に登録期限90分前に気がついた。

  • "level"の値を11から10に変更した。(“rehabilitation” [ANOTHER]から変え忘れていた)
  • "poor_events"配列内の"id":255が連続する箇所を"id":256に修正した。
  • "child\\a.wav""child/a.wav"に変更した。45078087 bytesが削減された。
  • raindrop上で“ABC”の一部の音声が鳴らない件について、readme.htmlに加筆した。

可能ならASCII-renamed resourcesを追加したかったが、実装間の差異が最大化されたほうが面白いかなと考え直し、cross-reference tableに新項目を一段足すにとどめた。

ちなみにBananaBeatsで全曲版を遊ぶと、closing songの後のbonus trackが鳴らなかったりする("duration"が加算されるはずの箇所で応答なし状態に陥るため)。

賞味期限が十数年前に切れたMEVIUS(旧称MILD SEVEN)を発掘した

かつて「BGAのススメ」なる素晴らしいBMS映像関連情報まとめがあった。当siteもBMSE非公式Helpからhttp://bga.albalunaweb.net/53.htmlhttps://albalunaweb.net/bgamemo/2197.htmlを参照していた。今はどちらもWayback Machine上にさえ残っていないが、同名のDiscord Serverを見つけたTopicsを静的に参照できる形ではなさそうなので、次回更新版では言及を避ける予定。

RAREWARESがHTTPS化していた。折しも環境移行中だった私はsoftwaresを再びdownloadした。x64版oggdropXPd V.1.9.2に複数filesを一括dropすると強制終了する。Generic版は大丈夫。

最近のWestern Digital製HDD従来の方法ではIntelliParkを無効化できない。困った。

管理アプリケーションの承認UI」に永遠に待たされる問題、周辺機器のdrivers更新時にも発症するようになってしまっていた。常時無防備体勢を検討したくなる程度には煩わしい。

10拍子に7連符を入れたsolo」という字面から即座にrhythmを想像できる? 私は無理。Indianは数学が得意という俗説もと思わせる事例だった。

BOFoon 2005–2008のwebpagesが復活していたので、BMS Event関連pagesを書き換えた。

輪切り者のRequiem

B.I.D.C関連BMS event pagesが復活していたようだ。私は先日ようやくこのことに気がつき、BMS eventまとめpagesからの参照先をWayback Machineから変更した。また、に終了した日本Yahoo! GeoCities配下にあったいくつかのBMS event pagesの参照先を、ついさっきWayback Machineに変更した。

Wayback Machineに依存しすぎるのは申し訳ないし怖くもあるので、BMS event pagesの移転先をWaybackの外に見つけることができた場合は可能な限りそちらを参照したい。ただし例えばBMS OF FOON 2005–2008に関しては、http://myk38k.nobody.jp/bms/event/01/bofoon2005.htmlとかに普通に存在するっぽいんだが、私がさきほど確認した時点ではこのURIに到達できなかったので、いまのところ仕方なくWayback Machineを参照している。[追記] いつのまにかWayback Machineの外に到達可能になっていたので参照し直した。

君の名はペイジ

私が常用しているapplicationの新しいversionをinstallしようとしたところ、証明書の更新に失敗したらしく、installerを実行しても砂時計状態が永遠に続く。Task Managerによると「管理アプリケーションの承認UI」なる見慣れないprocessが砂時計の発生源であるようだ。このtaskを終了させると「ファンクションが間違っています。」なるerror messageが表示される。Installerを実行してもapplicationを更新できないので様子見で古い版のinstallerを実行しようとしたところ、なんとそちらまでinstallできなくなってしまっていた。

「ユーザーアカウント制御設定の変更」から通知を一切行わないガバガバ設定に一時的に変更することによって、強引にinstallすることができた。Applicationの設定は案の定吹き飛んだが、最悪の事態は避けられたのでよかった。

BMSONに関するいくつかの小技

Pulsusの自動演奏

settings.json"gameplay" key配下"assistMode"の値"Disabled""Autoplay"に変更すると、Pulsusは図表を常に自動演奏する。BMSONのViewerとして最適だと思う。

自動演奏せずに長尺曲を任意の小節から遊ぶのも楽しい。BMSONのTesterとして最適だと思う。

"D:\Pulsus\Pulsus.exe" "D:\BTS_Package\readme.bmson" --measure 1136

Keyconfigや既定のBMS folderの設定なども、settings.jsonから行える。

BmsONEのあんまり参考になりそうにない小技

BTS差分の旧全曲版をBmsONEで普通に開くと、私の環境では起動に8分を要するMaster CacheだかBuffer Cacheだかが残っているらしい状態でも、起動に4分を要する。起動直後にMemory使用量は11000 MiB程度まで膨れ上がり、やがて4060 MiB前後に収束する。あらゆる編集操作に重石が乗せられたかのように遅延が生じる。

このようなBMSONも、音声を参照できない場所に隔離して開くと、BmsONEが瞬時に起動する。BTS差分の規模になると、無音声状態で編集しても私の環境では操作に遅延が挟まるのであんまり快適にはならないが、全音声を一度に読み込むよりは確実に楽。

無音声を基本状態として、必要な音声だけを部分的に参照させる方法も有効(BTS差分しくじりメドレーのような構成なら尚更)。たとえばD:\BOFooxXV\missから、misses.bmsonおよび030” folderをDesktopにcopyし、Desktop上で030地帯をBmsONEして、元の場所に上書きする、とか。

あとあれ、LongNotesをBmsONE上でCtrl + Left-Clickや範囲選択で複数選択してから、既定では左側の一番下あたりにある「選択オブジェクト」欄の「拡張情報」入力枠に

"t": 3

とか入力すると、選択していたLongNotesが一括でHELL CHARGE NOTEに化けて気持ちいい(beatoraja拡張、いまのところbeatoraja専用)。Notesの長さも複数一括変更できたりする。

さらにさらに、BMSでは禁じ手だった「KEY音を多重定義して音量倍増」、BMSONではLayered Notesという神仕様があるのでがんがん使っていける。tudadadanだけ妙に控えめだなあ……ヨシ!みたいな

Bemuseでlocal BMS/BMSONを遊ぶ

Google ChromeやVivaldiなどのBlink系web browsersの場合:

遊びたいBMSをfolderごとBemuse選曲画面に直接dropすればよい。

たとえば(^^)を遊びたい場合は、yamajet_is_sugoi” folderを選曲画面にdropする。

Firefoxの場合:

「図表群およびそれらが参照するresources全部」を選択して、選曲画面に直接dropする。

たとえばWanted Beatを遊びたい場合、haleit_wanted” folderを全部選択してまるっと選曲画面にdropする

DropしたBMSONに有効な"title_image"が定義されていれば、その画像が背景に描画される。

https://bemuse.ninja/?archive=https://www.dropbox.com/s/mhzxcmnzg9eciw1/BOFoonXV_koushien.zip?dl=1のようなURL直貼りさえ可能な現在、BMS/BMSONがBemuse上で著者の期待通りに動作するかどうかを作品公開前に検証しておくことは決して無駄にはならない、と私は思う。

beatorajaのheapを増やす

[追記] この方法は撤回します。使用メモリのほとんどはダイレクトバッファ、テクスチャ等のいわゆる非ヒープメモリのためあまり効果はないと思われる」とのことです。BTS差分ではscrollingが劇的に滑らかになったのですが、一般的なBMSでは有効でないかもしれません。ごめんなさい。

BTS差分readme.htmlにも書いたが、「beatorajaが使うことができるmemory」の割り当て量は増やすことができる。大量のresourcesを読み込んでも滑らかに遊べるようになったり多くの恩恵があるが、物理Memoryに相応の余裕が必要。試すなら自分の環境と相談して適当に指定されたい。

beatoraja-config.batbeatoraja-config.commandからbeatorajaを起動している場合は、それらをメモ帳で開き、以下の部分を適宜書き換えて保存する。-Xms8g -Xmx8gも確保できれば大安定。

java -Xms1g -Xmx4g -cp beatoraja.jar:ir/* bms.player.beatoraja.MainLoader

beatoraja.jarLaunch4jでEXE化する場合も、heapを指定できる。BTS差分のreadme.htmlを参照。

おみくじいっぱい宜候

先日の補足。BMSE Conversion Wizardと定義list複数項目移動の組み合わせは、複数のBMSesをまとめる際に便利だが、分解能制限を見誤るとrhythmが狂う。missでいうと、#IF 16|18|26|2736分音符44分音符は、BMSEやBMS List Sorterを通すと丸められてしまう。これらの分岐を私は初手でBMSONに変換して後から統合した。bmson is sound channel based.とあるようにのがBMSONなので、LEGO Bricksを組み変えるような工程(俗にいうBMSE作曲とか)はBMS形式であるうちに済ませておくほうが楽だなあと私は思った。

「ここでBPMが変わりますよ」という視覚的指標がない状況でBPM変更で翻弄する譜面はであり、ritardando中も#BPMは変えずにnotes間隔のほうを弄る“miss” #IF 70のような譜面が好ましい、と昔の私は感じていた。今はBPM変更地点はBPM Guideで視覚化できるし、見た目上の落下速度も#SCROLLで調整できるようになったのだから、ritardandoは愚直にBPMを変えていくほうがbeat indicatorも同期してよかろうと思うようになった。むしろ革命叙情のような糞譜面こそがこれらの新機能を生んだともいえるからして、糞にまみれる資質持ちは積極的に糞たらん。私にはもう何もわからん。

missしくじりメドレー

全分岐を順番に遊ぶだけの差分。Bemuse以外のBMSON対応機種で遊べるはず。私は曲変更どころか配置変更さえ一切していない(負数BPMを削っただけ)。

iBMSC/μBMSCでは定義list項目を複数選択して動かすことができる。この機能はとても便利だが、一枠動かす度に矢印iconを一回押下する必要があるので、Alt+↕を押しっぱなしにすることで連続入力できるBMS List Sorterのほうが(分解能などが対応している範囲であれば)楽。

𛁛𛂦゙𛀔𛀆𛁈𛀈

Deepesced LinkzBPM変更を#SCROLLに置き換えた差分Anzu BMS Diff Tool_deepesced_linkz_h.bmsと比較して差異が検出されないことを確認済み。元図表はscrollingの辻褄合わせに捏造された128分音符を持つので(#064)、安全に編集するならiBMSC/μBMSCが必要だ。BPM変更を解除した#SCROLL差分は128分音符を持たないので、BMSEでも安全に編集できる。

Notes patternやscrolling結果が同一であるにもかかわらず、original版のほうが#SCROLL版よりも楽しい。視界の端でrhythmicalに蠢くBPM欄もgrooveに寄与していた。私は考えを多少改めた。とはいえ#SCROLL版のほうが便利ではあり、それはBmsONE上でよりはっきりする。

#SCROLL差分のscrolling変動率はBMS版とBMSON版で共通だが、scrolling結果は異なる。beatoraja 0.7.5が"scroll_events"の小数値"rate"を無視するのが原因。これを回避すべく、私はBTS差分の旧全曲版では小数値がなくなるまで"rate"を整数倍した。#1001小節目のscrolling速度は2048 bpm相当まで跳ね上がった。これはこれで面白かったが、現在の短縮版では元の変動率に戻している。

今年もよろしくお願いします

BGAに重なるタイムテーブルが、てっきりそういうBGAなのかと思ってしまいました。

たしかにScreenShottimetable.pngみたいなBGA画像素材にも見えますね〜。"subtitle"の改行は歴としたBMSON仕様のひとつですが(“Multiple line subtitle may be possible by including a newline character \n”)、引用したmayが要請の程度としての「してもよい(may)」であるならば、あくまでも選択肢にとどまる仕様でしょうから、図表著者が確実を期すなら、comment氏が最初に解釈したように複数行textを画像化し、それを"bga"に定義して使うのが無難ではあるでしょう。

実際このtimetable文字列、beatorajadefault skin)とBemuse以外ではまともに表示されません。とはいえ私は選曲画面が崩れる副作用を予め知っていたとしても"subtitle"の画像化はしなかったと思います。可能な限り多くのresourcesを参照することに加え、可能な限り多くの仕様を活用することも今回の拙作差分の目的だったからです。まあ現在の短縮版では使用を中止した要素もありますけれども(小節数1000超え・BGA定義数1300超え・停止時間の加算など)。

日記

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