Beispiel #1
0
        private void OnEventReceived1(object sender, MidiEventReceivedEventArgs e)
        {
            rx.BackColor = Color.Red;
            var midiDevice = (MidiDevice)sender;
            MidiEventToBytesConverter x = new MidiEventToBytesConverter();

            byte[] data = x.Convert(e.Event);

            /*
             * List<byte> n = new List<byte>();
             * //n.Add(0x01);
             * //n.Add(Convert.ToByte(data.Length + 1));
             * foreach(byte a in data)
             * {
             *  n.Add(0x01);
             *  n.Add(a);
             * }
             * //n.AddRange(data);
             * //n.Add(calculateCRC(data));
             * serialPort1.Write(n.ToArray(), 0, n.Count);*/
            tx.BackColor = Color.LimeGreen;
            serialPort1.Write(data, 0, data.Length);

            //textBox1.AppendText($"Event received from '{midiDevice.Name}' at {DateTime.Now}: {e.Event}" + Environment.NewLine);
        }
        private void OnEventReceived(object sender, MidiEventReceivedEventArgs e)
        {
            var midiDevice = (MidiDevice)sender;

            Console.WriteLine($"Event received from '{midiDevice.Name}' at {DateTime.Now}: {e.Event}");
            MessageBox.Show($"Event received from '{midiDevice.Name}' at {DateTime.Now}: {e.Event}");
        }
        private void OnInputEvent(object sender, MidiEventReceivedEventArgs e)
        {
            switch (e.Event)
            {
            case NoteAftertouchEvent aftertouchEvent:
                var buttonEvt = new ButtonEvent(aftertouchEvent);
                OnButtonChange?.Invoke(this, new FaderPortButtonEventArgs(buttonEvt.Button, buttonEvt.State));
                return;

            case ControlChangeEvent controlChangeEvent:
            {
                if (_pendingSlider == null)
                {
                    _pendingSlider = controlChangeEvent;
                }
                else if (_pendingSlider.ControlNumber == 0x20)
                {
                    SliderPosition = _pendingSlider.ControlValue + (controlChangeEvent.ControlValue << 7);
                    _pendingSlider = null;
                }
                else
                {
                    _pendingSlider = controlChangeEvent;
                }
            }
            break;

            case PitchBendEvent pitchBendEvent:
                var up = pitchBendEvent.PitchValue == 0x80;
                break;
            }
        }
Beispiel #4
0
 // Called when a MIDI event is received from the MIDI device
 void OnEventReceived(object sender, MidiEventReceivedEventArgs eventArgs)
 {
     // This event handler is invoked in different thread.
     //  See: https://melanchall.github.io/drywetmidi/articles/devices/Common-problems.html#startcoroutine-can-only-be-called-from-the-main-thread-in-unity
     // Send MIDI event to the main thread
     queue.Enqueue(eventArgs.Event);
 }
Beispiel #5
0
        private void OnMIDIEvent(object sender, MidiEventReceivedEventArgs e)
        {
            string          eventstring = e.Event.ToString();
            GroupCollection midiInfo    = new Regex(@"Note On \[0\] \((?<pitch>\d+), (?<amount>\d+)\)").Match(eventstring).Groups; // trust me

            short amount;

            if (!short.TryParse(midiInfo["amount"].Value, out amount))
            {
                amount = 0;
            }

            double pitch;

            if (!double.TryParse(midiInfo["pitch"].Value, out pitch))
            {
                pitch = 0.0d;
            }

            if (amount != 0) // later i might regulate the amount, for now i just check if it is 0
            {
                AddPitch(pitch);
            }
            else
            {
                RemovePitch(pitch);
            }
        }
Beispiel #6
0
        private void OnEventReceived(object sender, MidiEventReceivedEventArgs e)
        {
            var midiDevice = (MidiDevice)sender;

            logger.Debug($"MIDI event received from '{midiDevice.Name}: ' {e.Event}");
            ProcessRules(e);
            OnRecieveEvent?.Invoke(this, e);
        }
Beispiel #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void midiEventReceivedB(object sender, MidiEventReceivedEventArgs e)
        {
            var ea = new CancelMidiEventReceivedEventArgs(MidiPort.PortB, e);

            MidiEventHooked?.Invoke(sender, ea);

            if (ea.Cancel)
            {
                return;
            }

            MidiEventReceivedB?.Invoke(sender, e.Event);
        }
        private static void MidiKeyboard_EventReceived(object sender, MidiEventReceivedEventArgs e)
        {
            Log.overlayLog($"收到Note@{DateTime.Now.ToString("HH: mm:ss.fff")} ");
            switch (e.Event)
            {
            case NoteOnEvent @event:
                noteQueue.Enqueue(@event);
                break;

            case NoteOffEvent @event:
                noteQueue.Enqueue(@event);
                break;
            }
        }
