Exemple #1
0
        private void MidiInPort_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            IMidiMessage receivedMidiMessage = args.Message;

            byte[] rawData = receivedMidiMessage.RawData.ToArray();
            mainPage.CSignetic6502.MemoryBus.ACIA.MidiInPort_MessageReceived(rawData);
        }
Exemple #2
0
        public void MidiInPort_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            IMidiMessage receivedMidiMessage = args.Message;

            rawData         = receivedMidiMessage.RawData.ToArray();
            MessageReceived = true;
        }
        /// <summary>
        /// Process messages received from the Launchpad
        /// </summary>
        /// <param name="sender">Launchpad</param>
        /// <param name="args">Midi Message</param>
        void InPort_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            // Determine what kind of message it is
            switch (args.Message)
            {
            case MidiNoteOnMessage onMessage:     // Grid and side buttons come as Midi Note On Message

                Debug.WriteLine($"Grid ({onMessage.Note % 16}, {(int)(onMessage.Note / 16)}) " + (onMessage.Velocity == 0 ? "Released" : "Pressed"));

                // Get a reference to the button
                var gridButton = gridButtons.FirstOrDefault(button => button.Id == onMessage.Note);

                // If the grid button could not be found (should never happen), return
                if (gridButton == null)
                {
                    return;
                }

                // Update the state (Launchpad sends midi on message for press and release - Velocity 0 is released, 127 is pressed)
                gridButton.State = onMessage.Velocity == 0
                        ? LaunchpadButtonState.Released
                        : LaunchpadButtonState.Pressed;

                // Notify any observable subscribers of the event
                whenButtonStateChanged.OnNext(gridButton);
                break;

            case MidiControlChangeMessage changeMessage:     // Top row comes as Control Change message

                break;
            }
        }
Exemple #4
0
        private void MidiInPort_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            IMidiMessage receivedMidiMessage = args.Message;

            System.Diagnostics.Debug.WriteLine(receivedMidiMessage.Timestamp.ToString());

            if (receivedMidiMessage.Type == MidiMessageType.NoteOn)
            {
                byte channel     = ((MidiNoteOnMessage)receivedMidiMessage).Channel;
                byte note        = ((MidiNoteOnMessage)receivedMidiMessage).Note;
                byte velocity    = ((MidiNoteOnMessage)receivedMidiMessage).Velocity;
                int  octave      = note / 12;
                int  fundamental = note % 12;
                System.Diagnostics.Debug.WriteLine(channel);
                System.Diagnostics.Debug.WriteLine(note);
                System.Diagnostics.Debug.WriteLine(velocity);
                System.Diagnostics.Debug.WriteLine(octave);
                System.Diagnostics.Debug.WriteLine(fundamental);


                IMidiMessage message = new MidiNoteOnMessage(channel, note, velocity);
                midiOutPort.SendMessage(message);
            }
            else if (receivedMidiMessage.Type == MidiMessageType.NoteOff)
            {
                byte         channel  = ((MidiNoteOffMessage)receivedMidiMessage).Channel;
                byte         note     = ((MidiNoteOffMessage)receivedMidiMessage).Note;
                byte         velocity = ((MidiNoteOffMessage)receivedMidiMessage).Velocity;
                IMidiMessage message  = new MidiNoteOffMessage(channel, note, velocity);
                midiOutPort.SendMessage(message);
            }
        }
Exemple #5
0
        void DispatchMessageReceived(MidiInPort port, MidiMessageReceivedEventArgs args)
        {
            var data = args.Message.RawData.ToArray();

            MessageReceived(this, new MidiReceivedEventArgs {
                Data = data, Start = 0, Length = data.Length, Timestamp = (long)args.Message.Timestamp.TotalMilliseconds
            });
        }
Exemple #6
0
        private void MidiInPort_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            // Recieved message
            IMidiMessage receivedMidiMessage = args.Message;

            System.Diagnostics.Debug.WriteLine(receivedMidiMessage.Timestamp.ToString());

            if (receivedMidiMessage.Type == MidiMessageType.NoteOn)
            {
                System.Diagnostics.Debug.WriteLine(((MidiNoteOnMessage)receivedMidiMessage).Channel);
                System.Diagnostics.Debug.WriteLine(((MidiNoteOnMessage)receivedMidiMessage).Note);
                System.Diagnostics.Debug.WriteLine(((MidiNoteOnMessage)receivedMidiMessage).Velocity);

                // Play the note
                byte channel = ((MidiNoteOnMessage)receivedMidiMessage).Channel;
                byte note    = ((MidiNoteOnMessage)receivedMidiMessage).Note;
                //If the player releases the key there should be no sound
                byte velocity;
                if (((MidiNoteOnMessage)receivedMidiMessage).Velocity != 0)
                {
                    if (Settings.feedback == true)
                    {
                        //Use the input from the keyboard the see what the normal velocity is and then add the volume the user chose
                        velocity = ((MidiNoteOnMessage)receivedMidiMessage).Velocity;

                        if (velocity + DoubleToByte(Settings.volume) <= 127 && velocity + DoubleToByte(Settings.volume) >= 0)
                        {
                            velocity += DoubleToByte(Settings.volume);
                        }
                        else if (velocity + DoubleToByte(Settings.volume) > 127)
                        {
                            velocity = 127;
                        }
                        else
                        {
                            velocity = 0;
                        }
                        //Else use the static velocity the user chose
                    }
                    else
                    {
                        velocity = DoubleToByte(Settings.velocity);
                    }
                    //Else do not produce any sound, when the input is 0
                }
                else
                {
                    velocity = ((MidiNoteOnMessage)receivedMidiMessage).Velocity;
                }

                IMidiMessage midiMessageToSend = new MidiNoteOnMessage(channel, note, velocity);
                FillKey(note);
                Settings.midiOutPort.SendMessage(midiMessageToSend);
            }
        }
        private async void MidiInPort_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            IMidiMessage receivedMidiMessage = args.Message;

            // Use helper class to check message, and if it's something we can deal with, send the message to MIDI out if connected
            bool sendMessage = await msgHelper.UseMessage(receivedMidiMessage);

            if (midiOutPort != null && sendMessage)
            {
                midiOutPort.SendMessage(receivedMidiMessage);
            }
        }
