GSPlayerのMIDI再生プラグインを調査2 | objective-cをちょい研究!ブログ

objective-cをちょい研究!ブログ

WILLCOMを卒業してiOS開発者に転身しました。。
コメント&トラックバック大歓迎です。

GSPlayerのMIDIプラグインですが、MIDIファイル名を渡してあげるとWAVEデータとして返してくれるようです。
そのデータをSoundAPIのwaveOutWriteに渡してあげればよいみたい。


<簡単な流れ>(SoundAPIは青プラグインは紫)

//プラグインを読込む
pPlugin = pmapGetDecoder()


//プラグイン初期化
pPlugin->Init()


//MIDIファイルを開いて、ファイル情報受取り
pPlugin->PlugInOpenFile(MIDIファイル名, &ファイル情報)

 //ファイル情報
 //.nChannels    チャンネル数
 //.nSampleRate   サンプリングレート(Hz)
 //.nBitsPerSample サンプリングあたりのビット数(bit/Hz)


waveOutOpen(引数…)     //オーディオデバイスのオープン
waveOutPrepareHeader(引数…) //WAVEデータの準備


//MIDIデータの変換開始
pPlugin->StartDecodeFile()


//MIDIデータのWAVEデータを受け取る
pPlugin->DecodeFile(WAVEHDRバッファ)


waveOutWrite(引数…) //WAVEデータを再生


http://www13.plala.or.jp/kymats/study/MULTIMEDIA/waveOut_create.html
WAVEデータの作成と再生(Windowsプログラミング研究所様)


この方法でMIDIを鳴らすことはできそうだけど、プラグインにはMIDIメッセージではなくてMIDIファイルを渡すので、メロディキーボードやLED連動再生みたいなリアルタイムな再生させるのは難しそう。
まずは、SoundAPI側の勉強がてらに、Zero3WAVEキーボードでも作ってみるかな。
(WAVE鳴らすだけならPlaySound関数でも十分だけど…)