private void NativePortMessageReceived(object sender, MidiPacketsEventArgs e) { foreach (var packet in e.Packets) { var bytes = new byte[packet.Length]; Marshal.Copy(packet.Bytes, bytes, 0, packet.Length); OnMessageReceived(bytes, 0, bytes.Length, TimeSpan.FromMilliseconds(packet.TimeStamp)); } }
void OnMessageReceived(object sender, MidiPacketsEventArgs e) { if (MessageReceived != null) { foreach (var p in e.Packets) { if (dispatch_bytes.Length < p.Length) { dispatch_bytes = new byte[p.Length]; } Marshal.Copy(p.Bytes, dispatch_bytes, 0, p.Length); MessageReceived(this, new MidiReceivedEventArgs() { Data = dispatch_bytes, Start = 0, Length = p.Length, Timestamp = p.TimeStamp }); } } }
void MidiMessageReceived (object sender, MidiPacketsEventArgs midiPacketArgs) { var packets = midiPacketArgs.Packets; for (int i = 0; i < packets.Length; i++) { var packet = packets [i]; byte[] data = new byte[packet.Length]; Marshal.Copy (packet.Bytes, data, 0, packet.Length); var midiStatus = data [0]; var midiCommand = midiStatus >> 4; if (midiCommand == 0x09) { var note = data [1] & 0x7F; var velocity = data [2] & 0x7F; int noteNumber = ((int)note) % 12; string noteType; switch (noteNumber) { case 0: noteType = "C"; break; case 1: noteType = "C#"; break; case 2: noteType = "D"; break; case 3: noteType = "D#"; break; case 4: noteType = "E"; break; case 5: noteType = "F"; break; case 6: noteType = "F#"; break; case 7: noteType = "G"; break; case 8: noteType = "G#"; break; case 9: noteType = "A"; break; case 10: noteType = "Bb"; break; case 11: noteType = "B"; break; default: throw new NotImplementedException (); } samplerUnit.MusicDeviceMIDIEvent ((uint)midiStatus, (uint)note, (uint)velocity); label.InvokeOnMainThread (delegate { label.Text = String.Format ("Playing: {0}: {1}", noteType, noteNumber); }); } } }
void MidiMessageReceived(object sender, MidiPacketsEventArgs midiPacketArgs) { var packets = midiPacketArgs.Packets; for (int i = 0; i < packets.Length; i++) { var packet = packets [i]; byte[] data = new byte[packet.Length]; Marshal.Copy(packet.Bytes, data, 0, packet.Length); var midiStatus = data [0]; var midiCommand = midiStatus >> 4; if (midiCommand == 0x09) { var note = data [1] & 0x7F; var velocity = data [2] & 0x7F; int noteNumber = ((int)note) % 12; string noteType; switch (noteNumber) { case 0: noteType = "C"; break; case 1: noteType = "C#"; break; case 2: noteType = "D"; break; case 3: noteType = "D#"; break; case 4: noteType = "E"; break; case 5: noteType = "F"; break; case 6: noteType = "F#"; break; case 7: noteType = "G"; break; case 8: noteType = "G#"; break; case 9: noteType = "A"; break; case 10: noteType = "Bb"; break; case 11: noteType = "B"; break; default: throw new NotImplementedException(); } samplerUnit.MusicDeviceMIDIEvent((uint)midiStatus, (uint)note, (uint)velocity); label.InvokeOnMainThread(delegate { label.Text = String.Format("Playing: {0}: {1}", noteType, noteNumber); }); } } }