Exemple #8
0
        private void MidiInPort_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            IMidiMessage receivedMidiMessage = args.Message;

            if (receivedMidiMessage.Type == MidiMessageType.ControlChange)
            {
                var message = (MidiControlChangeMessage)receivedMidiMessage;
                ResetKnob(message.Controller);
            }

            MidiMessageQueue.Enqueue(receivedMidiMessage);
        }
        private async void DeepMind_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            if (args.Message.Type == MidiMessageType.NoteOn)
            {
                var noteOnMessage = (MidiNoteOnMessage)args.Message;

                await Dispatcher.RunAsync(CoreDispatcherPriority.High, () =>
                {
                    this.textBlock.Text = noteOnMessage.Note + ", velocity " + noteOnMessage.Velocity;
                }
                                          );
            }
        }
Exemple #10
0
        private void MidiInPort_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            IMidiMessage receivedMidiMessage = args.Message;

            System.Diagnostics.Debug.WriteLine(receivedMidiMessage.Timestamp.ToString());

            if (receivedMidiMessage.Type == MidiMessageType.NoteOn)
            {
                System.Diagnostics.Debug.WriteLine(((MidiNoteOnMessage)receivedMidiMessage).Channel);
                System.Diagnostics.Debug.WriteLine(((MidiNoteOnMessage)receivedMidiMessage).Note);
                System.Diagnostics.Debug.WriteLine(((MidiNoteOnMessage)receivedMidiMessage).Velocity);
            }
        }
        private void OnMidiInMessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            // handle incoming messages
            // these are USB single-device connections, so we're not going to do any filtering

            if (args.Message is MidiNoteOnMessage)
            {
                var msg = args.Message as MidiNoteOnMessage;

                if (msg.Velocity == 0)
                {
                    // note off
                    if (PadReleased != null)
                    {
                        PadReleased(this, new PadReleasedEventArgs(msg.Note, (IMidiMessage)msg));
                    }
                }
                else
                {
                    // velocity is always 127 on the novation, but still passing it along here
                    // in case they add touch sensitivity in the future

                    // note on
                    if (PadPressed != null)
                    {
                        PadPressed(this, new PadPressedEventArgs(msg.Note, msg.Velocity, (IMidiMessage)msg));
                    }
                }
            }
            else if (args.Message is MidiControlChangeMessage)
            {
                var msg = args.Message as MidiControlChangeMessage;

                if (msg.Controller == 0 && msg.ControlValue == 3)
                {
                    // this is the notification that text has stopped scrolling
                    if (TextScrollingComplete != null)
                    {
                        TextScrollingComplete(this, EventArgs.Empty);
                    }
                }
                else
                {
                    System.Diagnostics.Debug.WriteLine("Unhandled MIDI-IN control change message controller: " + msg.Controller + ", value: " + msg.ControlValue);
                }
            }
            else
            {
                System.Diagnostics.Debug.WriteLine("Unhandled MIDI-IN message " + args.Message.GetType().ToString());
            }
        }
Exemple #12
0
 private async void MidiInPort_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
 {
     IMidiMessage receivedMidiMessage = args.Message;
     await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
     {
         Brush x = receivedMidiMessage.Type switch
         {
             MidiMessageType.NoteOn =>
             ((Button)myGrid.Children.First(x => ((Button)x).Content.ToString() == ((MidiNoteOnMessage)receivedMidiMessage).Note.ToString())).Background = new SolidColorBrush(Colors.MediumSpringGreen),
             MidiMessageType.NoteOff =>
             ((Button)myGrid.Children.First(x => ((Button)x).Content.ToString() == ((MidiNoteOffMessage)receivedMidiMessage).Note.ToString())).Background = new SolidColorBrush(Colors.LightGray),
             _ => null
         };
     });