Beispiel #9
0
     private static void InputEvent(object sender, MidiEventReceivedEventArgs e)
     {
         if (e.Event is NoteEvent ev)
         {
             var idx = ev.NoteNumber - 21;
             PressedKeys[idx] = ev.EventType switch
             {
                 MidiEventType.NoteOn => true,
                 MidiEventType.NoteOff => false,
                 _ => PressedKeys[idx]
             };
             CurrentSong?.SongJudgement?.RecordNoteEvent(ev);
         }
     }
 }
Beispiel #10
0
        private static void MidiKeyboard_EventReceived(object sender, MidiEventReceivedEventArgs e)
        {
            logs += e.Event.ToString() + "\r\n";
            switch (e.Event)
            {
            case NoteOnEvent @event:
                noteQueue.Enqueue(@event);
                break;

            case NoteOffEvent @event:
                noteQueue.Enqueue(@event);
                break;

            default:
                break;
            }
        }
Beispiel #11
0
        private void OnEventReceived(object sender, MidiEventReceivedEventArgs e)
        {
            var midiDevice = (MidiDevice)sender;

            Console.WriteLine($"Event received from '{midiDevice.Name}' at {DateTime.Now}: {e.Event}");
            var map = MapEventToControl(e.Event);

            Console.WriteLine($"Mapped to {map.MidiControlType}:{map.ControlId}");
            foreach (var controlAdaptor in controlAdaptors)
            {
                if (!controlAdaptor.MatchesEvent(map))
                {
                    continue;
                }
                controlAdaptor.HandleEvent(e.Event);
                break;
            }
        }
Beispiel #12
0
        private void OnEventReceived(object sender, MidiEventReceivedEventArgs e)
        {
            var midiDevice = (MidiDevice)sender;

            Console.WriteLine($"Event received from '{midiDevice.Name}' at {DateTime.Now}: {e.Event}");

            if (e.Event.EventType.Equals(MidiEventType.NoteOn))
            {
                if (_serialPort.IsOpen)
                {
                    Melanchall.DryWetMidi.MusicTheory.Note note = Melanchall.DryWetMidi.MusicTheory.Note.Get(((NoteOnEvent)e.Event).NoteNumber);

                    Console.WriteLine("Arduino gets: " + processNote(note.NoteName, note.Octave));

                    _serialPort.Write(processNote(note.NoteName, note.Octave) + ";");
                }
            }
        }
Beispiel #13
0
        private static void InputDeviceOnEventReceived(object sender, MidiEventReceivedEventArgs e)
        {
            System.Console.WriteLine("Input: " + e.Event.ToString());
            if (e.Event is SysExEvent s)
            {
                //System.Console.WriteLine("Output: " + s.Data.PrintInHex());
                return;
            }

            byte[] bts = null;
            if (e.Event is NoteOnEvent noteOn)
            {
                if (noteOn.Channel != LightChannel)
                {
                    return;
                }

                bts = PDevice.BuildSingleNoteLightPacket(noteOn.NoteNumber);
                //System.Console.WriteLine(noteOn.NoteNumber);
                //LightMap[noteOn.NoteNumber] = PlayHand.Right;
            }
            else if (e.Event is NoteOffEvent noteOff)
            {
                if (noteOff.Channel != LightChannel)
                {
                    return;
                }

                bts = PDevice.BuildSingleNoteLightPacket(noteOff.NoteNumber, false);
                //LightMap.TryRemove(noteOff.NoteNumber, out _);
            }

            if (bts == null || _outputDevice == null)
            {
                return;
            }
            //var bts = PDevice.BuildLightsPacket(LightMap).AddTimestamp();

            _outputDevice.SendEvent(new NormalSysExEvent(bts.AddTimestamp().ToArray()));
            //System.Console.WriteLine(bts.PrintInHex());
        }
