簡単にというのも、詳しく説明するほと知らないからです。
MIDIは仕様上イベントを保持していたり、再生状態を制御したり出来るらしく、
OpenSL ESもそれを扱うことが出来るようですが
私の用途ではそこまで必要ではないため再生しか試していません。
単純に再生する方法については、サンプルコードがドキュメントに書いてあります。
VIVID Runtime SDKではドキュメントは「documentation/api/khronos/opensles1.0.20090316.pdf」にあり、
MIDIの再生については「APPENDIX B.3」にあります。
サンプルコードがそのまま乗っていますので、一連の流れが確認出来ます。
ポイントはSLDataFormatの値で、
mimeTypeに「audio/x-midi」を、containerTypeに「SL_CONTAINERTYPE_SMF」を設定します。
VIVID Runtime SDK 1.3に付属のimplementation_notes.xlsを見ると
MIDIの場合はMIMEに「audio/midi」と「audio/mobile-xmf」を使いなさいと書いて有るので
こちらでも動くかもしれません。
簡単に動作を試すならば、VIVID Runtime SDK付属の「simple3d」サンプルを改変すればよさそうです。
ファイル名とファイルフォーマットの設定を変えれば動くのではないでしょうか。(未確認)
変更前
1 | uri.URI = (SLchar *) "synth_22kHz_16b.wav"; |
---|---|
2 | |
3 | mime.formatType = SL_DATAFORMAT_MIME; |
4 | mime.mimeType = (SLchar *) "audio/x-wav"; |
5 | mime.containerType = SL_CONTAINERTYPE_WAV; |
変更後
1 | uri.URI = (SLchar *) "hoge.mid"; |
---|---|
2 | |
3 | mime.formatType = SL_DATAFORMAT_MIME; |
4 | mime.mimeType = (SLchar *) "audio/x-midi"; |
5 | mime.containerType = SL_CONTAINERTYPE_SMF; |
「simple3d」を「変更後」のようにしたのですが、実行時に読み込めないのかプレビューが停止します。
「未確認」とありますが、よかったら確認お願いします。
MIDIの場合は「CreateAudioPlayer」ではなく「CreateMidiPlayer」を使います。
この行を
res = (*EngineItf)->CreateAudioPlayer(EngineItf, &player, &audioSource, &audioSink, 1, iidArray, required);
こんな感じで変えます。
res = (*EngineItf)->CreateMidiPlayer(EngineItf, &player, &audioSource, KD_NULL, &audioSink, KD_NULL, KD_NULL, 1, iidArray, required);
引数の説明はドキュメントに記載されていますので参照ください。
ありがとうございます。
何度も質問して申し訳ありませんでした。