BSOP 0.6

先日公開したBe-Sequence Object Placer(BSOP)をVer.0.6に更新しました。
大きな違いは(だいだいの)日本語を含むファイル名を扱えるようになったことと9/14KEYS対応、描画処理の負荷軽減となります。

ついでにLÖVEの標準のフォントでは日本語を扱えないため、MigMIX 1Mをファイルに含めました。
ちなみにÖの字はShift-JISで扱えないので正しく読み込めません。


日本語のファイルを読み込めなかった理由は、Love2dと云うかLuaで使われる文字コードがUTF-8なのに対してWindowsで扱うファイル名がShift-JIS(CP932)であり、文字コードの変換が必要であるからでした。

ウィンドウにファイルをドロップした時に渡されるファイル名がShiftJISで、lua内でファイルを開くときのファイル名がUTF-8である必要があるため、必要な変換はShift-JIS→UTF8のみでよさそうです。
文字コードの対応表を作って1文字ずつ置き換えていけば変換完了。その表を作ったり読み込んだりに手間がかかるわけですけれども。

何よりひと手間が必要だったことはUTF-8の文字を読む部分。
UTF-8は文字の最初のバイトを読むことで1文字が何バイトあるかを判断することができ、その判定にはビット演算を使います。
しかしLove2dで使用されているLua5.1ではビット演算の機能が用意されていないため、andやorにあたる計算を自前で用意する必要がありました。

Lua5.2ではbit32というライブラリを使えばビット演算ができるようになったようで、さらにその次のLua5.3では論理積やビットシフトを行えるビット演算子が組み込まれたようです。
Lua5.1にそのような機能はないので、2で割って切り捨てる計算を地道に繰り返す必要があるのでした。

ゲームを作るうえでビット演算の出番は決して少なくないと思うので、Love2d側でも何かしらサポートしてほしいところです。

ツール(Be-Sequence Object Placer)公開

本日、新しくBe-Sequence Object Placer(BSOP)というツールを公開しました。
所謂未配置BMSツールから演奏用の譜面データを作るためのツールです。
uBMSCにもある「キーボードからレーンに配置する」機能専用みたいなやつ。

以前に作ったBeMidiSlicerWaveEffectSplit-erを組み合わせて使えばBMSの作成が可能です。使い勝手は……?

略称がBeSOPとBSOPで安定していないのは決めかねているからです。どちらでもいいですか。

もともとは製作中の音楽ゲームの譜面配置用ツールとして作っていたものですが、Twitterで予想以上に反応があったため急ぎ公開してみた次第です。
まだ機能が足りていない部分があるものの、特殊でない7KEYS譜面なら多分問題ないのではないかと。

ロングノートとか14KEYSとかの対応は今後追加していきます。多分。

続きを読む ツール(Be-Sequence Object Placer)公開

続・サンプリングレート変換の段

以前にwavファイルのサンプリングレート変換を試してみた内容の続きです。
(2023/10/31 追記)FFT以外の補間法も試してみました。

前回は44100Hzのデータを48000Hzに変換する際に、44100のデータを整数倍に増やして間引く方法を取っていました。
結果的に比較的それなりに変換できることはできたのですが、音に若干のノイズが入る割に変換時間もある程度かかるという問題がありました。
これを何とかできないかということで、もう一つの方法

  • フーリエ変換して周波数成分を取り出し、逆変換して戻す

を試してみました。
44100Hzの波形をN=44100でフーリエ変換すると各周波数ごとのデータを取り出せるので、これに空白のデータを追加してN=48000の状態にして逆変換すると48000Hzの波形を復元できるというやつです。

フーリエ変換と言えばFFT。これを自前で組むのは大変な上に早くなさそうなので(理論も大して分かっていない)既存のライブラリを使います。
続きを読む 続・サンプリングレート変換の段