// private CTimer timer; private void MidiInCallback(uint hMidiIn, uint wMsg, int dwInstance, int dwParam1, int dwParam2) { int p = dwParam1 & 0xF0; if (wMsg != CWin32.MIM_DATA || (p != 0x80 && p != 0x90)) { return; } long time = CSound管理.rc演奏用タイマ.nシステム時刻; // lock前に取得。演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 lock (this.objMidiIn排他用) { if ((this.list入力デバイス != null) && (this.list入力デバイス.Count != 0)) { foreach (IInputDevice device in this.list入力デバイス) { CInputMIDI tmidi = device as CInputMIDI; if ((tmidi != null) && (tmidi.hMidiIn == hMidiIn)) { tmidi.tメッセージからMIDI信号のみ受信(wMsg, dwInstance, dwParam1, dwParam2, time); break; } } } } }
private void onMessageRecevied(object sender, MidiReceivedEventArgs e) { long time = CSoundManager.rc演奏用タイマ.nシステム時刻ms; // lock前に取得。演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 int dev = int.Parse((sender as IMidiInput).Details.Id); lock (this.objMidiIn排他用) { if ((this.listInputDevices != null) && (this.listInputDevices.Count != 0)) { foreach (IInputDevice device in this.listInputDevices) { CInputMIDI tmidi = device as CInputMIDI; if ((tmidi != null) && (tmidi.ID == dev)) { for (int i = 0; i < e.Length / 3; i++) { tmidi.tメッセージからMIDI信号のみ受信(dev, time, e.Data, i); } break; } } } } }
// private CTimer timer; private void MidiInCallback(int dev, double intime, IntPtr buffer, int length, IntPtr user) { long time = CSound管理.rc演奏用タイマ.nシステム時刻ms; // lock前に取得。演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 lock (this.objMidiIn排他用) { if ((this.list入力デバイス != null) && (this.list入力デバイス.Count != 0)) { foreach (IInputDevice device in this.list入力デバイス) { CInputMIDI tmidi = device as CInputMIDI; if ((tmidi != null) && (tmidi.ID == dev)) { tmidi.tメッセージからMIDI信号のみ受信(dev, time, buffer, length, user); break; } } } } }