Beispiel #14
0
        private static void OnEventReceived(object sender, MidiEventReceivedEventArgs e)
        {
            var    midiDevice = (MidiDevice)sender;
            string noteName;
            string noteIntensity;

            if (CheckString(e.Event.ToString()))
            {
                string tempString;

                tempString = e.Event.ToString();
                tempString = tempString.Replace("Note On [0] (", "");
                tempString = tempString.Replace(", ", "");
                tempString = tempString.Replace("(", "");
                tempString = tempString.Replace(")", "");

                if (tempString.Length == 4)
                {
                    string tempClone = tempString;
                    noteName      = tempString.Substring(0, tempString.Length - 2);
                    noteIntensity = tempClone.Replace(noteName, "");
                    tempString    = tempString.Substring(0, tempString.Length - 2);
                }
                else
                {
                    string tempclone = tempString;
                    noteName      = tempString.Substring(0, tempString.Length - 1);
                    noteIntensity = tempclone.Replace(noteName, "");
                    tempString    = tempString.Substring(0, tempString.Length - 1);
                }
                Console.WriteLine($"Note name: {noteName}");
                Console.WriteLine($"Note intensity: {noteIntensity}");

                int nameInt = Int32.Parse(noteName);
                int noteInt = Int32.Parse(noteIntensity);

                NoteTransfer.noteBuffer.Add(new Note(NoteTransfer.noteDict[nameInt], noteInt));
                Console.WriteLine($"Event received from '{midiDevice.Name}' at {DateTime.Now}: {e.Event}");
            }
        }
Beispiel #15
0
        private void ProcessRules(MidiEventReceivedEventArgs e)
        {
            if (presetFile == null)
            {
                return;
            }

            var ruleIndex = 0;

            foreach (HandleRule rule in presetFile.rulesStorage)
            {
                logger.Trace($"handle rule index={ruleIndex} : {rule.GetType().Name}");
                var matchResult = rule.CheckMatch(this, e.Event);
                logger.Trace($" -- check match = {matchResult}");
                if (matchResult)
                {
                    // call event
                    OnMatchRuleEvent?.Invoke(this, rule);

                    // execute action
                    if (rule.Action != null)
                    {
                        logger.Trace($"-- executed linked action: {rule.Action.GetType().Name}");
                        rule.Action.Execute();
                    }
                    else
                    {
                        logger.Trace("-- there is no linked action");
                    }


                    if (rule.StopProcessing)
                    {
                        logger.Trace("-- flag StopProcessing is set. Break.");
                        break;
                    }
                }
                ruleIndex++;
            }
        }
 private static void OnMidiRecieved(object sender, MidiEventReceivedEventArgs e)
 {
     if (e.Event != null)
     {
         if (e.Event.EventType == MidiEventType.NoteOn ||
             e.Event.EventType == MidiEventType.NoteOff)
         {
             NoteEvent noteEvent = e.Event as NoteEvent;
             SendMidi(noteEvent);
         }
         else if (e.Event.EventType == MidiEventType.ControlChange)
         {
             ControlChangeEvent ccEvent = e.Event as ControlChangeEvent;
             SendMidi(ccEvent);
         }
         else if (e.Event.EventType == MidiEventType.ProgramChange)
         {
             ProgramChangeEvent pcEvent = e.Event as ProgramChangeEvent;
             SendMidi(pcEvent);
         }
     }
 }
Beispiel #17
0
        private static void OnEventReceived(object sender, MidiEventReceivedEventArgs e)
        {
            var midiDevice = (MidiDevice)sender;

            NoteEvent ev = e.Event as NoteEvent;

            if (ev != null)
            {
                if (e.Event.EventType == MidiEventType.NoteOn && ev.Velocity > 0)
                {
                    Console.WriteLine("Key " + ev.NoteNumber.ToString() + " pressed");
                    state.PressKey(ev.NoteNumber);
                    //Process keybinding events when a key is pressed
                    bindings.ProcessState(state, cursor);
                }
                else if (ev.Velocity == 0)
                {
                    Console.WriteLine("Key " + ev.NoteNumber.ToString() + " released");
                    state.ReleaseKey(ev.NoteNumber);
                }
            }
        }
        private void OnMidiEventReceived(object sender, MidiEventReceivedEventArgs e)
        {
            if (e.Event is NoteOnEvent)
            {
                NoteOnEvent evt = e.Event as NoteOnEvent;

                if (evt.Velocity == 0)
                {
                    return;
                }

                if (noteLookup.TryGetValue(evt.NoteNumber, out Note note))
                {
                    note.Play();
                    if (detailedLogging)
                    {
                        Invoke((MethodInvoker)(() =>
                        {
                            Log($"Recieved MIDI number {evt.NoteNumber}, the note is {(note.IsShiftedKey ? "^" : string.Empty)}{note.NoteCharacter}.");
                        }));
                    }
                }
            }
        }
