Sequenceが必須になっています。従ってMIDIで作成した音は鳴音すると考えていて良いです。ステートマシンMIDIはその音色の中に爆発音や銃声が入っていたりしますので、大体の音がMIDIで再生できますので、これを使えれば音関係はほぼ大丈夫かもしれません。MIDIの作成方法は他に譲ります。MIDIを鳴音させるにはPlayerインターフェイスを使います。PlayerはManagerクラスより作成されます。API)で実施しますが、残念ながらOAPはじめ、多くの携帯端末で実装されていません。(ライセンス料が高いからという噂)後述しますが、OAPではPrefetchedとStarted状態のPlayerは同時に4本までしか共存できません。以下の簡略図で言えば、点線で囲まれた部分の状態が同時4本という事になります。実際に再生するまでの手順は以下の様になります。実際にBGMとして無限ループさせる場合はLoopCountを-1にする。);sndBGM.prefetch();sndBGM.setLoopCount(-1);Prefetched状態は、すぐさま再生が可能な状態という位置づけですが、OAPではBREWベースの為(かどうかは分かりませんが)、殆ど関係ありません。MIDP2.0の仕様書に以下の様な記述があります。{}このようにREALIZED状態からいきなりPlayer.start()を行ってもOKです。ボリューム設定Playerの音量はVolumeControlを利用します。ボリュームコントロールはPlayerから取得できます。取得したVolumeControlはPlayerに紐付けられていて、Pl.ayer毎のボリューム設定が可能となります。VolumeControlはREALIZED状態以上でしか操作できません。実際のところ未だにリスナーが必要な場面に出会わしていないので、本当に必要なシーンがまだ分かっていませんが、実装方法だけは書いておきます。大体のデバイスにおいて音源の再生は非同期で結果が返ります。Player.start()を実行した直後に本当に鳴音が始まる訳ではありません。そこで本当に鳴音が始まった時点でランタイムからコールバックが返却されます。リスナーはPlayerListenerを使い、playerUpdate()を実装する必要があります。詳細はサンプルコードを見てください。(midi.zip)ちょっと長いですが、感触を使う為に以下のコードを作成しましたので試してみてください。※SDK上と実機では相当タイミング等が違います。}}音周りのOAP独自仕様について同時に4本のMIDIが鳴音し、1本あたり16和音鳴音可能となっています。これはヤマハサウンドCPUの仕様に従っているためと思われます。同時にPrefetched状態、Started状態に突入できる数が4本までという制限があります。ループさせると、曲と曲の間でちょっともたつきます。これはOAPの実装問題と思われます。鳴音開始までに少し時間が掛かります。停止、再生の繰り返しを行うと鳴音自体しない場合が多いです。これはBREWのIMEDIA_Stop()が非同期であるためではないかな?と思っています。Play〜Stop〜Playを連続的に呼び出しても二度目のPlayはほぼ鳴らない様です。Play〜Stop〜deallocate〜Playとすれば連続して鳴音させる事が出来ます。Prefetchすると早いのか?JSRのドキュメントを読むと『Prefetchするとなるべく早く再生できるように努力します。』とありますが、OAPの仕様によると前述の通り同時4本までしかPrefetch状態になれないので、ナカナカ使いづらい感じがあります。OAPでは本当に有効なのでしょうか。これについて少し考察してみます。現在のOAPの仕様とBREWの仕様を比較して想像するに以下の図のような実装であると思われます。左が純粋なBREWのステートマシーン、右がそれに無理やり当てはめたMIDPのステートマシーンです。「Prefetched状態」とはIMEDIAインターフェイスで言えば「PAUSE状態」になります。これならばOAP仕様の「PREFETCHED/PLAY状態は4本まで」という符号と一致します。IMEDIAには「READY状態」から「PAUSE状態」へ遷移するAPIはありません。実際のところ「REALIZED状態」から「PREFETCHED状態」への状態遷移は、VM上で実現されているだけで、IMEDIAとしてはREADYのままであろうと想像できます。(もしかしたらIMEDIAのPAUSEを使って無いかも・・・)結論からして、「OAPでは無理にPrefetchする必要はない」と考えています。