WM6のMIDI再生関数でZero3キーボード試作中 | objective-cをちょい研究!ブログ

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

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

Windows Mobile6 のAPIを使ってZero3キーボードの試作中です。
テンキーの1~8を押してる間だけド~ドを鳴らすというものです。


MIDI再生は以下のような4つの関数を作ってみました。最初にmidiOpenでMIDIポートを開き、KeyDownでmidiNoteOn、KeyUpでmidiNoteOff、最後にmidiCloseでMIDIポートを閉じます。
一応鳴らすことには成功したのですが、メモリ開放がうまくいってないようで、しばらく音を鳴らしていると途中で音が出なくなってしまいました(>_<)
そうなったら、アプリを再起動してもだめでアドエス自体を再起動するしかない…。
メモリ開放部分については、音が鳴り終わったあとにもmidiClose処理を入れるなど調整中です。

#include "wfmtmidi.h"


midiOpen()
  waveOutOpen(~) //MIDIポートオープン


midiNoteOn(noteNo)
  .DeltaTicks=0;
  .MidiMsg=0x7F0090 | (noteNo<<8); //ノートオンデータ作成
  waveOutPrepareHeader(~) //再生データ登録
  waveOutWrite(~) //再生
  WaitForSingleObject(~) //再生完了待ち
  waveOutUnprepareHeader(~) //再生データ開放


midiNoteOff(noteNo)
  .DeltaTicks=0;
  .MidiMsg=0x000080 | (noteNo<<8); //ノートオフデータ作成
  あとは midiNoteOn と同様


midiClose()
  waveOutReset(~) //出力全停止
  waveOutClose(~) //MIDIポートクローズ