Exemple #13
0
        public static void MidiDeviceService_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            var message = args.Message;

            if (message.Type == MidiMessageType.NoteOn)
            {
                var noteOn = (MidiNoteOnMessage)message;
                Console.WriteLine($"Key {noteOn.Note} pressed!");
            }
            else if (message.Type == MidiMessageType.NoteOff)
            {
                var noteOff = (MidiNoteOffMessage)message;
                Console.WriteLine($"Key {noteOff.Note} depressed!");
            }
        }
        /// <summary>
        /// A new MIDI message was received.
        /// Check if the message is relevant by checking the trained MIDI events
        /// and if so, send a notification.
        /// </summary>
        /// <param name="sender">MIDI port that sent the message</param>
        /// <param name="args">MidiMessageReceivedEventArgs</param>
        private void MidiMessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            // Get the message as simple IMidiMessage.
            IMidiMessage rawMidiMessage = (IMidiMessage)args.Message;

            // Get the id and relevant value of the MIDI message.
            int midiMessageID    = this.ExtractMidiMessageID(rawMidiMessage);
            int midiMessageValue = this.ExtractMidiMessageValue(rawMidiMessage);

            // First check if we are in MIDI learn mode.
            // If so, do not interpret the message, but instead use the message to associate
            // its type with an event type.
            if (this.midiLearningActive)
            {
                // Initialize new MIDI event.
                MidiEventTrigger learnedMidiEvent = new MidiEventTrigger();
                learnedMidiEvent.type = this.midiLearningType;
                learnedMidiEvent.rawOriginalMessage = rawMidiMessage;

                // Set the ID of the message.
                learnedMidiEvent.id = midiMessageID;

                // Store identified MIDI event.
                this.learnedMidiTriggers[(int)this.midiLearningType] = learnedMidiEvent;
                this.midiLearningActive = false;

                // Notify that the event has been learned.
                this.globalEventHandlerInstance.NotifyMidiEventLearned(this.midiLearningType);

                // Do not continue to analyze the input.
                return;
            }

            // Iterate through all types if the message was recognized.
            for (int i = 0; i < Enum.GetNames(typeof(MidiEventType)).Length; i++)
            {
                if (this.learnedMidiTriggers[i].id == midiMessageID)
                {
                    // Relevant event found, send the notification.
                    MidiEvent midiEvent = new MidiEvent();
                    midiEvent.type  = this.learnedMidiTriggers[i].type;
                    midiEvent.value = midiMessageValue;
                    this.globalEventHandlerInstance.NotifyMidiEventReceived(midiEvent);
                }
            }
        }
Exemple #15
0
 public async void MidiInPort_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
 {
     IMidiMessage receivedMidiMessage = args.Message;
     await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
     {
         double x = receivedMidiMessage.Type switch
         {
             MidiMessageType.ControlChange =>
             ((MidiControlChangeMessage)receivedMidiMessage).Controller switch
             {
                 48 => redSlider.Value    = ((MidiControlChangeMessage)receivedMidiMessage).ControlValue * 2.008,
                 49 => greenSlider.Value  = ((MidiControlChangeMessage)receivedMidiMessage).ControlValue * 2.008,
                 50 => blueSlider.Value   = ((MidiControlChangeMessage)receivedMidiMessage).ControlValue * 2.008,
                 56 => masterSlider.Value = ((MidiControlChangeMessage)receivedMidiMessage).ControlValue * 2.008,
                 51 => redSlider2.Value   = ((MidiControlChangeMessage)receivedMidiMessage).ControlValue * 2.008,
                 52 => greenSlider2.Value = ((MidiControlChangeMessage)receivedMidiMessage).ControlValue * 2.008,
                 53 => blueSlider2.Value  = ((MidiControlChangeMessage)receivedMidiMessage).ControlValue * 2.008,
                 _ => 1
             },
        private void MidiInPort_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            IMidiMessage receivedMidiMessage = args.Message;

            System.Diagnostics.Debug.WriteLine(receivedMidiMessage.Timestamp.ToString());

            if (receivedMidiMessage.Type == MidiMessageType.NoteOn)
            {
                System.Diagnostics.Debug.WriteLine(((MidiNoteOnMessage)receivedMidiMessage).Channel);
                System.Diagnostics.Debug.WriteLine(((MidiNoteOnMessage)receivedMidiMessage).Note);
                System.Diagnostics.Debug.WriteLine(((MidiNoteOnMessage)receivedMidiMessage).Velocity);

                byte         channel           = ((MidiNoteOnMessage)receivedMidiMessage).Channel;
                byte         note              = ((MidiNoteOnMessage)receivedMidiMessage).Note;
                byte         velocity          = ((MidiNoteOnMessage)receivedMidiMessage).Velocity;
                IMidiMessage midiMessageToSend = new MidiNoteOnMessage(channel, note, velocity);

                midiOutPort.SendMessage(midiMessageToSend);
            }
        }
Exemple #17
0
        public static void MessageHandler(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            var  dataReader = Windows.Storage.Streams.DataReader.FromBuffer(args.Message.RawData);
            byte garbage    = dataReader.ReadByte();
            byte noteId     = dataReader.ReadByte();
            byte velocity   = dataReader.ReadByte();

            //form.Text = noteId.ToString();
            //form.lastMidiID.Text = noteId.ToString();
            form.setNote(noteId.ToString());
            if (noteId == MIDI_NOTE_ID)
            {
                if (velocity == 0)
                {
                    isPressed = false;
                }
                else
                {
                    isPressed = true;
                }
            }
            form.pressState(isPressed);
        }
Exemple #18
0
        private static void MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            var received = args.Message;

            if (received.Type == MidiMessageType.ControlChange)
            {
                var msg = (MidiControlChangeMessage)received;
                foreach (var callback in generalCallbacks)
                {
                    callback(sender, msg);
                }

                string id = sender.DeviceId;
                if (!callbacks.ContainsKey(id))
                {
                    return;
                }

                var key = new Tuple <byte, byte>(msg.Channel, msg.Controller);
                if (callbacks[id].ContainsKey(key))
                {
                    foreach (var callback in callbacks[id][key])
                    {
                        callback(msg);
                    }
                }

                var universalKey = new Tuple <byte, byte>(255, 255);
                if (callbacks[id].ContainsKey(universalKey))
                {
                    foreach (var callback in callbacks[id][universalKey])
                    {
                        callback(msg);
                    }
                }
            }
        }
        /// <summary>
        /// Process messages received from the Launchpad
        /// </summary>
        /// <param name="sender">Launchpad</param>
        /// <param name="args">Midi Message</param>
        void InPort_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            // Determine what kind of message it is
            switch (args.Message)
            {
            // Grid and side buttons come as Midi Note On Message
            case MidiNoteOnMessage onMessage:
                // If it's a side button
                if (onMessage.Note % 10 == 9)
                {
                    UpdateSideButton(onMessage);
                }
                else     // If it's a grid button
                {
                    UpdateGridButton(onMessage);
                }
                break;

            // Top row comes as Control Change message
            case MidiControlChangeMessage changeMessage:
                UpdateTopButton(changeMessage);
                break;
            }
        }
