Hatena::Groupbms

BMS関連ツール開発日記 by TEM

2018-04-01

[bmx2wav]メモ 23:34  [bmx2wav]メモ - BMS関連ツール開発日記 by TEM を含むブックマーク はてなブックマーク -  [bmx2wav]メモ - BMS関連ツール開発日記 by TEM

ちまちまとベースになるライブラリから作成しています。とりあえずはパーサまでを一気にやりたいところ。しかし、前バージョンのパーサはランダム周りがクソ汚いというか、ライブラリとして作ったので他に応用できるように構文木を作ったりとかしたのが仇となってとにかく判りづらくていかん。作ってた当時も汚いって思ったからなあ。

  • 分解能は小節毎に違う分解能を持つように決定。多分問題なく行ける筈。
    • 小節単位で揃えないと色々と計算できないと思われるので小節単位に。
  • wav フォーマットは内部で 64bit でいいかなと。
  • 外国語対応もちと勉強したが、考えてみるとどういう状況で必要になるかイマイチ想像できず
    • SJISの駄目文字の件は何故そうなるのか未調査。そのうち調査せねば。

2018-02-03

[bmx2wav]ogg関連 23:50  [bmx2wav]ogg関連 - BMS関連ツール開発日記 by TEM を含むブックマーク はてなブックマーク -  [bmx2wav]ogg関連 - BMS関連ツール開発日記 by TEM

  • ogg の最新のライブラリを今の開発環境で使えるかどうかチェック
  • oggライブラリダウンロードして、自分の開発環境 TTVC Developer でビルドして完成
  • とりあえず bmx2wav から適当にコピペしてきてデコードまで同じ感じで出来る事を確認。
  • エンコード絡みも色々やって最終的になんとか使えるようになった
    • ビットレートとかの設定はわからん。品質は0.0~1.0で設定はできる。0.5が標準っぽいが。
    • 他の設定とかは判らないけど、この程度あれば良さそう。どうせあんまり使われない機能っぽいし。

2018-01-09

[bmx2wav]メモ 00:04  [bmx2wav]メモ - BMS関連ツール開発日記 by TEM を含むブックマーク はてなブックマーク -  [bmx2wav]メモ - BMS関連ツール開発日記 by TEM

  • WAVフォーマット対応
    • 内部でどう持つか
    • 32bit or 64bit
    • 64 bit の場合メモリ消費量が単純に倍になる
    • max value を 31bit とか 30bit にするとか?
  • 出力フォーマット

2018-01-08

[bmx2wav] 分解能とか 00:15  [bmx2wav] 分解能とか - BMS関連ツール開発日記 by TEM を含むブックマーク はてなブックマーク -  [bmx2wav] 分解能とか - BMS関連ツール開発日記 by TEM

その前に忘れてた事を

  • WAV フォーマット対応
    • 24bit 32bit とかサンプリング周波数 192kまで対応とか?
    • どこまで必要なのか判らん。正直16bit 44k 2ch じゃ駄目なの?とは思うが。
    • BMSの音量調査で 32bit 欲しいとか言ってたような

分解能については以下適当に箇条書き

  • 分解能はPCのリソースに限界がある以上どこかになんらかの上限は出てしまう
    • 具体的に言うと 32bit Windows だと 2^32≒4億 とか。
  • 今の BMX2WAV は全ての小節で同じ分解能にするようにしてるので、極端に高い分解能はメモリが足り無くなる
    • これは BMX2WAV で作った BMS 編集ライブラリで編集する際にこっちの方が良いと思った為だったような
  • この方式だと、大抵の場合何も無い部分を表すデータで占められてしまうので効率は悪い
    • けど、普通の BMS なら問題にならないぐらいの量
    • ごく一部の変態 BMS がなー
  • BMSON みたいな形式だとノードに「どの位置か」という情報を持たせるので無駄は少ない
    • そういう形式だと(他アプリ等の)編集とかの事には使いにくい
  • じゃあ BMX2WAV で使ってるライブラリが他で使われたんですかって言うとね
  • なので、中で持つデータ構造は BMX2WAV に向いてるデータ構造にするべし
  • BMSON 形式でも 558 桁は流石に流石に
    • 不可能じゃないけど労力に見合わないかと(コンピュータで巨大数を扱うのは面倒なのよ)
    • というか通常 44k 高品質でも 192k の wav に丸めるのでそれ以上は意味が無いかと
  • Alcubierre Driveがどういう方法でアレを実現してるのかはまだ不明だけど、変換出来れば良いので何か良い方法で対処したいかな
  • 結局の所、内部データをどう持つかがそのまま実装に繋がるのでそのデータ構造の骨子を考えて決めないとね
    • 第一候補は BMSON 形式そのまま
      • 分解能限界は400万ぐらいかな?
    • 第二候補は旧バージョンと一緒
      • メモリ次第だけど数万が良いところか。
    • 第三候補は小節毎に異なる分解能を持つやりかた
      • 分解能は1小節で億単位で行けると思うが
      • 変換で問題が無い形式を考えれるのかどうか

