FC2ブログ
戯言徒然日記開発日記東方DTMC/C++DoJaLuaCG備忘録
気が向いたら創作活動とかしてる人のチラシの裏。
--.--.-- --
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2008.02.23 Sat
以下私的メモ。

MFiデータ(.mld)をループ再生させる方法は4つほどありそう。

とりあえずJavaDocにも載ってる初期化みたいなの。
// AudioPresenter を取得する
AudioPresenter ap = AudioPresenter.getAudioPresenter();
// トラックを指定する
ap.setAttribute( AudioPresenter2.TRACK_ASSIGNMENT, 0 );
// MFi を読み込む(リソースに sunny.mld がある場合)
MediaSound sound = MediaManager.getSound( "resource:///sunny.mld" );
try {
sound.use();
} catch( ConnectionException e ) {
e.printStackTrace();
}
// Presenter に MFi を設定する
ap.setSound( sound );

この後で、ap.Play();するだけで通常の再生。曲の末尾まで行くと停止してしまう。


ループさせてみる。同期設定はPlayを呼ぶ前に!

(1) AudioPresenter.ATTR_SYNC_ON 場合

/*
初期化とか
*/

// 同期イベントを発生させる
ap.setAttribute( AudioPresenter.SYNC_MODE ,AudioPresenter.ATTR_SYNC_ON );
// メディアリスナーを設定する
ap.setMediaListener( MediaListenerをimplementsしたクラス );


①AudioPresenter.AUDIO_COMPLETEを待つ場合
public void mediaAction( MediaPresenter source, int type, int param ) {
// 再生が終了した場合
if ( type == AudioPresenter.AUDIO_COMPLETE ) {
// 最初から再生し直す
((AudioPresenter)source).play( );
}
}


②AudioPresenter.AUDIO_SYNCを待つ
→AudioPresenter.setSyncEventで同期用のノートを指定する
(※あらかじめダミーのノートなどを入れておくなどしておく)

再生前に↓を実行して同期イベントノートを指定してやる。
// 同期イベントノートを指定する
ap.setSyncEvent( チャンネル, キー );

→mediaActionメソッドで対処。AUDIO_SYNCが来たらまた最初から再生。

③ループ指定をして再生する
これも再生前に指定してやる。AudioPresenter2のLOOPという点に注意。
// ループ回数を指定する
setAttribute( AudioPresenter2.LOOP ,AudioPresenter.ATTR_SYNC_ON );

※試してないけどおそらくこんな感じかな?

①~③の問題点は指定区間のループができないこと;
またデータがまずいのは承知だけどギャップレス再生のようなことがうまくできなかった。・゚・(ノД`)・゚・。
どうしても曲の末尾まで行くと少し間が空いてしまう。


そこで④の登場。

④MFiのループ命令を埋め込んでおく

CreativeStation様にて公開されている解析データを参考に。

有限ではあるものループ命令をネストすることで相当な回数をループさせることができる。うまく埋め込めばギャップレス再生のようなものもできそう(現在いくつかのノートがオフにならず困ってる;)

今のところバイナリエディタでちまちまと命令を埋め込んでいる;面倒orzそういうツール、もしくはMIDIから変換時になんらかの指定で対応してるなんてものはないのか・・・?orz

ちなみにバイナリエディタで変更する場所。

①ヘッダ部分のファイルサイズ(命令を埋め込むサイズ分+)
②トラックサイズ(同上)
③ループ命令を埋め込む箇所。

命令はトラック内でないと有効にならない模様。また①に関しては変更しなくてもエミュレーターでは動作可能。SH機のみでテストしものの①も変更しないとErrorとなる;
2008/02/25 初期化部分で記載漏れがあったので補填。
管理者にだけ表示を許可する

TrackBackURL
→ http://niffy67.blog110.fc2.com/tb.php/89-23fe4a19
Template by まるぼろらいと
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。