doubledepth

BMX2WAV次期版構想中

要望やら意見やらは多ければ多いほどマジで良いです。後から対応するより最初から考えておく方が良いので今現在での意見マジ募集です。ここのコメント欄も(以前はSPAMが合ったのでユーザ限定にしてたけど)今は誰でも書き込めるのでよろしく。

とのことなので、ご意見ご要望ある方は氏の記事にどしどしcommentを投稿しましょう〜

私は今月中は当日記の更新をお休みさせていただきます!

Comment返信

ヒェ、お体大丈夫でしょうか。

こちらはTEMです。そろそろBMX2WAVの次バージョンを考えてるのですが、

BMS界隈から完全に離れていて、今のトレンドやらどんな需要やらが全く判らない状況です。

どこか中心となるコミュニティとかあれば意見交換しながら開発したいかなと思っているんですが。

(Twitterとか5chとか?)良い場所とか知らんですかね?

お久しぶりです! 当方限界状況につき手短な返信になってしまうことをお許しください。

Activeな開発者の方々はTwitterやDiscordやGitHubなどでやり取りをされているようです。英語圏にもVSRGなどをはじめいくつかのcommunitiesが存在するようです。Advent CalendarやQiitaなどでびっくりするようなBMS関連softwaresがreleaseされたりもします。数年前にはbms.undo.jpという場所もあったようです。FacebookやMastodonなどにもcommunitiesが存在する可能性はありますが、私は一切把握していません。

BMSONという新形式が開発されました。仕様書は英語で書かれており、すくなくとも6つ以上の実装が既に存在します。これに関する日本語の情報としてはBMSまとめwikiが詳しいでしょうか。

BMX2WAV更新楽しみです! 以下の個人的な要望は、ご不要なら読み飛ばしていただければ。
  • BMSON形式は現時点でもPulsusやBmsONEなどを介してWAV化できますが、Batch processingや他の変換器への中継は用途が違うかなという感じなので、BMX2WAVでそれができると嬉しいです。
  • WindowsのSystem localeのみならず、任意のtext encodingを指定できると便利かなと思います。BOFU2017では、Shift_JIS(というかCP932)、EUC-KR(というかCP949)、GBK(というかCP936)、UTF-8(大半BOMつき)などのBMS filesが見られました。
  • BMX2WAVに「Shift_JISの駄目文字」を正しく扱えないbugがあるそうです。
  • Alcubierre Drive分解能558桁)のようなscrolling演出が近年のtrendなので、分解能制限が緩和されると嬉しいです。分解能558桁というよりは、分解能を他の小節に持ち越さず各小節内各channels内で都度解決していく実装(おそらくLR2など)で再生されることが前提されているBMS、というべきなのかな。日本語力が及びません。ちなみに当方で勝手にBMSON形式に変換してみました
  • 一曲に対して複数のBMS filesを用意するstyleが長らく主流であり続けており、一括変換時にbatch側で譜面を選り分けるのが手間かなぁと感じた経験があります。#DIFFICULTY拡張命令で「優先する変換対象」をfilteringできると便利かもしれません。「LR2の#DIFFICULTY解釈」に関する詳細解説記事をどこかで見かけた記憶もありますが、うろ覚えでURLが出てきません、すみません。

近況報告

腰痛・尿閉・便秘が一度に襲ってきて以来、私は布団を温めるための存在になり果てています。生活全般が物理的に苦痛なので、ある程度回復するまでは休養させていただきます。特に腰痛が致命的で、椅子に座ることさえ難しく、こんな状態で仕事ができている某氏に尊敬の念を新たにするところです。

今日も生きて布団から出られた俺すごい

書きたいことはいろいろあるのですが私に余裕がありません。申し訳ございません。寒すぎる。

@dtinth’s µBMSC ForkをbuildするためにVisual Studioを導入したい。C:\ Driveが空いてない……

beatmania 2ndmix LOVE SO GROOVY連打がずれているという話。これらのずれはFramesの取り扱いに起因するものらしい。私は一回目の連打と二回目の連打のずれ具合が異なるなあとは思っていた。

#PLAYLEVEL vs. #ABSTRACTLEVEL

演奏難易度とは別に、たとえば“u gotta groove”のGuitar notesを丸呑みできるかどうかという難しさがあると思う。抽象化された図表を受容する能力は人によって大きく異なる。

“u gotta groove”のGuitar phrase notes(図右)と、それをKEYBOARDMANIA様に音階通りに図表化したimage(図左)。

見えているrhythmと聴こえ方が一致しているほど簡単と感じるtypeのplayersにとっては、“u gotta groove”よりもOVERDOSER (Driving Dub mix)のほうが初心者向け図表たりうるかもしれない。

BmsONE + beatoraja

