#064
まで続く譜面の #004
に負数 BPM があれば、#004-064
の全音声が一度に再生されます#STOP
の値の丸め方の違いも調査しておきました入力値上限やデフォルト値が示されたので確認 :
120
fps を指定 → 妙にゆっくり再生される動画が出力される (環境依存な気もするけど)65536
はスペックの問題で確認できなかったので、2560
とか height 7800
とかを指定 → たぶん大丈夫でしたD&Dからの標準入力で、"ー"や"ヽ"等の文字を使うとバグる(環境依存?)
・・・
ついでなので、さっき調べた箇所をまとめる
decimal fraction: | RDM, ruvit, nanasi, fgt#, iBMSC, IIDXv, HDX, BGAEncAdv, TechnicalGroove | |
---|---|---|
to integer: | round down: | DDR, WAview, in_bm2, bme2wav, LR2, fgt++, Angolmois, Sonorous |
round up on 5: | nazo, nazoZZ, uBMplay, BMSE | |
out of order: | GALLI, pomu2, PMSee-V | |
stopped: | bmx2wav |
たとえば “#stop01 24.4
” と指定した場合、
二行目のグループは、「192分音符 × 24 個分の停止時間」
(詳しく調べてないけど、小数部を切り捨てるか四捨五入するかはそれぞれ異なる)
#STOP
オブジェクトの発動位置が大幅に狂う#STOP
を不正な値とみなし、無視して変換するか中止するか尋ねてくる#02807
- #03007
が抜けている気がしたので手元で試したところ、文字コードについて色々と言われているけれど、とりあえず今はこれだけ。
BGAEncAdv.exe
にBMSファイルをドロップすると、対話モードで動画化できるようになりました!cmd.exe
上での対話は、うまくいっているようです!lifthrasiirです。最近はプログラミングはしない文だけ書きますね。
- UTF-8 overlong sequence(
28
->E0 80 A8
)はSonorousの(そしてもっと正確にはRust standard libraryの)バグです。Encoding関連された部分は全般的に直さなければならないがrust-webencodingsが更新がなくて orz
E0 80 A8 5E 5E 29
” をそのまま Shift_JIS
で表現すると “烙ィ^^)
” になるので、後から考えると何か変だなーとは思っていたんですが、これはバグでしたか・・・ 失礼しました;- Rationaleをちょっと追加しましたが、全部英語なのでちょっと負担になるかも知れません。助けになるかと思ってEncoding Rationaleだけ簡単に要約します:
1. UTF-8宣言をコマンド(
#CHARSET UTF-8
,#ISUTF8
, ...)にするとencodingを知るために、ファイル全体を読み取る必要がある危険性があるし、全角空白indentationをサポートする実装とも互換性がない。2. UTF-8 BOMはすでにいくつかの実装をサポートするが、本質的に空白文字であるため、欠落される可能性がある。
3. したがって、UTF-8 BOMとは別に、最初の行がUTF-8文字列ならUTF-8と認識するようにする。既存のBMSは最初の行が空であるか、
#PLAYER
コマンドである場合が大半であるので、大きな問題はないようだ。まあ、私なら多分"
<BOM>UTF-8
"と最初の行に書いて入れないかと、(笑)
so you can order any lines freely.
ですから、難しそうですよね。項目 2 がよくわかりません、U+FEFF はそもそも空白文字なのでしょうか?
UTF-8 (no BOM)
を採用するすべての譜面作成者がこのプロトコルを必ず守ることはありえそうにないが、それでもこの習慣は効率化につながりそうなので定着してほしい、と思いました。互換性を考慮した結果、<BOM>†
などという珍妙な記述になってしまいました orz ダガー要らない orz
いや、UTF-8 BOMに期待せずにencodingを認識する手段が問われているのだから、「UTF-8の妥当な文字列」(この場合、“UTF-8” や “†”) こそが必要なのでした orz
UTF-16BE
を読めない不具合が修正されたのを確認しました!#SWITCH
が機能していなかった不具合が修正されたのを確認しました!
#DEF
よりも後方にある #CASE n
は絶対に選ばれません (仕様。 警告されます)loadtestW.exe
が復活していました!註 : この日記は翻訳でも解説でもない、自分が理解するためのメモです。 鵜呑みにしないでね
Sonorousは、以下のいずれかに該当する BMS を、UTF-8
として解釈するよう提案する。
UTF-8
の BOM」 (バイト列 EF BB BF
) で始まる。 または、UTF-8
のBOMはオプション。 → CPxxx
系列との区別は多少面倒?CPxxx
系列と区別するために、UTF-8 固有のバイトシーケンスを含む文字 を書いておくべき? 杞憂?Sonorousは、さらに以下の事柄を提案する。
より精巧なユニコード標準 (ユニコード正規化アルゴリズムなど) の実装は要求されない。
→ つまり、全角空白と半角空白を同一視とか、全角英数字と半角英数字を同一視とか、しなくていい
typo ? [] Fixed
Except for this recommendation the implementions can continue treating the BMS file as a mostly-ASCII-only format;
・・・ implementations ?more sophiscated Unicode standards
・・・ sophisticated ?The reader MUST parse a BMS file starting with the byte sequence FE BB BF
in the UTF-8 mode.
・・・ EF BB BF
譜面作成者への要求事項 :
#TITLE
などの文字列値コマンド) を除き、非 ASCII 文字を使うべきでない。 特に、#WAVxx
や #BMPxx
などのパス値コマンドに非 ASCII 文字を使うべきでない。感想 :
冗長なエンコードの例 (#TITLE (^^)
の “(
” のバイトコードを 28
から E0 80 A8
に変更)
Name | Result | Note |
---|---|---|
ruv-it! | ^^) | Maybe it is coped with ? |
iBMSC | ��^^) | byte sequence: EF BF BD EF BF BD |
IIDXv / HDX | (^^) | Not be secure |
technicalgroove |
|
[Fixed in ] |
Sonorous | 烙ィ^^) | cmd.exe mojibaked, [this is bug of Rust standard library] |
Firefox / Chrome | ���^^) | Behavior which should be made a model |
#WAV
や #BMP
の ASCII 縛りはどのみち守られるはずがないけど、must not
でなくshould not
になっているんだろうし、CPxxx
の自動判別とか)UTF-8
関連の提案を消化したぞ・・・! 続きは後日!Windowsでも、-X
(exclusive mode)で音声が再生されるようになりました!
-X
には適用されなくなっているかも?Invalid BMSを警告してくれます(#GENLE
, #RONDAM
, #IFn
, etc...)
'FULLWIDTH NUMBER SIGN' (U+FF03)は、譜面が UTF-8
でない場合は警告されません
(たとえば Time is money [24HOURS] の #endif
は Shift_JIS
なので警告されない)
#
'FULLWIDTH NUMBER SIGN' (U+FF03) is not ♯
'MUSIC SHARP SIGN' (U+266F)Sonorousのファイル参照の仕様らしき挙動について :
\yamajet_is_sugoi\
ディレクトリに v_foon.rar
が存在する場合、#WAV09 v_foon.wav
” は v_foon.wav
よりも先に v_foon.rar
をマッチさせてしまうLoading: v_foon.wav*** Warning: failed to load sound #WAV09 (v_foon.wav)
Angolmois-Cはv_foon.wav
にマッチし、Angolmois-Rustはv_foon.rar
にマッチする
Sonorousによる、BMSの拡張についての提案というか呼びかけ
UTF-8
使おうぜ! #TITLE ʅ(◔౪◔ )ʃ
とかできるよ!UTF-8
を支援しない場合、互換性が保証される文字は半角英数字のみに限られてしまう。 たとえば日本語 Windows 上で、Imagination は一部の音だけが再生される (ruvit と technicalgroove (仮) を除く)UTF-8
を支援しない場合、各エンコードを個別に対応する方法しかない。 しかしエンコードは多数あるのできりがない。 ruvit と technicalgroove (仮) も、CP932
と CP949
を自動判別できるのみ。UTF-8
をサポートし、BMS 譜面製作者は譜面を UTF-8
でエンコードする。 たったそれだけで、世界のあらゆる文字を BMS が使用できるようになるlifthrasiirです。
- 未知院環境について処理できなかったの(;_;)、DirectX 9.0およびPixel Shader 2.0以上を支援するビデオカード、およびドライバが必要です。FirefoxやChromeでWebGLが動く環境なら、同じライブラリ(ANGLE)を使うSonorousも動かすと思ってもいいです。Windows XPでは、テストしなかったが、別に動かない理由はなさそうにしています。
- MSYSならもしquote(
'
)の代わりにbackquote(`
)をかけた方がないですか。お互いに他の文字です。そしてSonorousはWindowsでは因子がなければ(例:sonorous -3vw
)ダイアログボックスを示してくれるのであえてすべてのパスを入力する必要はありません。実はMinGWがいなくても動かします;
'GRAVE ACCENT' (U+0060)ではなく'APOSTROPHE' (U+0027)を用いたら、うまくいきました!
当時の私は何かを勘違いしていたに違いありません。ご迷惑をおかけしました;
Name | "path" |
'path' |
`path` |
path |
---|---|---|---|---|
Command Prompt | Yes | No | No | Yes (if spaces are not included) |
MinGW Shell (MSYS) | Yes | Yes | No | Yes (if spaces are not included) |
Windows PowerShell | Yes | Yes | Yes | Yes (if spaces are not included) |
そして、snapshotを試すだけならMinGWは不要ということですね!
Feedbacks and suggestions are welcomed; see https://mearie.org/about/contact for contact.
-
-X
モードで音がしないことは知られた問題です。もっと正確にはWindowsで画面がないときSDL_mixer
が音を出さなくます。これもそうだし音のlatency問題もあってSDL_mixer
を他の物に変えてみようと考えております。(でもFMOD
はなりません・・・ライセンスの問題があります。)
-X
モードで音が出るようになりました!FMOD Non-Commercial License
は問題を持ちますか? 私はそれについてまったく知りませんでした;- bmsexts文書は一旦は個人的な妄想です。orz
lifthrasiirです。Sonorousは...ご存知のようにあちこちかなり変えました; 実はTwelve twisterがどうやってできた譜面かはSonorous変更後に確認したが、すごいですね。新しいアルゴリズムは誤差がひたすらBPM変更回数に比例するので、多分大きな問題はないはずなのに、もしひどく誤差が発生したりする事例があれば知らせてくださればありがたいです。あ、負の
STOP
はまだどのようにするか決定できなかったから例外です。それで、いったん昨日まで作業したsnapshotをダウンロード可能にしました。かなり大きいが(圧縮解除後18MB...)、多分大きな問題なしで実行されます。これから重要な修正があるたびにsnapshotを作成します。
-Z
オプションも確認してください~https://cosmic.mearie.org/f/sonorous/
追伸: Guide to understand BMS formatのURLが変わりました。 https://cosmic.mearie.org/2005/03/bmsguide/
ついにSonorousが姿を現しました! しかし私の環境では動作しませんでした orz
foon_5n.bms
to sonorous.exe
.sonorous.exe
said: Failed to initialize screen: EGL error 0x3001
sonorous -X `/d/sugoi/foon_5n.bms`
/d/sugoi/foon_5n.bms: line 2: *----------------------: command not found
/d/sugoi/foon_5n.bms: line 157: *----------------------: command not found
And the dialog (“Choose a file to play”) was displayed ... What was `<path>`
... ?
[postscript] This was what foolish I misunderstand about quotation marks.
A play is started. But my computer did not reproduce sounds ...
Title: (^^) [5keys Normal]
Genre: Foon
Artist: Yamajet
Level 1 | BPM 140.00 | 9 notes [5KEY]
--------------------------------------------------------------------------------
--------------
00:00.7 / 00:10.2 (@ 0.4387) | BPM 140.00 | 0 / 9 notes
[0.1.0-pre ()] exclusive mode no longer requires SDL audio subsystem
-X
や -Z dump-xxx
などの例外を除き、ほとんどの場合 “EGL error 0x3001
” が発生しました。しかしながら、timekeeping routinesは完璧に正確に働いているように見えます!
BMS file | end of “-Z dump-timeline ” |
---|---|
12twister.bme | 75.000 62.000 141.250 141.250 End |
12twister_a.bme | 75.000 3506.000 141.942 141.942 End |
演奏するべきノートのタイミングもまったく問題ないように見えます!
SDL_mixer
の影響次第で結果が変わるかもしれませんが、すくなくとも現段階の Sonorous は、uBMplay / LR2 / BMX2WAV / technicalgroove に匹敵する再生精度を手に入れています!timekeeping routine is now lag-resistant.
// hurray!It is guaranteed by this that following BMS are reproduced correctly :
BPM 900000000
)BPM 96 ⇄ 2013xxxx
)#SUBTITLE
, #SUBARTIST
, #MAKER
, #COMMENT
, #BANNER
, #DIFFICULTY
, #DEFEXRANK
, #EXRANK
, #TOTAL
, #WAVCMD
, #EXWAV
, #VOLWAV
, #MIDIFILE
, #EXBMP
, #BACKBMP
, #@BGA
, #POORBGA
, #SWBGA
, #ARGB
, #CHARFILE
, #VIDEOFILE
, #MOVIE
, #TEXT
|#SONG
, #OPTION
, #CHANGEOPTION
, #SWITCH
, #SETSWITCH
, #ENDSW
, #CASE
, #SKIP
, #DEF
#SNRS:LANES <key> <spec> ...
, #SNRS:CANVASSIZE width height
#EXBPM
, #GENLE
, #command
, #RANDOMn
, #RONDAM
, #IFEND
, #IFn
, #END
#BASEBPM
, #OCT/FP
, #CDDA
, #VIDEOF/S
, #VIDEOCOLORS
, #VIDEODRY
, #SEEK
, #EXTCHR
, #MATERIALSWAV
, #MATERIALSBMP
, #DIVIDEPROP
, #CHARSET
#BGA
は値がコンマ区切りなので、他の #BGA
対応機種と互換しない#BGA
非対応機種への影響を避けることができる?#BGA
のカンマ区切りを許容する BMS 系列アプリケーションは、BGAEncAdvance のみ一方で DTXMania は、#BGA
の値の区切り文字として、以下の全てを混在させることができる :
Codepoint | Unicode name |
---|---|
U+0009 | CHARACTER TABULATION |
U+0020 | SPACE |
U+0028 | LEFT PARENTHESIS |
U+0029 | RIGHT PARENTHESIS |
U+002C | COMMA |
U+002D | HYPHEN-MINUS |
U+005B | LEFT SQUARE BRACKET |
U+005D | RIGHT SQUARE BRACKET |
U+0078 | LATIN SMALL LETTER X |
U+007C | VERTICAL LINE |
Valid example: “#BGA02 01 | (0, 0) - (192, 192) | [64x64]
”
目立つバグがあらかた退治されました!
"#BGA00
"で確実にミスレイヤーが表示されるバグ
が修正されたことを確認しました!-l
で最後のミス画像も収まるのを確認しました!#STOP
が出力ファイルサイズを無限に増大させていたバグが修正されました!同梱のサンプル譜面が神でした! ソフトの性能もわかるし、何をどう真似すればいいかもわかるので。
foon.mp4
を自前で用意するのが面倒な方は、当方のエンコードサンプル をどうぞ。BGAEncAdv "path" -l 1 -w 448 -h 448 -t 64 -f 60
” で 例 と同じ結果になります。疑問 (1) : Our moments の変換結果にブロックノイズが混入するようになった?
350x406
でびよーんする非互換性が据え置き (誰も困らないけど)loadtestW.exe
) は#endif
が全角マッチ無しでも大丈夫になりました!#TOTAL
が変なことになるバグが修正されました!“#TITLE (^^) [5keys Normal]
” などで、サブタイトル文字列が切り出されないようです
#DIFFICULTY 2
が自動付与されているから、解析はされているようですUTF-16BE
が相変わらず空っぽになります; [] Fixed#SWITCH
が機能しません (以前からですが)
code 1 | code 2 | code 3 |
---|---|---|
|
|
|
#CASE n
の後方に #DEF
があると、謎の警告 Invalid Value
を食らう#CASE 2
” is not adopted by any means#CASE 2
だけは絶対に選ばれない[tentative name] technicalgrooveはfmod exに波形データの再生を任せているため、サポートしている波形データの種類はLR2と同じだと思っていただければ問題ないと思います。
otoge3\project\fmod\
に全部載っているんですね! 俺はアホでした!24bit integer PCM
ってバッチリ書いてあるなあ・・・Beyond the Horizon は当環境の LR2 では問題なく鳴るので、音声が無限ループする原因は他にある
追記 : 個々の WAV ファイル自体にループタグが埋め込まれていたのが原因でした
別件ですがバグ報告です! いつもの (^^) に “
#STOP01 -192
#00109:01
” を追加します
loadtest
系列 ・・・ BGAEncAdv
・・・ さらに別のバグ! いつもの (^^) に “
#BMPF1 title.bmp
#BGA00 F1 192 0 448 256 0 0
” を追加します
BGAEncAdv
・・・ -l
オプション無しでも #BGA00
が最前面に別件の非互換性! Our moments のビデオがループ再生されない [fined in Ver0.02]
#08206
みたいな状況は -l
オプションでも拾えないんですよね・・・#TEXTzz
で動画にテロップを挿入できると便利かな? と一瞬思ったけど、動画サイトのように書体や色や位置に凝りたいなら最初から LAYER2 を使うよね、と自己完結したので何でもなかった#BGA
allowed to align by trailing spaces ?// example
#BMP01 2000x2000.bmp
#BGA02 01 0 0 256 256 0 0
#BGA03 01 64 64 320 320 0 0
#BGA04 01 1744 1744 2000 2000 0 0
#STOP
が正確に反映されていることを確認しました! (今頃になってようやく)UTF16への対応が出来ていなかったので修正。
・・・
UTF-16LE (with BOM)
は正常に解釈されていることを確認しました!UTF-16BE (with BOM)
は譜面が空っぽに解釈されてしまうUTF-8
として解釈されて Null 文字で落ちる (仕方ない感ある)#TITLE
や演奏オブジェクトや有効な音声定義が無くても落ちなくなったことを確認しました!#TITLE (^^)(^^)
” で落ちなくなったことを確認しました!loadtest.exe
のほうで、「スペースを含むファイル名への参照」 が全部空振る
loadtestW.exe
で Beyond the Horizon を再生すると、BGM が無限ループする
(もしかすると、これも当方のコンピュータのメモリとかが足りなすぎるだけかも)
(あと “#TOTAL 303.215078630897
” が、なぜか “TOTAL: -0.29
” に)
[fixed in version ]
IEEE Float 16bit
は Unsupported file or audio format.
と警告されるPCM 24bit
や Run n' Chase の IEEE Float 32bit
は特に何も言われないμ-law
はおそらく “Supported” ?8|16|24|32|48 kHz
系列も “Supported” ?ファイル名の大文字小文字を区別する環境でも、大文字小文字を問わず読み込む機能を追加。
・・・
loadtest.exe
で Time is money [24HOURS] を再生すると、普通に再生できるように見えるけど、cmd.exe で Arrow Up で入力補完して連続再生すると、“TOTALNOTE: 0
” が高頻度で出現
loadtestW.exe
ならそんなことにはならないけど、あんまり使ってほしくなさそうなのが難点[fixed in version ]
loadtestW.exe
の 全角半角を問わずマッチ
について ・・・
foon_whitespaces.bms.txtの場合、U+200B
と U+FEFF
を除き、すべてスペースと同一視する
U+200B
ZERO WIDTH SPACE: スペースと称しつつ実質的には形式制御文字なので、納得の除外U+FEFF
ZERO WIDTH NO-BREAK SPACE: 同上、かつ 「BOM 以外に使うの禁止」、納得の除外U+180E
MONGOLIAN VOWEL SEPARATOR: Bidi 特性は [WS] なので、納得の追加U+202F
NARROW NO-BREAK SPACE: SpaceSeparator カテゴリなので、納得の追加U+205F
MEDIUM MATHEMATICAL SPACE: SpaceSeparator カテゴリなので、納得の追加BMS delimiters memoでいえば、「デリミタ無し」「コロンを空白で代替」を除き、すべて受け付ける
#BPM1
のようなデリミタ無しのケースは、破綻しそうなのが俺にすら予想できるので、納得の除外#00111:11
が ␣
や ?
等でも通る nazo は文字数依存なので全角半角とは無関係、納得の除外otoge3\project\util\code.d
が全角半角関係の処理っぽい (俺用メモ)[Removed [] 復活loadtestW.exe
in version ]
foon.mpg
を作る#xxx04
と #xxx06
を全部消すコピー譜面に以下の BMS コードを追加する
#BMPF1 foon.mpg
#BGAF2 F1 0 0 256 256 0 0
#BGAF3 F1 0 0 256 256 255 0
#BGAF4 F1 0 0 256 256 0 255
#BGAF5 F1 0 0 256 256 255 255
#00004:F2
#00006:F3
#00007:F4
#0000A:F5
BGAEncAdv "D:\bms\yamajet_is_sugoi\quadrophenia.bms" -l 1 -w 512 -h 512
+----+----+ |(^^)|(^^)| +----+----+ |(^^)|(^^)| +----+----+
・・・いや、もしかして、動画形式に対する #BGA
指定がまったく効いてない ような・・・
#BMPF1 foon.mpg
#BGAF2 F1 64 64 128 128 0 0
#00004:F2
追記 : Ver0.02 にて、動画への #BGA
指定も有効になった
これは単に切り抜くだけの指定だけど、一瞬で変換が完了して真っ黒の動画が出てくる (明らかに変) [fixed]
2^13
ごときに負けるとは#BGA
実装の面汚しよ・・・」#BGA
こわいわあ・・・ tnj さん神回避すぎ・・・ん? 単に俺の環境がウンコだからこんなことになるのか? 普通に考えたらそれが最もありうるなー
追記 : そのとおりでした
ともかく #BGA
については、現在の当方の環境で調査できる範囲は調べ尽くした感があります
#BGA
の解釈が全体的に意味不明なので、調べる気になれない & 調べられる気がしないというわけで、あとで表にまとめて cmds.htm あたりに載せておきますー
> もしその BMS which useBOF 2012のDJ_SATORI - Rememberanceです。 しかし、#BGA
の#TITLE
と#ARTIST
を示すことについて問題が無いなら、お尋ねしても構いませんか? 私は#BGA
の作例をあまり知らないので、常に注意深くそれらを探しています。#BGA
が実際には使われていないため、多分テストしてミスで消していないものを見せます。
> 分解能の制限が緩和されれば、Twelve twisterのAnother chartなどもprecomputationの恩恵を受けられるはずです!同じ種類の譜面ですね。orz 実は分解能の問題はなく、(AngolmoisとSonorous二人とも分解能が事実上無限大です) 言えば:
#BPM 240 #BPM01 14400000 #BPM02 240 #00108:01 #00208:02
このようなBMSがあれば、
#000
と#002
は1秒間持続されて#001
は1/60000秒間持続する必要があります。しかし、現在は#001
でBPMが変われば、次のフレーム(たとえば、1/60秒後に)で1000個のmeasureが過ぎ去ったことで認識してしまい、譜面があっという間に終わります。AngolmoisのCバージョンがcrashが発生する理由は2000個を超えるmeasureが画面に表示されと、無効なメモリを参照するためです。(Rustバージョンではこのような問題はありません。)事実1000個のmeasureが通る途中BPMが変わるということを認識するのは難しくないが、代わりに逆変換過程で誤差が生じる可能性が高くて根本的な問題を解決しようとしているのです。BPMだけこういうのではなく、STOPにも同様の問題があります。
The system is designed to be memory safe, and it does not permit null pointers or dangling pointers.
(Rust) ... Oh ...#STOP decimal-fraction-value
” を許容する実装が現れています。難しいのは、これらスクロール制御オブジェクトはまさに根本的な問題に関わる要素なので、アプリケーションに対して
大規模な構造変更をしばしば要求するということです・・・ orz
lifthrasiirです。最近
#BGA
を使うBMSファイルをほとんど見てないのでテストをちゃんとできなかったんです。(HDD上にあるものではちょうどひとつ...) 今回もくだらないtypoでした。orz 教えてくれてありがとうございます!
#BGA
の #TITLE
と #ARTIST
を示すことについて問題が無いなら、お尋ねしても構いませんか? 私は #BGA
の作例をあまり知らないので、常に注意深くそれらを探しています。Sonorousは大規模な構造変更を進行中です。前にETUDE FOR ULTRAEXTREME 5が変に動くという話がいました。基本的には計算可能なことを(特にノートが落ちる時点)最大限先に計算する方向で修正しているので、思うとおりに変更が進められたら、これもまともに移動するようです。それ以外に他のことはまだナイショ ;)
他のことも楽しみです!
動画フォーマットをサポート! ・・・ただし、
out.avi
を foon.avi
にリネームし、#BMP01
に定義。さらに #00004:01
を指定encoding frame *****
まで到達せず、なんかずっと固まる追記 : Ver0.02 にて、このバグは修正された
動画に対して #ARGB
や #BGA
を適用できる、前代未聞の特徴をサポート!
#ARGB
の適用値が変なバグは修正済みいつのまにかnewbgatest.bmsが (一見) 変換できるようになってる! ・・・ただし、
444x406
になるdx dy
が 2 倍くらい 「びよーん」ってなってる#BGA02 01 0 0 1 1 128 128
” とかで落ちなくなった#BMP00
, #BGA00
, #xxx06
の POOR 画像も動画化できる!
-l 0
” で Always Miss (@uBMplay)-l 1
” で Always Miss / #POORBGA 1
(@nanasi)-l 2
” または -l
オプション無しで、通常の映像“-l 1
” は、100% The Matchmakersの100%_n.bms
とかで使うのがいいと思います
(encode: UHC
ふいた)
異様に腰が痛くて熱まで出てきた・・・
「OGG や MP3 などを読み込む際、変換済みの WAV をキャッシュしておく設定」 が削除されました!
Windows Vista SP1 以降なら、WASAPI による望ましい音声環境を使用可能になりました!
#BGA
does not work on Angolmois rust edition#BGA
から参照可能な画像のサイズの上限調査中、というか、これ以上どうやって調べればいいのかわかんねっす・・・
body | max-X | max-Y |
---|---|---|
MixWaver | 638 | 478 |
nanasi | 2047 | 2047 |
ruvit | 2047 | 2047 |
uBMplay | 4031 | 8190 |
BM98de | 4095 | 8190 |
DDR | 4095 | 8190 |
RDM | 8127 | 8190 |
Angolmois | 16383 | [y1] 32767 |
BMSE | 32767 | 32767 |
BMEV | 70000+ | 65535 |
BGAEncAdv | 70000+ | 70000+ |
FELYS (onoken / (Challenger) skng) を nanasi は正しく表示できない
2304x256
で、各 1 コマだけ表示が化ける3236x516
の skng_eee.bmp は影響が甚大#BGA00
equivalent to #BMP00
?#xxx04|07
have one or more objects ) : bemaniaDX#xxx04|07|0A
have one or more objects ) : nanasi, BGAEncAdv#BGA00
)Is referring to “#BMP01
” by “#BGAzz 1 ...
” possible ?
255x255
brings unusual view (?) )#BGAzz [#BMP-index(decimal)]
”ed_place_*_*.bms
” by a text editor.#BMP0A ed_title2.bmp
” to “#BMP10 ed_title2.bmp
”.#00104:Z5
” to “#00104:10
”.#BMP
& #BGA
”#BMP01 1.bmp
#BMP02 2.bmp
#BGA01 02 0 0 255 255 0 0
#BGA02 01 0 0 255 255 0 0
#00104:0102
Is #BGA
always displayed more preferentially than #BMP
?
In order to correct this problem,
ed_place_*_*.bms
” by a text editor.Replace from “
#BGA01 01 0 105 255 360 0 0
#BGA02 01 0 104 255 359 0 0
#BGA03 01 0 103 255 358 0 0
#BGA04 01 0 102 255 357 0 0
#BGA05 01 0 101 255 356 0 0
#BGA06 01 0 100 255 355 0 0
#BGA07 01 0 99 255 354 0 0
#BGA08 01 0 98 255 353 0 0
#BGA09 01 0 97 255 352 0 0
#BGA0A 01 0 96 255 351 0 0
” to “
#BGAZ6 01 0 105 255 360 0 0
#BGAZ7 01 0 104 255 359 0 0
#BGAZ8 01 0 103 255 358 0 0
#BGAZ9 01 0 102 255 357 0 0
#BGAZA 01 0 101 255 356 0 0
#BGAZB 01 0 100 255 355 0 0
#BGAZC 01 0 99 255 354 0 0
#BGAZD 01 0 98 255 353 0 0
#BGAZE 01 0 97 255 352 0 0
#BGAZF 01 0 96 255 351 0 0
”.
#01704:01
” to “#01704:Z6
”.#02104: 02030405060708090A 0B0C0D0E0F0G0H0I0J 0K0L0M0N0O0P
” to “#02104: Z7Z8Z9ZAZBZCZDZEZF 0B0C0D0E0F0G0H0I0J 0K0L0M0N0O0P
”.#BGA
で互換性を確保するのは大変すぎ#BGA
対応機種間で完全に互換性を確保するなら、以下の全項目をクリアしなければならない :
#BMP
は、番号 01
, 02
, 03
の計三枚のみ#BMP
の画像サイズ上限は、幅 639
pixel, 高さ 479
pixel まで#BMP
がインデックスとして使っている番号を、#BGA
がインデックスとして使うのは禁止#BGA
がインデックスとして使っている番号を、#BMP
がインデックスとして使うのは禁止#BGA00
の使用は禁止#BMP
を英数字一文字で参照するのは禁止#xxx07
に #BGA
を割り当てるのも禁止#BGA
の値を 「連続する空白」 で区切るのも禁止#BGA
をあえてサポートしなかったようで、この見切りは凄い個人的には負数座標が
0
にセットされる方がなんだか納得いきませんね……プレイ可能な譜面にこの伝統が活用されていなければいいのですが。
んんん!? 昨日セーフだった “#WAV01 a.wav
” や “#00111:01
” が内部エラーに;
2.1.5a にて修正済み
#WAV01 a.wav
” や “#00111:01
” のような、意味が分からない BMS コードに対応!“#WAV01 a.wav
” のような全角空白区切り 「だけ」 の場合は、エラーコード 7 で強制終了します!;
2.1.5a にて修正済み
#BGA
#BMP
の番号は、00
から 03
まで#xxx07
に配置した #BGA**
は表示されない(0, 0)
- (638, 478)
#BGA
の定義番号が #BMP
参照先と重複する場合の解釈は、BM98de と同じ#BGA02 01 0 0 1 1 128 128
”pthreadgc2.dll
を自分で用意する必要が無くなりました!"
・・・#BGA
"で画像の範囲外となる部分を描画しようとすると落ちるバグを修正。
#BGA
対応機種と互換性がない感じパレットpngの透過色の定義がずれて認識されるバグを修正。
・・・
最下層まで透過していました・・・ なにそれこわい
幅256以外で書き出そうとすると"
・・・#BGA
"での描画位置がずれるバグを修正。
-t
が内部的に #BGA
で実装されてる?コマンドラインオプションに"
・・・-t [num]
"で描画開始位置を下にずらす機能を追加。
BGAEncAdv "D:\bms\44_top_fos_s\_FOSBGA.bms" -t 72
” とかですね!#BGA
に置き換えましょう〜先の節 (One pixel problem) を更新版でテストしたところ、強制終了しました (こんな感じです):
#WAV01 v_foon.wav
#BMP01 2x2in256x256.bmp
#BGA02 01 0 0 1 1 128 128
#00004:02
#00216:01
たぶん、サイズ自動取得が原因かなーと・・・
[fixed in Ver0.01]
スペースの次がスペースである場合を、空要素と認識しないよう変更。
・・・
複数個のスペースによる整列と
コンマ区切りが使える!
というわけで、今後はインデントハックは不要になり、素直に次のように書くだけで済みます :
#argb01 128, 28, 5, 255
#argb02 255, 40, 175, 48
#argb03 64, 40, 175, 48
#argb04 128, 234, 210, 173
#argb05 128, 248, 6, 6
#argb06 255, 248, 6, 6
#argb07 255, 255, 255, 255
#001a1:01020304
#002a1:0102030400050000
#003a1:0607
#ARGB
を適用できます、超ありがたいです!#BGA
使用作品#BGA
? ()#BGAzz [#BMP-index(decimal)]
なので、BM98de / DDR でのみ意図通り表示される#ScrColor [0-3]
)手元で以下の修正を適用すれば、BMSE と bemaniaDX 以外の #BGA
対応機種では一応表示される :
#BMP0b skng_eee.bmp
を #BMP00 skng_eee.bmp
に変更する␣11␣
” を “␣00␣
” に一括置換する (␣
は半角空白)で気付いたんだけど、(故意にせよそうでないにせよ、結果的に) 画像のサイズより大きなトリム座標が指定された場合、BGAEncAdv は不正っぽいビデオを出力する
version にて修正
#BGA
、もしかするとトリムできる座標の範囲がめちゃくちゃ小さい・・・?pthreadgc2.dll
がありません、と怒られたので、POSIX Threads (pthreads) for Win32のftp://sourceware.org/pub/pthreads-win32/dll-latestからDLLを拾って、BGAEncAdv.exe
の同位に置く
version にて、pthreadgc2.dll
が同梱されるようになった
loves honey, crazy apple.を試す。 コマンドプロンプトから以下のようにサイズを指定 :
"D:\bms\BGAEncAdv\BGAEncAdv.exe" "D:\bms\lhca_wav_LQ\lhca.bms" -w 640 -h 480
手動でサイズを指定すれば、256x256 の規格に沿わない作品にも完璧に対応できる
version にて、通常は動画サイズの指定が不要になった
libpng 1.6.2なら、readme.txtの(c) 2004, 2006-2012
は2013でいいかも
version にて修正済み
#BGA
対応! LR2 が表示できないMystical Dejavuなども、ビデオに変換しやすくなった
#ARGB
は異様に手軽に映像を加工できます! ウプヌシ系の方には神命令かもしれない
(^^) の譜面に、以下の BMS コードを追加しただけの例 :
// for nanasigroove
#argb01 128,28,5,255
#argb02 255,40,175,48
#argb03 64,40,175,48
#argb04 128,234,210,173
#argb05 128,248,6,6
#argb06 255,248,6,6
#argb07 255,255,255,255
// for BGAEncAdv
#argb01 128 28 5 255
#argb02 255 40 175 48
#argb03 64 40 175 48
#argb04 128 234 210 173
#argb05 128 248 6 6
#argb06 255 248 6 6
#argb07 255 255 255 255
// both
#001a1:01020304
#002a1:0102030400050000
#003a1:0607
困ったことに、コンマ区切りの nanasi 書式は、BGAEncAdv でエラーになる
version にて修正済み
値のレイアウトが可能なら、スペース区切りも便利なんだけど、実際は以下の指定もエラーになる
#argb01 128 28 5 255
#argb02 255 40 175 48
#argb03 64 40 175 48
version にて修正済み
(スペースとコンマの一方があれば、他方は省略可能)
#xxx0A
(BGA LAYER2)は、nanasi & Angolmoisもサポートしている、これまた便利な代物
Abbr Name | U+0009 | U+3000 | None | Wide Header | U+0020 | U+FF1A | Wide Index |
---|---|---|---|---|---|---|---|
[sample] | #BPM⇥1 |
#BPM 1 |
#BPM1 |
#BPM 1 |
#00111␣11 |
#00111:11 |
|
LR2 | Yes | No | No | No | Yes | Garbled | Garbled |
nanasi | Yes | No | No | No | No | No | No |
ruvit | No | No | No | No | Yes | Garbled | No |
HDX / IIDXv | Yes | Yes | No | No | No | No | No |
Angolmois | Yes | No | No | No | No | No | No |
fgt# | No | No | No | No | Yes | Garbled | Garbled |
pomu2 | Yes | No | No | No | Yes | Garbled | Garbled |
nazo | Yes | Yes | No | No | Yes | Yes | Garbled |
GDAC2 | No | No | No | No | Garbled | Garbled | No |
BMSE | No | No | No | No | No | No | ... Y... ??? |
iBMSC | Yes | Yes | No | No | No | No | No (all err) |
uBMplay | No | No | No | No | Yes | No | ... Y... ??? |
PMSee-V | Y (2.1.5a+) | Y (2.1.5a+) | No | Y (2.1.5a+) | No | Y (2.1.5a+) | Y (2.1.5a+) |
o2play | No | No | No | No | No | Yes | No |
bmx2wav | Yes | No | No | No | No | No | No |
BM98 / de | Yes | No | No | No | Yes | Garbled | No |
DDR | Yes | No | No | No | Yes | No | No |
RDM | No | No | No | No | Yes | No | Garbled |
MixWaver | No | No | No | No | Yes | Garbled | No |
bemaniaDX | No | Yes | Yes [1] | No | Yes | Yes | No |
otama | No | No | No | No | Yes | Garbled | No |
GALLI | No | No | No | No | No | No | Garbled |
BMSC | Yes | No | No | No | Yes | Garbled | No (skip) |
BMSV | No | No | Yes [2] | No | Yes | Garbled | No |
nBMplay | Yes | Yes | No | No | Yes | Yes | Garbled |
BMEV | No | No | No | No | No | No | Garbled |
WAview | Yes | No | No | No | No | No | No |
KbMedia | Yes | No | Yes [3] | No | No | No | No |
BmsToAvi | Yes | No | No | No | Yes | No | No |
BGAEncoder | No | No | No | No | Garbled | Yes | No |
BGAEncAdv | Yes | No | No | No | No | No | No |
#BPM
, #PLAYER
, and #PLAYLEVEL
cannot omit a delimiter.#GENRE
, #TITLE
, and #ARTIST
cannot omit a delimiter. (However, commands are omissible)#BPM
cannot omit a delimiter.White space にならなかった文字も一応メモ :
Codepoint | Unicode name | Memo |
---|---|---|
U+180E | MONGOLIAN VOWEL SEPARATOR | White_Space |
U+202F | NARROW NO-BREAK SPACE | SpaceSeparator |
U+205F | MEDIUM MATHEMATICAL SPACE | SpaceSeparator |
U+034F | COMBINING GRAPHEME JOINER | |
U+0F0C | TIBETAN MARK DELIMITER TSHEG BSTAR | |
U+200C | ZERO WIDTH NON-JOINER | ‌ |
U+200D | ZERO WIDTH JOINER | ‍ |
U+2060 | WORD JOINER | no-break |
U+2063 | INVISIBLE SEPARATOR |
Shift_JIS
も可)通常は、ファイル名の大文字小文字は、保持されるが、区別されない
FOO.WAV
と foo.wav
が同一ディレクトリに存在することは、通常はありえないBAR.WAV
と bar.wav
は別々のファイルなので、同一ディレクトリに併存しうるたいていの Web サーバも Unix 系列なので、たとえば以下の例は別々のファイルを参照する :
ファイル名の大文字小文字を区別しない (case insensitive)
#WAVxx abc.wav
” は、ファイル “ABC.WAV
” を参照できるところで Mac OS X は、ファイル名を Unicode Normalization Format D によって正規化するらしい
U+304B U+3099
” (「か」+「゛」) に分解されるU+304C
” として扱う Windows / Linux とは明らかに異なるプラットフォームが何であれ、明示的に大文字小文字を無視してファイルを照合する :
Angolmois performs a case-insensitive matching on file names for example and it was platform-dependent in the C version, but in the Rust version it is platform-independent.
次のようなケースでは、Angolmois は意図しないファイルを読み込むかもしれない? :
WAV.WAV
” and “wav.wav
” exist in a BMS directoryThe BMS code with ambiguous reference:
#WAV01 wav.WAV
#WAV02 WAV.wav
#00101:01020102
この例はコメントとして寄せていただきました! 俺は確認しようがないけど、ありがとうございました!
loadtest.exe
() が強制終了するパターン :
BMS code 1 | BMS code 2 | BMS code 3 |
---|---|---|
|
|
|
Unicode 対応BMSアプリケーションは互換等価性を考慮すべきか?
#endif
と #endif
を同一視したりできるらしいU+0020
と U+00A0
と U+3000
を同一視できるべきかどうかu+00a0.bms.txt
/ U+00A0.BMS.TXT
を解析できるべきかどうかfixed misleading comments; cleanups; fixed a bug in bms_duration.
super lazy
な手順でangolmois.rs
を上書きして再度コンパイルする場合 :
angolmois\rust-sdl\libsdl.dummy
は事前に消しておくangolmois\rust-sdl\Makefile
も事前に消しておくAngolmois Rust Editionについての評判など :
ご本人の返信が興味深い、「RustからWin32 APIを正確に呼ぶのは信じられないほどに難しい」
Angolmois-Cとの比較 :
#endif
But 'FULLWIDTH NUMBER SIGN' (U+FF03) #endif
もちろん通常は“'#IF 7
' has no '#endif
'”で終わる話・・・・・・ですよね?
BMS
”, “bms
”, “BMS
”, “bms
” を同一視とか、しないですよね?ABC.WAV
とabc.wav
を同一視するはずだけど、ABC.WAV
とABC.WAV
はさすがに別物とみなすわけだし、それとこれとは別の話ですよね?まあ、rust-sdlはRustと関係なく、バージョンが変わる問題があります。一応0.7に合わせてコードを修正しました。https://github.com/lifthrasiir/angolmois-rust/#how-to-compileにもっと詳細なコンパイル方法を書いておいたので参考にしてください。(中間にzipファイルへのリンクが含まれています。そのバージョンを使えばいいです。)
私が最初にmake
したとき、以下のエラーが発生しました:
rustc.exe
failed to start because libpthread-2.dll
was not found.
MinGW\bin\pthreadGC2.dll
を、MinGW\bin\libpthread-2.dll
にRenameし、make
を成功させました。このような強引な方法は問題を発生させるかもしれませんが、私は正規の手順について知ることができませんでした;私は以下のdll群をangolmois.exe
の同位にコピーして、正常に動作することを確認しました:
role | file | path |
---|---|---|
Required (1) |
|
MinGW\lib\[x86|x64]\ |
Required (2) | sdl-xxxx-0.3.0.dll |
angolmois\rust-sdl\ |
Drag-Drop |
|
MinGW\bin\ |
OGG |
|
MinGW\lib\[x86|x64]\ |
PNG |
|
MinGW\lib\[x86|x64]\ |
others |
|
MinGW\lib\[x86|x64]\ |
(MP3とMODは私の環境では再生できませんでしたが、それはAngolmois-Cでも同様でした)
"それ"というのは、他のものではなく、本家ています; 最近のアーケードの音ゲーは時間がたくさん入って大変ですね。それについてはいろいろ考えをしているが、一応自重。
Dはちょっと長くなったが、(D2がなくてD1時代) そのD programming languageがぴったりです。C++と比較してDに変えたとき時間がより少なくかかるという保障がないので放棄した記憶がします。大勢の運営体制で動かすにはC++もDも多くのことを自ら作成する必要がありました。Rustは少しましな方です。(Servoのおかげでグラフィックはちょっと準備ができています。)
#BMP
に定義して表示することが可能でした)Angolmois Rust edition:
ああっ、Rustは直接コンパイルしなくても
rust-0.6-install.exe
とMinGW
環境さえ設置すれば、動かします。rustc
コンパイルにはメモリがたくさん必要だが、そのまま動くのには大きな無理ないでしょう。(しかし、出た0.7はまだ未対応です...とりあえずは0.6を探して使用してください。)
Rust 0.6 の “Windows installer” は、いちおう MinGW Shell から操作可能なのですが・・・
D:\test\hello.rs
を作成 (中身は平文 fn main() { io::println("hello"); }
)以下のコマンドを入力して、hello.exe
のコンパイルと実行が可能なことを確認
cd /d/test
rustc.exe hello.rs
hello
しかし、ここで “rustc hello.rs
” と指定すると、コンパイルに失敗します;
rustc vs rustc.exe in PATH (Windows/MinGW) に近い症状かな? ちょっとよくわかりません・
Rust-SDL は Makefile.in
を RUSTC ?= rustc.exe
に修正してみましたが、
make
rustc.exe --cfg image --cfg mixer src/sdl.rc -o libsdl.dummy
src\cd.rs:132:8: 132:10 error: found `drop` in ident position
src\cd.rs:132 pub fn drop(&self) {
^~
src\joy.rs:117:8: 117:10 error: found `drop` in ident position
src\joy.rs:117 pub fn drop(&self) {
^~
src\mouse.rs:69:8: 69:10 error: found `drop` in ident position
src\mouse.rs:69 pub fn drop(&self) {
^~
src\video.rs:144:8: 144:10 error: found `drop` in ident position
src\video.rs:144 pub fn drop(&self) {
^~
src\mixer.rs:76:4: 76:6 error: found `drop` in ident position
src\mixer.rs:76 fn drop(&self) {
^~
error: aborting due to 5 previous errors
make: *** [libsdl.dummy] Error 101
/(^o^)\ oh ... \(^o^)/ my quest has ended here
Sonorous:
微妙に作業中なのに可視的な成果はまだいません。一応"それ"が韓国に登場したために時間が;
Angolmois Rust editionよりコンパイルがはるかに面倒臭いからsnapshotをコンパイルして提供しなければならないようです。他のことはコミットメッセージを参考にしてください。
"それ"とは何でしょう?Servoとかでしょうか? ともかく無理はなさらないでくださいね!
TechnicalGroove:
Dと、懐かしい名前ですね。theseitが一時C++の代わりにDを使用しようとしたが、放棄した痛い思い出があるのだけど…オープンソースBMSプレイヤーが増えるのはいいですね。
(******) クソラバ復活まだ?
(*********) いや
(*********) 消えたままで伝説にする
(******) KUSO
(******) じゃあ勝手にうpるか・・・
(*********) おk
(******) いいのかよ!
#RANDOM
差分をゲット再生できる限界ギリギリとかよく調べたなあ
#IF
の入れ子」と「#ENDIF
の省略」の両立#IF
blocks cannot be nested unless other #RANDOM
or #SETRANDOM
blocks wrap them;
#ENDxx
のリグレッションが修正されたことを確認! これでこのソフトウェアも、おそらく、
UTF-16(LE|BE)
の BMS を書いて試したら強制終了してたから、てっきり対応予定は無いものと思ってたけど、ソースコードを見るとそうでもない? (まともに読めてないけど)#GENLE
” にも一応対応
・・・#RANDOM
や #IF
と数値の間に空白がない場合に対応
・・・ 即日修正されててふいた#PATH_WAV
の末尾に\
を補間
BGA 表示の状態を保存しないように変更 (不要だと思ったので)・・・ テストしやすくなりました!
すみません、6月27日の更新に気付いてませんでした!;
#wavXX
とか小文字ヘッダが鳴らなかったのが修正されたのを確認#TITLE (^^)
がサブタイトルに化けなくなったのを確認"・・・ 確認しました!#IFn
"や"#RANDOMn
"等、
"
・・・#ENDIF
"が見つからない場合に、ネストを行わずに
影響を受けるBMSを前の項目からコピペして、変え忘れているような
#IFEND
は 再生可能#ENDIF
省略 は 再生可能#END IF
は #ENDRANDOM
によって 強制終了RAN_NEST 100 (fix) の [fixed]#ENDRANDOM
つきの入れ子は 強制終了
#ENDRANDOM
を全部消せば、#ENDIF
までも全部消すと、00.wav が鳴る。 これは uBMplay 1.5.2 とは異なる)#ENDIF
までも全部消すと、全分岐が同時に鳴る場合もある・・・ けど再現条件は不明)【さがしてます】Mokugyo Allcenturymix(longLONG)
概要は以下のような感じですが、当方も元の BMS を探しているのでした
#BPM 120 // Did Hitkey modify this? Hitkey does not remember that
#00103:04// Did Hitkey modify this? Hitkey does not remember that
#[001-999]02:256
#[001-999]11:("01" * 1024)
#[001-999]16:("02" * 64)
#[001-999]04:("06040204010402040104020401040204" * 64)
>どこかに何かの情報が露出するように変更キャー hitkey さんのえっち!
ところで #PATH_WAV
について、バグではないけどひっかかる非互換性を見つけましたー
BMS code | in_bm2 | BMEV, IIDXv, Angolmois, uBMplay 1.5.2+ |
---|---|---|
|
|
|
WAview は #PATH_WAV E:\foo\
や #WAV01 bar\..\baz.wav
などを求めており
#DIFFICULTY n
の表記ゆれ (ゆれすぎ)hitkey 先生のツッコミ対応アップデート完了@ubm 1.5.1
okayama EVOLVED なんとかしておきましたー
#IF
の入れ子」と「#ENDIF
の省略」の両立!私たちが知る分岐 のうち、uBM 1.5.1 非対応ケースは、残すところ #IFn
と #RANDOMn
だけです!
#IFn
・・・ フォーマット自動判定を調整 (拡張子判定を追加など)
・・・
5KEYS
に誤判定されなくなりました!PMS (BME-type)
や PMS (Double)
なども判定されるけど、#xxx[1-6D-E]7
は鳴らない#OCT/FP
は ubm 1.5.0 の時点から判定されてたんですね!ウィルス誤検知の原因になっているかもしれないので UPX 圧縮をやめてみる
その他修正
・・・
#HARLEMSHAKE
が変更 (無効化?) されたSURROUND
is 五鍵盤筐体ダブルプレイ厨大歓喜