Exemple #20
0
        private void MidiInPort_MessageRecieved(object sender, MidiMessageReceivedEventArgs args)
        {
            stopwatch.Restart();
            IMidiMessage message = args.Message;

            if (message.Type == MidiMessageType.NoteOn)
            {
                MidiNoteOnMessage msg = (MidiNoteOnMessage)message;
                //channels[msg.Channel] = true;
                //DebugChannels();

                if (controlKeys.Contains(msg.Note) && !openControlRecords.ContainsKey(msg.Channel))
                {
                    heapInProgress = true;
                    openControlRecords.Add(msg.Channel, new ChannelRecord(msg.Note));
                }
                else if (!openDownRecords.ContainsKey(msg.Note))
                {
                    heapInProgress = true;
                    openDownRecords.Add(msg.Note, new ChannelRecord(msg.Note));
                }
            }
            else if (message.Type == MidiMessageType.NoteOff)
            {
                MidiNoteOffMessage msg = (MidiNoteOffMessage)message;
                //channels[msg.Channel] = false;
                //DebugChannels();

                if (controlKeys.Contains(msg.Note) && openControlRecords.ContainsKey(msg.Channel))
                {
                    suspendedRecords.Add(openControlRecords[msg.Channel]);

                    openControlRecords.Remove(msg.Channel);
                }
                else if (openDownRecords.ContainsKey(msg.Note))
                {
                    suspendedRecords.Add(openDownRecords[msg.Note]);
                    openDownRecords.Remove(msg.Note);
                }

                if (openControlRecords.Count == 0 && openDownRecords.Count == 0)
                {
                    BeginDebounce();
                }
            }
            else if (message.Type == MidiMessageType.ControlChange)
            {
                MidiControlChangeMessage controlMessage = (MidiControlChangeMessage)message;
                int channel = controlMessage.Channel;

                if (openControlRecords.ContainsKey(channel))
                {
                    switch (controlMessage.Controller)
                    {
                    case 1:
                        openControlRecords[channel].MakeRecord(controlMessage.ControlValue);
                        //Debug.WriteLine(openRecords[channel].ToString());
                        break;

                    default:
                        Debug.WriteLine("Got unexpected control change on controller " + controlMessage.Controller);
                        break;
                    }
                }
            }
        }
