スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

BMSプレーヤー開発日記

MIDIのズレ、直りました。
テンポ変更の後ろにいらんデルタタイムを書いてしまっているという単純なミスでした。

ってか一つのチャンネルで和音ってできるんですね 汗
コレしらなくてリズムパートが物足りなかったw

幸いメロディパート楽器はMBでは10種ないので、
楽器別にチャンネル分ければ万事おkですな。
音は最長2分音符でもあればいいのかな。。。
スポンサーサイト

オレにとって技術革新『BMS→SMF』

遂に、遂に…

問題解決!!

MusicBox用BMSの伴奏部分を一つのMIDIに変換するプログラムかけました。ビット操作が苦手なんでかなりアナログなプログラムですができましたーーーー!ガハハ。

最初はなかなか音すら鳴りませんでしたが、
1回1音でも鳴るようになればもうそこはゴール!
数値をいじるだけで、10和音程度の綺麗なMIDIになってくれました~。

デルタタイムも可変長数値表現に変換できれば問題はありませんでした。

ただ、
BPM変更をノートが出現する前に4拍おいて変更しても適用されなく、初期設定BPMのままになってしまう。まぁわざわざ開始直後にBPMを変えないでしょうが。。。
テンポ変更命令が連続すると反映されんのかねぇ。
デルタタイムの設定ミスだろうか。

デルタタイムを1にすれば、変更後のBPMが反映はされるが、最初の4拍部分まで変更後のBPMになってしまう。


MIDI…奥が深いぜぇ。


何がなんでもとりあえず最大の関門とおもわれていたものができた。
おかげで前回書いた問題がすべて解決。サクサクになりました。

ただ今度はキー音鳴らすときに若干動きが鈍るのが目立つようになった。若干だけど。

BMSプレーヤー進展

気合のプログラムで
MusicBox規格のBMSを
無事に伴奏付き+キー音付きで再生できるようになった。

が、

重い。

原因はっきりしている。
伴奏はGREATのゾーンにノートを発見したら即座にそのデータからMIDIを作り鳴らすという途方もない作業をさせているから。最新のケータイならそう重くないのかもしれないけどP902iでは薄くカクカク。友人のSHケータイで重重のようです。(正確には音を作って鳴らす過程で一瞬動きが鈍る。)

□解決策
その1.『伴奏パートを最初にすべて読み込み、一つのMIDIファイルにする。』
コレができたら苦労しません。もっともプレイ中に不可がかからない方法です。MIDIの構造はだんだん理解できてきましたが、デルタタイムとかを扱うのが難しい。上位1bitが~ってむずいよ…

その2.『あらかじめすべてのパターンのMIDIを作成し、メモリにおいておく。』
これやればMIDIを作る過程をすべて省けて、あとは順番にならしていくだけ、となります。MIDIの知識が不足している今、コレが一番妥当かも。ただ問題はメモリか。。。一つの音出すMIDIが平均40バイト。コレが数百。10KBくらいか。まぁ現実的といえば現実的だが。どうなんだろ。やってみるかな。use()の動作が重いなら、あらかじめすべてuse()するけどなんかできなそうだな。
ただ、重い原因の大半がplay()だったらこれでは解決できない。



どう考えたってその1が一番スマートなやり方。
とりあえず2をやってみるか。



■続報
2をやったけどだめだったw
一応動作はしたけどやる前と対して速度は変わらなかったし、音ズレがでるようになってしまった。コレはイカン。
解決策はもはや1しかない!

『BMSファイルはMIDIファイルと類似したフォーマット』
らしい。まぁそういわれればそうかも。デルタタイムだって小節を192分割してるんだから簡単に割り出せるかも知れない。とりあえずチャレンジか。
まずはBMSからMIDIを作るプログラムの作成だ!

着々進展

伴奏のMIDIファイルなくても再生できるようにした。
本来MIDIとタイミングがズレたら大変なんで、再生時間をAPIで取得してBPMやらからノート位置を計算して成り立たせていたけど、MIDIがないのならいくらズレても問題ないことに気づいたため、APIで取得していた再生時間を現在時刻-開始時刻に置き換えてみた。(まぁ両方似たようなもの…後者でもズレはほぼないかも。)