Beispiel #19
0
 private static void InputDevice_EventReceived(object sender, MidiEventReceivedEventArgs e)
 {
     //PluginLog.Verbose(e.Event.ToString());
     Plugin.CurrentOutputDevice.SendEvent(e.Event);
 }
Beispiel #20
0
        private void OnEventReceived(object sender, MidiEventReceivedEventArgs e)
        {
            String[] Negras  = { "37", "39", "_", "42", "44", "46", "_", "49", "51", "_", "54", "56", "58", "_", "61", "63", "_", "66", "68", "70", "_", "73", "75", "_", "78", "80", "82", "_", };
            String[] blancas = { "36", "38", "40", "41", "43", "45", "47", "48", "50", "52", "53", "55", "57", "59", "60", "62", "64", "65", "67", "69", "71", "72", "74", "76", "77", "79", "81", "83" };

            string entrada   = e.Event.ToString();
            string notaFinal = entrada.Split('(', ',')[1];
            bool   on        = false;



            string salida = (Note.Get((SevenBitNumber)Int32.Parse(notaFinal)).ToString());

            salida = salida.Remove(salida.Length - 1);
            //salida = entrada;


            //registro de tipo de evento y notas activas
            if (entrada.Contains("On"))
            {
                on = true;
                activas.Add(notaFinal);
                var notita = Note.Get((SevenBitNumber)Int32.Parse(notaFinal));
                notasAcorde.Add(notita);
                PostRequestChord(salida);
                //label1.Text = notasAcorde.Count().ToString();
            }
            else if (entrada.Contains("Off"))
            {
                on = false;
                activas.RemoveAll(x => x == notaFinal);
                // label1.Text = notasAcorde.Count().ToString();
                string pito = notaFinal + "c";
                PostRequestChord(pito);
            }

            notaSalida.Text = salida;


            //cambio de colores en la interfaz
            foreach (Button p in panel1.Controls)
            {
                if (p.Name == notaFinal && on == true)
                {
                    p.BackColor = Color.AliceBlue;
                }
                else if (p.Name == notaFinal && on == false)
                {
                    foreach (string thing in Negras)
                    {
                        if (p.Name == thing)
                        {
                            p.BackColor = Color.Black;
                        }
                    }

                    foreach (string thing in blancas)
                    {
                        if (p.Name == thing)
                        {
                            p.BackColor = Color.White;
                        }
                    }
                }
            }
        }
Beispiel #21
0
 private void OnEventReceived(object sender, MidiEventReceivedEventArgs e)
 {
     ForwardEvent(e.Event);
 }
Beispiel #22
0
        private static void OnEventReceived(object sender, MidiEventReceivedEventArgs e)
        {
            var midiDevice = (MidiDevice)sender;

            Console.WriteLine($"Event received from '{midiDevice.Name}' at {DateTime.Now}: {e.Event.ToString()}");
        }
Beispiel #23
0
        private void HandleOnRecieve(object sender, MidiEventReceivedEventArgs args)
        {
            MidiMonitorRecord r = new MidiMonitorRecord(DateTime.Now, args.Event);

            eventStore.Add(r);
        }
 private void OnEventReceived(object sender, MidiEventReceivedEventArgs e)
 {
     Console.WriteLine($"Midi Event Received: {e.Event}");
     _eventMapper.MapMidiEvent(e.Event);
 }
Beispiel #25
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="e"></param>
 public CancelMidiEventReceivedEventArgs(MidiPort port, MidiEventReceivedEventArgs e)
 {
     Port  = port;
     Event = e;
 }
Beispiel #26
0
 private void OnEventReceived(object sender, MidiEventReceivedEventArgs e)
 {
     _manualResetEvent.Set();
 }
