public void StartPlayNoteNumber(int noteNum) { uint onVelocity = 127; uint noteCommand = (int)MIDIMessage.NoteOn << 4 | 0; var result = samplerUnit.MusicDeviceMIDIEvent(noteCommand, (uint)noteNum, onVelocity, 0); if (result != AudioUnitStatus.NoError) { Console.WriteLine("Unable to start playing the mid note. Error code: {0}", (int)result); } }
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); }); } } }