量子化BMS
BMSデータに関する面白い試みが行われていました。
ここで公開されている「tonkatsu」は「L9999999999999^99999999999」や「Sofa $15 -> $1」に並ぶ新たなベンチマーク譜面になる予感がします。
思ったけど8bit - Stereoのデータでも2^8^2=65536個の音が必要になるな
— よーすく (@Yoskex) 2015年9月6日
8bitステレオの場合は256段階のサンプル音を左右それぞれ用意すればいいのでは?
— rokina (@lokina) 2015年9月6日
@lokina それめちゃめちゃ頭いい
— よーすく (@Yoskex) 2015年9月6日
9ビットステレオまでならいけるんじゃね
— rokina (@lokina) 2015年9月6日
16ビットステレオから桁落としすることになるが
— rokina (@lokina) 2015年9月6日
前者はともかく後者は間違いなくLR2吹っ飛びそう
— よーすく (@Yoskex) 2015年9月6日
BMSEで編集可能な前提で考えると、まず44.1kHzを192分音符で再現する場合テンポは13781.25BPMとなる。小数点以下がちょうど1/4なので浮動小数点数で正確に表現できる。
— rokina (@lokina) 2015年9月6日
1小節を1秒にするなら小節長は71.77734375 これはBMSEでは編集できない単位なので1小節1秒にはできない。
— rokina (@lokina) 2015年9月6日
16bitステレオだと1サンプルあたり32bitで表すことになるが、これをBGMレーンと直接対応させるなら、WAV定義数は32種類となる。同時発音数が多すぎると不安定になるため、ユニットをもっと大きくして8ビット(256個)x2とする。この場合専有するBGMレーンは最大4本となる
— rokina (@lokina) 2015年9月6日
定義数は256x4=1024個。ZZの範囲内に余裕で収まる。
— rokina (@lokina) 2015年9月6日
(正確にいうと1個目は"0"なので定義する必要がないので埋まるのは1020個)
— rokina (@lokina) 2015年9月6日
2個のWAVを同時再生すると単純に波形が加算されるという前提の議論なので実際の再生時にうまくいくとは思えないが、とりあえずこのまま進める。
— rokina (@lokina) 2015年9月6日
符号なし整数なら単純に上位8ビットと下位8ビットに分ければいいだけだが、符号付きとなるとちょっと考え方が面倒に……
— rokina (@lokina) 2015年9月6日
下位ビットの255個は2進表現で
— rokina (@lokina) 2015年9月6日
0000 0000 0000 0001 (+1)から
0000 0000 0111 1111 (+127)までと
1111 1111 1111 1111 (-1)から
1111 1111 0000 0000 (-127)までになるのか?
で上位ビットの255個は
— rokina (@lokina) 2015年9月6日
0000 0000 1000 0000 (+128)から
0111 1111 1000 0000 (+32640)までと
1111 1111 0111 1111 (-129)から
1000 0000 1000 0000 (-32640)まで
どうでもいいけどこれって、著作権的にまずい曲でつくったら法に触れる?
— よーすく (@Yoskex) 2015年9月6日
計算上はこう分けられるってだけで実際にはちゃんと鳴らないだろうし素直にプラスとマイナスで別扱いにしたほうがいいなこれ
— rokina (@lokina) 2015年9月6日
とんでもなく細かい定義はnazoやLR2だとFPSぶんしか処理されず、bmx2wavは意外とうまくいってくれるって感じがある
— よーすく (@Yoskex) 2015年9月6日
bmx2wavは単純なWAV連結でやってるっぽいから理論上の音になるんだよね
— rokina (@lokina) 2015年9月6日
LR2とかはリアルタイムで再生する都合上最小単位に限界がある
— rokina (@lokina) 2015年9月6日
なぜかわからないけど、とんでもなく細かい定義してるbmsをbmx2wavで変換すると、最初の2秒位は音が変に潰れるんだよな
— よーすく (@Yoskex) 2015年9月6日
1と0並べてたらわけわからなくなってきたから考えるのやめる
— rokina (@lokina) 2015年9月6日
+1~+127 と (+1~+127)*256 でプラス側は254個
— rokina (@lokina) 2015年9月6日
-1~-128 と (-1~-128)*256 でマイナス側は256個
合わせて510個
LRで2倍になるので1020個
なんか面倒になってきたから片側647段階(約1/102)に桁落としして再現するやつにするか…
— rokina (@lokina) 2015年9月6日
ロキナさんがほんとに作る方向で考えてると思わなかった。。。(失礼
— よーすく (@Yoskex) 2015年9月6日
戯言に付き合ってもらっちゃって申し訳ないというかありがたいありがたい
— よーすく (@Yoskex) 2015年9月7日
クソプログラムが出来たので試しにBOFU用の147秒の曲を変換してみたら、RGSS3だと変換自体に10分ほどかかって出てきたのが25.5MBのBMSファイル
— rokina (@lokina) 2015年9月6日
BMSEで開こうとしたが4分たっても読み込み終わらない
— rokina (@lokina) 2015年9月6日
@lokina BMSファイルだけでで25MBとか何がどうなってるのか非常に気になります
— ctc (@cure_to_coma) 2015年9月6日
@cure_to_coma 簡潔にいうと、波形自体をBMSのノートとして置いたものです。1秒間に44100サンプルが2ちゃんねるあるので、秒間密度は約88.2kノーツとなります。
— rokina (@lokina) 2015年9月6日
56万ノーツのplanZのBMSが1.2MBほどであったことを参考にすると25.5MBのこれはおよそ1200万ノーツある計算になる
— rokina (@lokina) 2015年9月6日
bmx2wavで変換を試みたら分解能が限界以上といわれて変換すらできなかった
— rokina (@lokina) 2015年9月6日
ちなみに10分前に起動したBMSEはまだ開かない
— rokina (@lokina) 2015年9月6日
>BMX2WAV の分解能の限界は 13440 です
— rokina (@lokina) 2015年9月6日
マジか…
— rokina (@lokina) 2015年9月6日
うーん
— rokina (@lokina) 2015年9月6日
テンポが狂ってる代わりに分解能自体は最短192分音符でやってるからいけるはずなんだが、小節長が長すぎたかな
— rokina (@lokina) 2015年9月6日
1秒のWAVでの実験は成功してるので大丈夫です
— rokina (@lokina) 2015年9月6日
大丈夫とは
— rokina (@lokina) 2015年9月6日
30秒くらいのいい感じの音ネタないですかね
— rokina (@lokina) 2015年9月6日
とんかつボイス使うか
— rokina (@lokina) 2015年9月6日
小節長短くしてみたら変換くっそ速くなった なんで
— rokina (@lokina) 2015年9月6日
とんかつボイス6秒だけどサンプルとしてはまあ十分だな
— rokina (@lokina) 2015年9月6日
https://t.co/6Dhcj8VhbV
— rokina (@lokina) 2015年9月6日
風呂のとんかつボイスをBMSにしました。多分LR2で再生してもなんのことか分からないと思いますが、bmx2wavで変換すると全てが理解できます。
さっきの148秒の曲は分解能の問題は解決できたけど結局メモリが足りなくてWAVにできなくて断念した
— rokina (@lokina) 2015年9月6日
とんかつボイス、545833ノーツです
— rokina (@lokina) 2015年9月6日
WAV1個あたりが1サンプルしかないからLR2だと始めた瞬間に終了扱いにされるのかあ
— rokina (@lokina) 2015年9月6日
対策を講じてみたがどっちにしろLR2じゃ再生できないのでやめます
— rokina (@lokina) 2015年9月6日
ちなみに全く参考にならないと思いますが、さきほどのBMSを「bmx2wav」でWAVに変換するとこうなります。(これはさらにMP3に変換してあります)https://t.co/LG3deJrqnI
— rokina (@lokina) 2015年9月6日
さすがにサンプリング周波数を1/4まで落とすとクッソ痛え高音ノイズが入るな
— rokina (@lokina) 2015年9月6日
今回の実験でわかったのは量子化ビット数が9程度でも案外いい感じに聞こえるということ
— rokina (@lokina) 2015年9月6日
重要なのはサンプリングレートだってはっきりわかんだね
— rokina (@lokina) 2015年9月6日
LR2やuBMPlayだとどうあがいてもプチプチいって終わりなのほんとカス
— rokina (@lokina) 2015年9月6日
さっきのBMS、本当は何がしたかったかというとですね
— rokina (@lokina) 2015年9月6日
「あの方式で特定の音声を再現した場合、著作権的にどうなのか」という思考実験なんですね
— rokina (@lokina) 2015年9月6日
あのBMSには波形どころか振幅の情報すら入ってないんですよ。普通に考えればBMS本体だけを以ってどの曲であるかはほとんど絶対に特定できない。
— rokina (@lokina) 2015年9月6日
たとえばあれを使って何かしらの曲をBMSに変換、そのデータを公開することは、不正アップロード足りうるか
— rokina (@lokina) 2015年9月6日
まあ著作権の概念はどうでもいいんですけどちょっとした暗号通信に使えそうな
— rokina (@lokina) 2015年9月6日
内部FPSが44100で動作するBMSプレイヤーとか誰か開発しませんかね?
— rokina (@lokina) 2015年9月6日
半分の22100FPSあれば十分ですよ。
— rokina (@lokina) 2015年9月6日
さっきのBMSをリアルタイムで正常に演奏できる本体が開発されたら開発者に5万円くらいあげそう
— rokina (@lokina) 2015年9月6日
突っ込むだけで勝手に音切りしてくれる夢のようなツール(ただし実際にプレイすると終始ベベベベベベベベって鳴ってる
— よーすく (@Yoskex) 2015年9月6日