internal static unsafe void WriteToJackMidi(this MidiEventCollection <MidiOutEvent> midiEvents, uint nframes) { float *portBuf = PortApi.GetBuffer(midiEvents.Port._port, nframes); MidiApi.ClearBuffer(portBuf); foreach (MidiOutEvent midiEvent in midiEvents) { byte *buffer = MidiApi.ReserveEvent(portBuf, (uint)midiEvent.Time, (uint)midiEvent.MidiData.Length); StructPointer <byte> bufferPointer = new StructPointer <byte> ((IntPtr)buffer, (uint)midiEvent.MidiData.Length); bufferPointer.Array = midiEvent.MidiData; bufferPointer.CopyToPointer(); } }
internal unsafe List <MidiInEvent> GetMidiEvents(uint nframes) { List <MidiInEvent> midiEvents = new List <MidiInEvent> (); IntPtr portBuffer = (IntPtr)PortApi.GetBuffer(_port, nframes); uint eventCount = MidiApi.GetEventCount(portBuffer); for (uint i = 0; i < eventCount; i++) { UnsafeStructs.jack_midi_event_t inEvent; MidiApi.GetEvent(&inEvent, portBuffer, i); midiEvents.Add(new MidiInEvent(inEvent)); } return(midiEvents); }