使えるAudioPresenterは機種によって違うと思いますが、平均して確か3個くらい。これでは6つのキー+自動演奏分5つ程度、には全然足りない。
そこでケータイはキー同時押し2つくらいしか効かないのを逆手に取り、キー押し用2つ+自動演奏1つで頑張ってみることにした。
自動演奏は5つ程度のラインを和音MIDI化してひとつのAudioPresenterで鳴らす。コレもMIDI構造を学んだ結果!


MusicBox対応も時間の問題か。
コレで数多くの曲に対応できるとともに、キーを押したら音のでる
音ゲーらしい音ゲーになるわけだ。
(果たしてこんな面倒な処理をやり続けることに携帯の性能が耐えられるのやら…メモリは意外にダイジョウブっぽいんだが。)

MusicBox

なにやらBMSには製作を楽にするためのwav音源セット『MusicBox』なるものが存在するらしい。これで作られてるものってかなりの数ある模様。

つまり、これをアプリ内に仕込めば一気に大量のBMSに対応できることになる!幸いキー押して音出る仕組みはできてるわけだから、あとはMusicBoxの音源に対応するMIDIデータを探し出せばおk。

っていってもケータイでの音の再現性が悪いから探すの大変。
MIDIのリズムセットっていうのもよく分からんからドラムとか探すのも大変。

ドラム系がすべて同じにきこえるし…
一応音階をもった音に関しては対応するMIDI音色を発見できたので早速読み取れるようにしてみようと思います。
(ケータイは鳴らせる音階も限られてるからなぁ…)


でMusicBoxを使う上での最大の障害は、
多分自動演奏部分。今作ってるアプリの性質では伴奏のMIDIデータが必ず必要なわけだから、この自動演奏部分に関しては読み取って一つのMIDIデータにする必要がある…。
無理じゃね?w

携帯用BMクローン開発日誌

アプリ順調順調。光GREATのタイミングではキーが赤く光るようにしてみた。あとノート情報が16進数ではなく36進数で書かれていることを知って修正。判定のフォントを太くした。右下に箱書いたけど、ここはサドゥンやらヒドゥンなど設定状況を表示させるつもり。
これだけやっても実機での速度はほぼ変化なし。
(古い携帯ではどうだか不明。ワタシはP902i使用。)

ターンテーブルのみ他のBMクローンのものなんですが、コレも手書きのものにしなくては。ドット絵むずいよ。。。

今はスコアが右に並んでるけど、ここは画像をはるつもり。
BM98等は読めませんがGIF画像数枚ならなんとか…
(GIFアニメっぽくやったら激重にw)

あとはBMSの確保だなぁ…
今使ってるBMSの作者様から許可がとれれば、
あらかじめ曲いれて配布できるんだが…


MIDIとBMSを作ってくれる人募集wwww
もしくはウチのBMSくれてやってもいいよ、って人募集。

(テスターも募集。)

MIDIのBGMとBMSのみの簡素な構成専用アプリではありますが。。。
ただキー押したら音出るってのと外部から曲取り込むってのは現在凍結中。まずは他のシステム!

■必要なファイル概要。
・MIDI専用。
(mldファイルでは同期できん。最大和音数は機種次第。機種によって、曲によってはBMSの開始点とMIDIの開始点が想定からいくらかずれることがありますが、四部音符単位でアプリから手動で修正可能っす。)
・5キー専用。7キーも一回できるようにしてみたが無理ありまくり。携帯の構造的に。
・音色ファイル(?)は使用不可。設定しても無視されます。
・BPM変化や小節短縮はできる。
・192分音符まで対応。
・最大300小節。
・あとはやってみないわからない。

(すぐにアプリに載せ配布できますw低容量の曲なら10曲くらいははいるか…な。)
Go To 物置。
プロフィール

書いてる人:つん

まったりのんびり。書いてる人の息抜きブログです。

多分連絡先↓
metal_tsun@yahoo.co.jp

カテゴリー
リンク
月別アーカイブ
バロメーター
Java歴:2005年2月から今まで。
3DCG歴:2005年8月から数年。
C歴:2006年4月から今まで。
VB歴:2007年3月からちょっと。
Delphi歴:2007年3月からちょっと。
PIC歴:2007年5月から数年。
イラスト歴:2007年12月から今まで。
DTM歴2008年2月からちょっと。
PHP歴2008年4月からちょっと。
C++歴2008年4月から今まで。
C#歴2009年1月から今まで。
Objective-C歴2009年4月から今まで。
CSS歴2012年5月から今まで。

ブログ開始日2005/10/11


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。