2018-01-06

[] 次期バージョン 12:26  次期バージョン - BMS関連ツール開発日記 by TEM を含むブックマーク はてなブックマーク -  次期バージョン - BMS関連ツール開発日記 by TEM

色々と環境が整ってきたのもありまして、次期バージョンの構想(まだ構想やで)を考えております。前バージョンのコードを参考にしつつ、基本的には一から作る感じですかね。コア部分はそのまま使える部分が多いと思うけど。GUI 部分は自作のライブラリが大きく変わったので作り直しだし、これを機に最適なインターフェイスにしたいですね。実際にプログラミングしていくのは新しいPCにしてからかな。春頃かなー。

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

以下箇条書き。星の数は難易度。5段階。

  • 開発環境を MSVC に(☆)
    • 前は bcc だったけどまあ Windows 標準の MSVC に。C++11以降を使いたいし。
    • あと、MSVC に関係無いけど、コア部分を Windows 非依存にすると、他の環境に移植が楽かも。(自分はやらないけど)
  • 64bit対応(☆☆)
    • 実メモリが当たり前のように4GBを越せる世界になってきたのと、twitterでもメモリ不足はたまに見かけるので。
    • 実装はそんなに難しくは無いはず
  • githubに公開(☆☆☆)
  • Squirrel スクリプト拡張(☆☆)
    • 前バージョンでやろうとしたけど諦めてしまった要件
    • 後から入れるのは難しいけど、最初から考えておけばそんなにきつくない筈
    • あと C++11 になって自作ライブラリも作ったのでまあ楽な筈
  • 外国語対応(☆☆)
    • 中国語対応して作り直してる人を見かけたので、対応した方がいいのかも。
    • 単に文字列リソース化するだけで OK
    • めんどいのは確か
  • bmson 対応(☆☆☆)
    • JSON のサブセットって認識で良いのかしら?それなら既存のライブラリを適当に用意すれば良いのかも
    • クラス設計とかも公開してるんで思ったより楽かもしれない。
    • 分解能が 1 小節 960 固定っぽいけどあってる?
  • 文字コード(☆☆☆☆)
    • うーん、あまり経験の無い分野なのでちょっと難易度高いかも。
    • BMS ファイルに文字コード指定の項目があるなら簡単かもしれんけど、無いと自動判定とか必要になるんでうーむ
    • 適当に文字コードライブラリ導入すればあっさり解決するかも
  • バッチ処理時に同フォルダにある BMS択一方法(☆)
    • 適当にルールを決めれば簡単だけど、どういうルールが正解なのかが難しいかも。
    • こういう人によるって部分をスクリプトで記述出来るようにすると良いのかもね。
  • 超絶分解能(☆☆☆☆☆)
    • “Alcubierre Drive”の動画を見たけど、何コレ?どうやってコレを実装してるのか謎すぎる。ちょっと時間ないので分析は後で
    • 分解能に関しては話が色々あるのであとで記事にします。

HitkeyHitkey2018/01/07 20:04BMSONに関して、私の理解では、"resolution"(拍分解能)の既定値240は、仰る通り「四拍子小節を960等分するリズム」を表現できます。拍分解能は必要に応じて変更でき、たとえば四拍子小節を1920等分するリズムが必要なら"resolution": 480, のように指定する感じっぽいです。

temtantemtan2018/01/08 20:32BMSON の v1.0 だとそういうパラメータがあるみたいですね。wikiにあった v0.21 を見ていたので判らなかったです。