Beispiel #27
0
        private void MidiIn_MidiEventReceived(object sender, MidiEventReceivedEventArgs e)
        {
            switch (e.MidiEvent.Status)
            {
            case MidiEventStatusType.NoteOn:
                if (XTouchMiniMcButton.Controls.TryGetValue(e.MidiEvent.Arg1, out XTouchMiniMcButton button))
                {
                    if (e.MidiEvent.Arg2 == (byte)McButtonState.Down)
                    {
                        //button down
                        OnButtonDown(button);
                    }
                    else if (e.MidiEvent.Arg2 == (byte)McButtonState.Up)
                    {
                        //button up
                        OnButtonUp(button);
                    }
                    else
                    {
                        Console.WriteLine("[_midiIn_MidiEventReceived] {0}", e.MidiEvent.ToString());
                    }
                }
                break;

            case MidiEventStatusType.CC:
                if (XTouchMiniMcEncoder.Controls.TryGetValue(e.MidiEvent.Arg1, out XTouchMiniMcEncoder encoder))
                {
                    /*
                     * apparently the encoder works like this:
                     * Clockwise: 0 < Arg2 < 0x40
                     * Anti-Clockwise: 40 < Arg2 < ?? (presumably 0x80)
                     *
                     * the value depends on the turn speed, no idea if it's just
                     * reporting the amount of "steps" since the last measurement
                     *
                     * I just transform it to an int
                     * negative: anti-clockwise
                     * positive: clockwise
                     * absolute value: speed (however that is measured)
                     */
                    int ticks;
                    if (e.MidiEvent.Arg2 > 0x40)
                    {
                        ticks = -(e.MidiEvent.Arg2 - 0x40);
                    }
                    else
                    {
                        ticks = e.MidiEvent.Arg2;
                    }
                    OnEncoderTurned(encoder, ticks);
                }
                break;

            case MidiEventStatusType.Pitch:
                if (XTouchMiniMcFader.Controls.TryGetValue(e.MidiEvent.Channel, out XTouchMiniMcFader fader))
                {
                    /*
                     * translate the native value range from 0-127 to a double 0-1
                     */
                    double value = ((double)e.MidiEvent.Arg2) / 127d;
                    OnFaderMoved(fader, value);
                }
                break;

            default:
                Console.WriteLine("[_midiIn_MidiEventReceived] {0}", e.MidiEvent.ToString());
                break;
            }
        }
Beispiel #28
0
        string GetStringDataByColumnIndex(int columnIndex, MidiEventReceivedEventArgs args)
        {
            string c1 = DateTime.Now.ToString("HH:mm:ss:fff");
            string c2;
            string c3;
            string c4;
            string c5;
            string c6;
            string c7;
            string c8;

            switch (args.Event.EventType)
            {
            case MidiEventType.ControlChange:
                var cce = (ControlChangeEvent)args.Event;
                c2 = "Control change";
                c3 = cce.Channel.ToString();
                c4 = cce.ControlNumber.ToString();
                c5 = cce.ControlValue.ToString();
                c6 = nv;
                c7 = nv;
                c8 = nv;
                break;

            case MidiEventType.ProgramChange:
                var pce = (ProgramChangeEvent)args.Event;
                c2 = "Program change";
                c3 = pce.Channel.ToString();
                c4 = nv;
                c5 = nv;
                c6 = pce.ProgramNumber.ToString();
                c7 = nv;
                c8 = nv;
                break;

            case MidiEventType.NoteOn:
                var noe = (NoteOnEvent)args.Event;
                c2 = "NoteOn";
                c3 = noe.Channel.ToString();
                c4 = nv;
                c5 = nv;
                c6 = nv;
                c7 = noe.NoteNumber.ToString();
                c8 = noe.Velocity.ToString();
                break;

            case MidiEventType.NoteOff:
                var nOffEvevent = (NoteOffEvent)args.Event;
                c2 = "NoteOff";
                c3 = nOffEvevent.Channel.ToString();
                c4 = nv;
                c5 = nv;
                c6 = nv;
                c7 = nOffEvevent.NoteNumber.ToString();
                c8 = nOffEvevent.Velocity.ToString();
                break;

            default:
                c2 = nv;
                c3 = nv;
                c4 = nv;
                c5 = nv;
                c6 = nv;
                c7 = nv;
                c8 = nv;
                break;
            }

            if (columnIndex == 1)
            {
                return(c1);
            }
            else if (columnIndex == 2)
            {
                return(c2);
            }
            else if (columnIndex == 3)
            {
                return(c3);
            }
            else if (columnIndex == 4)
            {
                return(c4);
            }
            else if (columnIndex == 5)
            {
                return(c5);
            }
            else if (columnIndex == 6)
            {
                return(c6);
            }
            else if (columnIndex == 7)
            {
                return(c7);
            }
            else if (columnIndex == 8)
            {
                return(c8);
            }
            else
            {
                return(nv);
            }
        }