Exemple #21
0
        //
        //
        //
        private void MidiInputDevice_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            IMidiMessage receivedMidiMessage = args.Message;

            // Build the received MIDI message into a readable format
            StringBuilder outputMessage = new StringBuilder();

            outputMessage.Append(receivedMidiMessage.Timestamp.ToString()).Append(", Type: ").Append(receivedMidiMessage.Type);

            // Add MIDI message parameters to the output, depending on the type of message
            switch (receivedMidiMessage.Type)
            {
            case MidiMessageType.NoteOff:
                var noteOffMessage = (MidiNoteOffMessage)receivedMidiMessage;
                outputMessage.Append(", Channel: ").Append(noteOffMessage.Channel).Append(", Note: ").Append(noteOffMessage.Note).Append(", Velocity: ").Append(noteOffMessage.Velocity);
                break;

            case MidiMessageType.NoteOn:
                var noteOnMessage = (MidiNoteOnMessage)receivedMidiMessage;
                outputMessage.Append(", Channel: ").Append(noteOnMessage.Channel).Append(", Note: ").Append(noteOnMessage.Note).Append(", Velocity: ").Append(noteOnMessage.Velocity);
                break;

            case MidiMessageType.PolyphonicKeyPressure:
                var polyphonicKeyPressureMessage = (MidiPolyphonicKeyPressureMessage)receivedMidiMessage;
                outputMessage.Append(", Channel: ").Append(polyphonicKeyPressureMessage.Channel).Append(", Note: ").Append(polyphonicKeyPressureMessage.Note).Append(", Pressure: ").Append(polyphonicKeyPressureMessage.Pressure);
                break;

            case MidiMessageType.ControlChange:
                var controlChangeMessage = (MidiControlChangeMessage)receivedMidiMessage;
                outputMessage.Append(", Channel: ").Append(controlChangeMessage.Channel).Append(", Controller: ").Append(controlChangeMessage.Controller).Append(", Value: ").Append(controlChangeMessage.ControlValue);
                break;

            case MidiMessageType.ProgramChange:
                var programChangeMessage = (MidiProgramChangeMessage)receivedMidiMessage;
                outputMessage.Append(", Channel: ").Append(programChangeMessage.Channel).Append(", Program: ").Append(programChangeMessage.Program);
                break;

            case MidiMessageType.ChannelPressure:
                var channelPressureMessage = (MidiChannelPressureMessage)receivedMidiMessage;
                outputMessage.Append(", Channel: ").Append(channelPressureMessage.Channel).Append(", Pressure: ").Append(channelPressureMessage.Pressure);
                break;

            case MidiMessageType.PitchBendChange:
                var pitchBendChangeMessage = (MidiPitchBendChangeMessage)receivedMidiMessage;
                outputMessage.Append(", Channel: ").Append(pitchBendChangeMessage.Channel).Append(", Bend: ").Append(pitchBendChangeMessage.Bend);
                break;

            case MidiMessageType.SystemExclusive:
                var systemExclusiveMessage = (MidiSystemExclusiveMessage)receivedMidiMessage;
                outputMessage.Append(", ");

                // Read the SysEx bufffer
                var sysExDataReader = DataReader.FromBuffer(systemExclusiveMessage.RawData);
                while (sysExDataReader.UnconsumedBufferLength > 0)
                {
                    byte byteRead = sysExDataReader.ReadByte();
                    // Pad with leading zero if necessary
                    outputMessage.Append(byteRead.ToString("X2")).Append(" ");
                }
                break;

            case MidiMessageType.MidiTimeCode:
                var timeCodeMessage = (MidiTimeCodeMessage)receivedMidiMessage;
                outputMessage.Append(", FrameType: ").Append(timeCodeMessage.FrameType).Append(", Values: ").Append(timeCodeMessage.Values);
                break;

            case MidiMessageType.SongPositionPointer:
                var songPositionPointerMessage = (MidiSongPositionPointerMessage)receivedMidiMessage;
                outputMessage.Append(", Beats: ").Append(songPositionPointerMessage.Beats);
                break;

            case MidiMessageType.SongSelect:
                var songSelectMessage = (MidiSongSelectMessage)receivedMidiMessage;
                outputMessage.Append(", Song: ").Append(songSelectMessage.Song);
                break;

            case MidiMessageType.TuneRequest:
                var tuneRequestMessage = (MidiTuneRequestMessage)receivedMidiMessage;
                //
                break;

            case MidiMessageType.TimingClock:
                var timingClockMessage = (MidiTimingClockMessage)receivedMidiMessage;
                //
                break;

            case MidiMessageType.Start:
                var startMessage = (MidiStartMessage)receivedMidiMessage;
                //
                break;

            case MidiMessageType.Continue:
                var continueMessage = (MidiContinueMessage)receivedMidiMessage;
                //
                break;

            case MidiMessageType.Stop:
                var stopMessage = (MidiStopMessage)receivedMidiMessage;
                //
                break;

            case MidiMessageType.ActiveSensing:
                var activeSensingMessage = (MidiActiveSensingMessage)receivedMidiMessage;
                //
                break;

            case MidiMessageType.SystemReset:
                var systemResetMessage = (MidiSystemResetMessage)receivedMidiMessage;
                //
                break;

            case MidiMessageType.None:
                throw new InvalidOperationException();

            default:
                break;
            }
            //
            //
            //
            midiMessagesReceived = outputMessage.ToString();
            //
            EventArgs e = new EventArgs();

            MidiInputMessageReceived(this, e);
        }
        private void Port_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            if (args.Message.Type == MidiMessageType.NoteOn)
            {
                var msg = (MidiNoteOnMessage)args.Message;

                if (msg.Note != 0)
                {
                    view.Title = $"Pitch: {msg.Note}, Velocity: {msg.Velocity}";

                    if (msg.Velocity != 0)
                    {
                        notesPlaying++;

                        freq = notes[msg.Note];
                        theta = 0;

                        input.Start();
                    }
                    else
                    {
                        notesPlaying--;

                        if (notesPlaying == 0)
                            input.Stop();
                    }
                }
            }
        }
        /// <summary>
        /// Display the received MIDI message in a readable format
        /// </summary>
        /// <param name="sender">Element that fired the event</param>
        /// <param name="args">The received message</param>
        private async void MidiInputDevice_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            IMidiMessage receivedMidiMessage = args.Message;

            // Build the received MIDI message into a readable format
            StringBuilder outputMessage = new StringBuilder();
            outputMessage.Append(receivedMidiMessage.Timestamp.ToString()).Append(", Type: ").Append(receivedMidiMessage.Type);

            // Add MIDI message parameters to the output, depending on the type of message
            switch (receivedMidiMessage.Type)
            {
                case MidiMessageType.NoteOff:
                    var noteOffMessage = (MidiNoteOffMessage)receivedMidiMessage;
                    outputMessage.Append(", Channel: ").Append(noteOffMessage.Channel).Append(", Note: ").Append(noteOffMessage.Note).Append(", Velocity: ").Append(noteOffMessage.Velocity);
                    break;
                case MidiMessageType.NoteOn:
                    var noteOnMessage = (MidiNoteOnMessage)receivedMidiMessage;
                    outputMessage.Append(", Channel: ").Append(noteOnMessage.Channel).Append(", Note: ").Append(noteOnMessage.Note).Append(", Velocity: ").Append(noteOnMessage.Velocity);
                    break;
                case MidiMessageType.PolyphonicKeyPressure:
                    var polyphonicKeyPressureMessage = (MidiPolyphonicKeyPressureMessage)receivedMidiMessage;
                    outputMessage.Append(", Channel: ").Append(polyphonicKeyPressureMessage.Channel).Append(", Note: ").Append(polyphonicKeyPressureMessage.Note).Append(", Pressure: ").Append(polyphonicKeyPressureMessage.Pressure);
                    break;
                case MidiMessageType.ControlChange:
                    var controlChangeMessage = (MidiControlChangeMessage)receivedMidiMessage;
                    outputMessage.Append(", Channel: ").Append(controlChangeMessage.Channel).Append(", Controller: ").Append(controlChangeMessage.Controller).Append(", Value: ").Append(controlChangeMessage.ControlValue);
                    break;
                case MidiMessageType.ProgramChange:
                    var programChangeMessage = (MidiProgramChangeMessage)receivedMidiMessage;
                    outputMessage.Append(", Channel: ").Append(programChangeMessage.Channel).Append(", Program: ").Append(programChangeMessage.Program);
                    break;
                case MidiMessageType.ChannelPressure:
                    var channelPressureMessage = (MidiChannelPressureMessage)receivedMidiMessage;
                    outputMessage.Append(", Channel: ").Append(channelPressureMessage.Channel).Append(", Pressure: ").Append(channelPressureMessage.Pressure);
                    break;
                case MidiMessageType.PitchBendChange:
                    var pitchBendChangeMessage = (MidiPitchBendChangeMessage)receivedMidiMessage;
                    outputMessage.Append(", Channel: ").Append(pitchBendChangeMessage.Channel).Append(", Bend: ").Append(pitchBendChangeMessage.Bend);
                    break;
                case MidiMessageType.SystemExclusive:
                    var systemExclusiveMessage = (MidiSystemExclusiveMessage)receivedMidiMessage;
                    outputMessage.Append(", ");

                    // Read the SysEx bufffer
                    var sysExDataReader = DataReader.FromBuffer(systemExclusiveMessage.RawData);
                    while (sysExDataReader.UnconsumedBufferLength > 0)
                    {
                        byte byteRead = sysExDataReader.ReadByte();
                        // Pad with leading zero if necessary
                        outputMessage.Append(byteRead.ToString("X2")).Append(" ");
                    }
                    break;
                case MidiMessageType.MidiTimeCode:
                    var timeCodeMessage = (MidiTimeCodeMessage)receivedMidiMessage;
                    outputMessage.Append(", FrameType: ").Append(timeCodeMessage.FrameType).Append(", Values: ").Append(timeCodeMessage.Values);
                    break;
                case MidiMessageType.SongPositionPointer:
                    var songPositionPointerMessage = (MidiSongPositionPointerMessage)receivedMidiMessage;
                    outputMessage.Append(", Beats: ").Append(songPositionPointerMessage.Beats);
                    break;
                case MidiMessageType.SongSelect:
                    var songSelectMessage = (MidiSongSelectMessage)receivedMidiMessage;
                    outputMessage.Append(", Song: ").Append(songSelectMessage.Song);
                    break;
                case MidiMessageType.TuneRequest:
                    var tuneRequestMessage = (MidiTuneRequestMessage)receivedMidiMessage;
                    break;
                case MidiMessageType.TimingClock:
                    var timingClockMessage = (MidiTimingClockMessage)receivedMidiMessage;
                    break;
                case MidiMessageType.Start:
                    var startMessage = (MidiStartMessage)receivedMidiMessage;
                    break;
                case MidiMessageType.Continue:
                    var continueMessage = (MidiContinueMessage)receivedMidiMessage;
                    break;
                case MidiMessageType.Stop:
                    var stopMessage = (MidiStopMessage)receivedMidiMessage;
                    break;
                case MidiMessageType.ActiveSensing:
                    var activeSensingMessage = (MidiActiveSensingMessage)receivedMidiMessage;
                    break;
                case MidiMessageType.SystemReset:
                    var systemResetMessage = (MidiSystemResetMessage)receivedMidiMessage;
                    break;
                case MidiMessageType.None:
                    throw new InvalidOperationException();
                default:
                    break;
            }

            // Use the Dispatcher to update the messages on the UI thread
            await Dispatcher.RunAsync(CoreDispatcherPriority.High, () =>
            {
                // Skip TimingClock and ActiveSensing messages to avoid overcrowding the list. Commment this check out to see all messages
                if ((receivedMidiMessage.Type != MidiMessageType.TimingClock) && (receivedMidiMessage.Type != MidiMessageType.ActiveSensing))
                {
                    this.inputDeviceMessages.Items.Add(outputMessage + "\n");
                    this.inputDeviceMessages.ScrollIntoView(this.inputDeviceMessages.Items[this.inputDeviceMessages.Items.Count - 1]);
                    this.rootPage.NotifyUser("Message received successfully!", NotifyType.StatusMessage);
                }
            });
        }
        private void OnMidiMessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            // Console.WriteLine("OnMidiMessageReceived: " + args.Message.Type);

            switch (args.Message.Type)
            {
                case MidiMessageType.NoteOn:
                    var noteOnMessage = args.Message as MidiNoteOnMessage;

                    // a zero-velocity note-on message is equivalent to note-off
                    if (noteOnMessage.Velocity == 0 && TranslateZeroVelocityNoteOnMessage)
                    {
                        var ev1 = NoteOffMessageReceived;
                        if (ev1 != null)
                            ev1(this, new MidiNoteOffMessageReceivedEventArgs(noteOnMessage.Channel, noteOnMessage.Note, noteOnMessage.Velocity, true));
                    }
                    else
                    {
                        // normal note on message
                        var ev2 = NoteOnMessageReceived;
                        if (ev2 != null)
                        {
                            try
                            {
                                ev2(this, new MidiNoteOnMessageReceivedEventArgs(noteOnMessage.Channel, noteOnMessage.Note, noteOnMessage.Velocity));
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.ToString());
                            }
                        }
                    }

                    break;

                case MidiMessageType.NoteOff:
                    var noteOffMessage = args.Message as MidiNoteOffMessage;
                    var ev3 = NoteOffMessageReceived;
                    if (ev3 != null)
                        ev3(this, new MidiNoteOffMessageReceivedEventArgs(noteOffMessage.Channel, noteOffMessage.Note, noteOffMessage.Velocity, false));
                    break;

                case MidiMessageType.ControlChange:
                    var ccMessage = args.Message as MidiControlChangeMessage;
                    var ev4 = ControlChangeMessageReceived;
                    if (ev4 != null)
                        ev4(this, new MidiControlChangeMessageReceivedEventArgs(ccMessage.Channel, ccMessage.Controller, ccMessage.ControlValue));
                    break;

                case MidiMessageType.ProgramChange:
                    var programMessage = args.Message as MidiProgramChangeMessage;
                    var ev5 = ProgramChangeMessageReceived;
                    if (ev5 != null)
                        ev5(this, new MidiProgramChangeMessageReceivedEventArgs(programMessage.Channel, programMessage.Program));
                    break;

                case MidiMessageType.PitchBendChange:
                    var pitchBendChangeMessage = args.Message as MidiPitchBendChangeMessage;
                    var ev6 = PitchBendChangeMessageReceived;
                    if (ev6 != null)
                        ev6(this, new MidiPitchBendChangeMessageReceivedEventArgs(pitchBendChangeMessage.Channel,  pitchBendChangeMessage.Bend));
                    break;

                // TODO: Add more message types

                default:
                    // message type we don't handle above. Ignore
                    break;
            }
        }