BmsONEを、編集中のBMSON図表をtestするためにbeatorajaを起動し、演奏後BmsONEに戻ると、BmsONE上で音声が発音されなくなる。私以外の環境でこの現象が発生するかどうかは知らない。この現象は、“beatoraja configuration” Audio” tab Audio Outputの項目がOpenAL (LibGDX Sound)場合に発生する。私はASIO4ALL Version 2.14を使用している。図表編集用途なら発音遅延を気にする必要性はあんまりないので、日記に書くのを今まで忘れていた。

CPU Usageを監視しても意味がなさそう

先日のscriptは監視対象のCPU使用率が0 %になったのを検知した瞬間にprocessを殺しにかかっていたが、何度か試すと「音声や映像を再生しているさなかにもかかわらずCPU使用率が0 %近辺で落ち着いている状況」が頻繁に発生し、演奏中のprocessが突然殺されるという誤判定が多発した。私は「CPU使用率を二秒おきに取得し、三十回連続でCPU使用率が0 %だったならtaskkillする」という応急処置を施した。これによって誤判定はほぼ抑制できたが、判定の無謬性を保証できるわけではないし、演奏終了後五分以上生き延びるprocessもある。CPU Utilization is Wrongという記事の通りなのだろう。

[以下追記] もし必要なら、137行目からの配列内容を以下のように書き換える:
var txt = [
    "var w=WScript,PID=w.Arguments(0),n=w.ScriptFullName,fso=w.createObject(\"Scripting.FileSystemObject\"),g=function(pID){",
    "var i,e=new Enumerator(GetObject(\"winmgmts:{impersonationLevel=impersonate}!\\\\\\\\.\\\\root\\\\cimv2\")",
    ".execQuery(\"Select * from Win32_PerfRawData_PerfProc_Process where IDProcess=\"+pID));",
    "while(!e.atEnd()){i=e.item();e.moveNext()}if(i&&i.Name){return{p:i.PercentProcessorTime,t:i.Timestamp_Sys100NS}}},",
    "l=function(c){var c1=c,c0,u,z=0,o=30;while(z<o){if(!c1){return}c0={p:c1.p,t:c1.t};w.sleep(1000);c1=g(PID);",
    "switch(c1?Math.round(((c1.p-c0.p)/(c1.t-c0.t))*100):-1){case 0:w.sleep(1000);z++;break;case -1:return;default:z=0}}};l(g(PID));",
    "if(g(PID)){(w.createObject(\"WScript.Shell\")).run(\"cmd /C taskkill /F /PID \"+PID,0,true)}if(fso.fileExists(n)){fso.deleteFile(n)}"
];

あぁ^〜

[2018年5月12日追記] この記事で言及しているbeatorajaの問題は、すくなくともbeatoraja 0.5.5では修正されていました(気づくのが遅れてすみません)。したがって以下のJScriptはもはや不要です。

私の環境では、beatoraja 0.5.2を引数つきで起動して単曲演奏を行うと、processが正常に終了しない。この問題に個人的に対処するために、javaw.exeProcessIDを取得して監視し、このprocessのCPU Usageが0 %に落ち着いて数秒経過したらtaskkillするJScript」を書いた。すくなくともLaunch4j産のexecutable fileにおいて、このscriptは期待通りに働いていたが、Editorsからも呼び出せるようにしようとしてjsc.exeを試した瞬間から、「アクセスが拒否されました」というmessageだけが返されるようになってしまった。「正常に働いていた段階のbackup」に書き戻しても、依然として「アクセスが拒否される」。仕方なく以前までのshortcut.lnkを使うやり方に戻したところ、今度は:

「ハンドルされていない例外: Microsoft.JScript.JScriptException: 'WScript' は定義されていません。場所:Microsoft.JScript.LateBinding.GetValue2(), JScript 0.Global Code(), JScript Main.Main(String[] )」

java -jar beatoraja.jar -(a|p|r1|r2|r3|r4|c) [BMS path]という元々の形でならうまくいく。というか素人が余計なことをしたせいでもはやこの指定しかうまくいかなくなったというべきか。この場合もbeatoraja.jarのprocessは生き残る。cmd.exeを閉じるとbeatoraja.jarも終了する。

[追記] よく見たら俺のbeatoraja.exeのfilesizeが45 KiBしかなかった。明らかにEXE化に失敗していた。正常なEXEで試したらscriptもshortcutもcommandlineも普通に期待通りに働いた。お騒がせしました。ついでに話題に挙げたJScriptはこれ(まだBmsONEからの呼び出しに対応してない)。

[さらに追記] もしかして:jsc.exeによって私用JScript fileがEXE化される script filenameがたまたまbeatoraja.jsだったために、EXE化されたJSctipt fileが「元々EXE化してあったjar由来のbeatoraja.exe」を上書きしてしまう それに気づかずに二時間くらい無駄に右往左往奴〜

日記

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
_wsh_bms2bmson.js

その他

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