public void ProcessMessages() { if (_rtmidi == null || !_rtmidi->ok) return; byte* msg = stackalloc byte [32]; while (true) { ulong size = 32; var stamp = RtMidiDll.InGetMessage(_rtmidi, msg, ref size); if (stamp < 0 || size == 0) break; var status = (byte)(msg[0] >> 4); var channel = (byte)(msg[0] & 0xf); if (status == 9) { if (msg[2] > 0) OnNoteOn?.Invoke(channel, msg[1], msg[2]); else OnNoteOff?.Invoke(channel, msg[1]); } else if (status == 8) { OnNoteOff?.Invoke(channel, msg[1]); } else if (status == 0xb) { OnControlChange?.Invoke(channel, msg[1], msg[2]); } } }
public string GetPortName(int port) { if (_rtmidi == null || !_rtmidi->ok) { return(null); } return(Marshal.PtrToStringAnsi(RtMidiDll.GetPortName(_rtmidi, (uint)port))); }
public void SendMessage(byte [] data) { if (_rtmidi == null || !_rtmidi->ok) { return; fixed(byte *ptr = &data[0]) RtMidiDll.OutSendMessage(_rtmidi, ptr, data.Length); }
public void Dispose() { if (_rtmidi == null || !_rtmidi->ok) return; RtMidiDll.InFree(_rtmidi); _rtmidi = null; System.GC.SuppressFinalize(this); }
public MidiInPort(int portNumber) { _rtmidi = RtMidiDll.InCreateDefault(); if (_rtmidi == null || !_rtmidi->ok) throw new System.InvalidOperationException("Failed to set up a MIDI input port."); RtMidiDll.OpenPort(_rtmidi, (uint)portNumber, "RtMidi In"); }
public MidiProbe() { _rtmidi = RtMidiDll.InCreateDefault(); if (_rtmidi == null || !_rtmidi->ok) { UnityEngine.Debug.LogWarning("Failed to create an RtMidi device object."); } }
public MidiOutPort(int portNumber) { _rtmidi = RtMidiDll.OutCreateDefault(); if (_rtmidi != null && _rtmidi->ok) { RtMidiDll.OpenPort(_rtmidi, (uint)portNumber, "RtMidi Out"); } if (_rtmidi == null || !_rtmidi->ok) { throw new System.InvalidOperationException("Failed to set up a MIDI output port."); } }
public MidiPort(int portNumber, string portName) { _portName = portName; _rtmidi = RtMidiDll.InCreateDefault(); if (_rtmidi == null || !_rtmidi->ok) { UnityEngine.Debug.LogWarning("Failed to create an RtMidi device object."); return; } RtMidiDll.OpenPort(_rtmidi, (uint)portNumber, "RtMidi Input"); }
public MidiProbe(Mode mode) { if (mode == Mode.In) { _rtmidi = RtMidiDll.InCreateDefault(); } else // mode == Mode.Out { _rtmidi = RtMidiDll.OutCreateDefault(); } _mode = mode; if (_rtmidi == null || !_rtmidi->ok) { throw new System.InvalidOperationException("Failed to create a MIDI client."); } }
public void ProcessMessageQueue() { if (_rtmidi == null || !_rtmidi->ok) { return; } while (true) { var size = 4ul; var message = stackalloc byte [(int)size]; var stamp = RtMidiDll.InGetMessage(_rtmidi, message, ref size); if (size != 3) { break; } var status = message[0] >> 4; var channel = message[0] & 0xf; var data1 = message[1]; var data2 = message[2]; if (data1 > 0x7f || data2 > 0x7f) { continue; // Invalid data } var noteOff = (status == 8) || (status == 9 && data2 == 0); if (status == 9 && !noteOff) { GetChannelDevice(channel).ProcessNoteOn(data1, data2); } else if (noteOff) { GetChannelDevice(channel).ProcessNoteOff(data1); } else if (status == 0xb) { GetChannelDevice(channel).ProcessControlChange(data1, data2); } } }
public void Dispose() { if (_rtmidi == null || !_rtmidi->ok) { return; } RtMidiDll.InFree(_rtmidi); _rtmidi = null; foreach (var dev in _channels) { if (dev != null) { InputSystem.RemoveDevice(dev); } } System.GC.SuppressFinalize(this); }
public void Dispose() { if (_rtmidi == null || !_rtmidi->ok) { return; } if (_mode == Mode.In) { RtMidiDll.InFree(_rtmidi); } else // _mode == Mode.Out { RtMidiDll.OutFree(_rtmidi); } _rtmidi = null; System.GC.SuppressFinalize(this); }