Exemple #25
0
 void DispatchMessageReceived(MidiInPort port, MidiMessageReceivedEventArgs args)
 {
     MessageReceived(this, new MidiReceivedEventArgs {
         Data = args.Message.RawData.ToArray(), Timestamp = (long)args.Message.Timestamp.TotalMilliseconds
     });
 }
Exemple #26
0
        private void MidiInputDevice_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            IMidiMessage msg = args.Message;

            midiMessageRecieved(msg);
        }
        /// <summary>
        /// Display the received MIDI message in a readable format
        /// </summary>
        /// <param name="sender">Element that fired the event</param>
        /// <param name="args">The received message</param>
        private async void MidiInputDevice_MessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            IMidiMessage receivedMidiMessage = args.Message;

            // Build the received MIDI message into a readable format
            StringBuilder outputMessage = new StringBuilder();

            outputMessage.Append(receivedMidiMessage.Timestamp.ToString()).Append(", Type: ").Append(receivedMidiMessage.Type);

            // Add MIDI message parameters to the output, depending on the type of message
            switch (receivedMidiMessage.Type)
            {
            case MidiMessageType.NoteOff:
                var noteOffMessage = (MidiNoteOffMessage)receivedMidiMessage;
                outputMessage.Append(", Channel: ").Append(noteOffMessage.Channel).Append(", Note: ").Append(noteOffMessage.Note).Append(", Velocity: ").Append(noteOffMessage.Velocity);
                break;

            case MidiMessageType.NoteOn:
                var noteOnMessage = (MidiNoteOnMessage)receivedMidiMessage;
                outputMessage.Append(", Channel: ").Append(noteOnMessage.Channel).Append(", Note: ").Append(noteOnMessage.Note).Append(", Velocity: ").Append(noteOnMessage.Velocity);
                break;

            case MidiMessageType.PolyphonicKeyPressure:
                var polyphonicKeyPressureMessage = (MidiPolyphonicKeyPressureMessage)receivedMidiMessage;
                outputMessage.Append(", Channel: ").Append(polyphonicKeyPressureMessage.Channel).Append(", Note: ").Append(polyphonicKeyPressureMessage.Note).Append(", Pressure: ").Append(polyphonicKeyPressureMessage.Pressure);
                break;

            case MidiMessageType.ControlChange:
                var controlChangeMessage = (MidiControlChangeMessage)receivedMidiMessage;
                outputMessage.Append(", Channel: ").Append(controlChangeMessage.Channel).Append(", Controller: ").Append(controlChangeMessage.Controller).Append(", Value: ").Append(controlChangeMessage.ControlValue);
                break;

            case MidiMessageType.ProgramChange:
                var programChangeMessage = (MidiProgramChangeMessage)receivedMidiMessage;
                outputMessage.Append(", Channel: ").Append(programChangeMessage.Channel).Append(", Program: ").Append(programChangeMessage.Program);
                break;

            case MidiMessageType.ChannelPressure:
                var channelPressureMessage = (MidiChannelPressureMessage)receivedMidiMessage;
                outputMessage.Append(", Channel: ").Append(channelPressureMessage.Channel).Append(", Pressure: ").Append(channelPressureMessage.Pressure);
                break;

            case MidiMessageType.PitchBendChange:
                var pitchBendChangeMessage = (MidiPitchBendChangeMessage)receivedMidiMessage;
                outputMessage.Append(", Channel: ").Append(pitchBendChangeMessage.Channel).Append(", Bend: ").Append(pitchBendChangeMessage.Bend);
                break;

            case MidiMessageType.SystemExclusive:
                var systemExclusiveMessage = (MidiSystemExclusiveMessage)receivedMidiMessage;
                outputMessage.Append(", ");

                // Read the SysEx bufffer
                var sysExDataReader = DataReader.FromBuffer(systemExclusiveMessage.RawData);
                while (sysExDataReader.UnconsumedBufferLength > 0)
                {
                    byte byteRead = sysExDataReader.ReadByte();
                    // Pad with leading zero if necessary
                    outputMessage.Append(byteRead.ToString("X2")).Append(" ");
                }
                break;

            case MidiMessageType.MidiTimeCode:
                var timeCodeMessage = (MidiTimeCodeMessage)receivedMidiMessage;
                outputMessage.Append(", FrameType: ").Append(timeCodeMessage.FrameType).Append(", Values: ").Append(timeCodeMessage.Values);
                break;

            case MidiMessageType.SongPositionPointer:
                var songPositionPointerMessage = (MidiSongPositionPointerMessage)receivedMidiMessage;
                outputMessage.Append(", Beats: ").Append(songPositionPointerMessage.Beats);
                break;

            case MidiMessageType.SongSelect:
                var songSelectMessage = (MidiSongSelectMessage)receivedMidiMessage;
                outputMessage.Append(", Song: ").Append(songSelectMessage.Song);
                break;

            case MidiMessageType.TuneRequest:
                var tuneRequestMessage = (MidiTuneRequestMessage)receivedMidiMessage;
                break;

            case MidiMessageType.TimingClock:
                var timingClockMessage = (MidiTimingClockMessage)receivedMidiMessage;
                break;

            case MidiMessageType.Start:
                var startMessage = (MidiStartMessage)receivedMidiMessage;
                break;

            case MidiMessageType.Continue:
                var continueMessage = (MidiContinueMessage)receivedMidiMessage;
                break;

            case MidiMessageType.Stop:
                var stopMessage = (MidiStopMessage)receivedMidiMessage;
                break;

            case MidiMessageType.ActiveSensing:
                var activeSensingMessage = (MidiActiveSensingMessage)receivedMidiMessage;
                break;

            case MidiMessageType.SystemReset:
                var systemResetMessage = (MidiSystemResetMessage)receivedMidiMessage;
                break;

            case MidiMessageType.None:
                throw new InvalidOperationException();

            default:
                break;
            }

            // Use the Dispatcher to update the messages on the UI thread
            await Dispatcher.RunAsync(CoreDispatcherPriority.High, () =>
            {
                // Skip TimingClock and ActiveSensing messages to avoid overcrowding the list. Commment this check out to see all messages
                if ((receivedMidiMessage.Type != MidiMessageType.TimingClock) && (receivedMidiMessage.Type != MidiMessageType.ActiveSensing))
                {
                    this.inputDeviceMessages.Items.Add(outputMessage + "\n");
                    this.inputDeviceMessages.ScrollIntoView(this.inputDeviceMessages.Items[this.inputDeviceMessages.Items.Count - 1]);
                    this.rootPage.NotifyUser("Message received successfully!", NotifyType.StatusMessage);
                }
            });
        }
        private void OnMidiMessageReceived(MidiInPort sender, MidiMessageReceivedEventArgs args)
        {
            // Console.WriteLine("OnMidiMessageReceived: " + args.Message.Type);

            switch (args.Message.Type)
            {
            case MidiMessageType.NoteOn:
                var noteOnMessage = args.Message as MidiNoteOnMessage;

                // a zero-velocity note-on message is equivalent to note-off
                if (noteOnMessage.Velocity == 0 && TranslateZeroVelocityNoteOnMessage)
                {
                    var ev1 = NoteOffMessageReceived;
                    if (ev1 != null)
                    {
                        ev1(this, new MidiNoteOffMessageReceivedEventArgs(noteOnMessage.Channel, noteOnMessage.Note, noteOnMessage.Velocity, true));
                    }
                }
                else
                {
                    // normal note on message
                    var ev2 = NoteOnMessageReceived;
                    if (ev2 != null)
                    {
                        try
                        {
                            ev2(this, new MidiNoteOnMessageReceivedEventArgs(noteOnMessage.Channel, noteOnMessage.Note, noteOnMessage.Velocity));
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                        }
                    }
                }

                break;

            case MidiMessageType.NoteOff:
                var noteOffMessage = args.Message as MidiNoteOffMessage;
                var ev3            = NoteOffMessageReceived;
                if (ev3 != null)
                {
                    ev3(this, new MidiNoteOffMessageReceivedEventArgs(noteOffMessage.Channel, noteOffMessage.Note, noteOffMessage.Velocity, false));
                }
                break;

            case MidiMessageType.ControlChange:
                var ccMessage = args.Message as MidiControlChangeMessage;
                var ev4       = ControlChangeMessageReceived;
                if (ev4 != null)
                {
                    ev4(this, new MidiControlChangeMessageReceivedEventArgs(ccMessage.Channel, ccMessage.Controller, ccMessage.ControlValue));
                }
                break;

            case MidiMessageType.ProgramChange:
                var programMessage = args.Message as MidiProgramChangeMessage;
                var ev5            = ProgramChangeMessageReceived;
                if (ev5 != null)
                {
                    ev5(this, new MidiProgramChangeMessageReceivedEventArgs(programMessage.Channel, programMessage.Program));
                }
                break;

            case MidiMessageType.PitchBendChange:
                var pitchBendChangeMessage = args.Message as MidiPitchBendChangeMessage;
                var ev6 = PitchBendChangeMessageReceived;
                if (ev6 != null)
                {
                    ev6(this, new MidiPitchBendChangeMessageReceivedEventArgs(pitchBendChangeMessage.Channel, pitchBendChangeMessage.Bend));
                }
                break;

            // TODO: Add more message types


            default:
                // message type we don't handle above. Ignore
                break;
            }
        }