/// <summary>
        ///     Callback called when data dump is received from device
        /// </summary>
        private void OnSysExMessageReceived(object sender, SysExMessageEventArgs e)
        {
            switch (e.Message.Length)
            {
            case ExpectedCommonDumpLength + SysExUtils.DumpPaddingSize:
                _logger.Receive("Received Patch.Common");
                _commonDump = e.Message;
                break;

            case ExpectedVfxDumpLength + SysExUtils.DumpPaddingSize:
                _vfxDump = e.Message;
                _logger.Receive("Received Patch.VocalEffect");
                break;
            }

            _dumpCount++;

            if (_dumpCount == 2)
            {
                _timer.Stop();

                _device.StopRecording();
                _device.Dispose();

                DataDumpReceived?.Invoke(this,
                                         new CommonAndVocalFxDumpReceivedEventArgs(new CommonAndVocalEffectPatch(_commonDump, _vfxDump)));
            }
        }
예제 #2
0
 public void OnSysExMessagePlayed(object sender, SysExMessageEventArgs e)
 {
     if (DeviceID != -1)
     {
         Device.Send(e.Message);
     }
 }
 void OnSysex(SysExMessageEventArgs e)
 {
     try
     {
         if (InvokeRequired)
         {
             BeginInvoke(new MethodInvoker(delegate
             {
                 if (midiPlaybackDevice != null &&
                     midiPlaybackDevice.IsDisposed == false)
                 {
                     midiPlaybackDevice.Send(e.Message);
                 }
             }));
         }
         else
         {
             if (midiPlaybackDevice != null &&
                 midiPlaybackDevice.IsDisposed == false)
             {
                 midiPlaybackDevice.Send(e.Message);
             }
         }
     }
     catch { }
 }
예제 #4
0
        /// <summary>
        ///     Callback called when data dump is received from device
        /// </summary>
        private void OnSysExMessageReceived(object sender, SysExMessageEventArgs e)
        {
            // At 11 byte we have effect type, so we check value there
            var effect = (Effect)e.Message[10];

            var expectedDumpLength = ExpectedDumpLength(effect) + SysExUtils.DumpPaddingSize;
            var actualDumpLength   = e.Message.Length;

            if (actualDumpLength != expectedDumpLength)
            {
                throw new InvalidDumpSizeException(expectedDumpLength, actualDumpLength);
            }

            _logger.Receive($"Received {effect}");


            _dataDumps.Add(effect, e.Message);

            _dumpCount++;

            if (_dumpCount == 4)
            {
                _timer.Stop();

                _device.StopRecording();
                _device.Dispose();

                DataDumpReceived?.Invoke(this, new EffectsPatchDumpReceivedEventArgs(new Patch(_dataDumps)));
            }
        }
예제 #5
0
        /// <summary>
        ///     Callback called when data dump is received from device
        /// </summary>
        private void OnSysExMessageReceived(object sender, SysExMessageEventArgs e)
        {
            switch (e.Message.Length)
            {
            case ExpectedCommonDumpLength + SysExUtils.DumpPaddingSize:
                _commonDump = e.Message;
                _logger.Receive("Received Patch.Common");
                break;

            case ExpectedPartialDumpLength + SysExUtils.DumpPaddingSize:
            {
                // At 11 byte we have partial identifier, so we check value at that byte
                var key = (DrumKey)e.Message[10];
                _partialsDump[key] = e.Message;
                _logger.Receive($"Received Patch.Partials[{key}]");
                break;
            }
            }

            _dumpCount++;

            if (_dumpCount == 39)
            {
                _timer.Stop();

                _device.StopRecording();
                _device.Dispose();

                DataDumpReceived?.Invoke(this,
                                         new DrumKitPatchDumpReceivedEventArgs(new Patch(_commonDump, _partialsDump)));
            }
        }
예제 #6
0
    protected virtual void OnSysExMessageDispatched(SysExMessageEventArgs e)
    {
        EventHandler <SysExMessageEventArgs> handler = SysExMessageDispatched;

        if (handler != null)
        {
            handler(this, e);
        }
    }
예제 #7
0
        void onSysExMessageReceived(object obj, SysExMessageEventArgs e)
        {
            SysExMessage m = e.Message;

            if (debugPrintMIDI)
            {
                Console.WriteLine("SysEx Message: " + m.ToString());
            }
        }
예제 #8
0
 private void HandleSysExMessageReceived(object sender, SysExMessageEventArgs e)
 {
     this.context.Post((SendOrPostCallback)(dummy =>
     {
         byte[] bytes = e.Message.GetBytes();
         Logger.Log(string.Format("Receiving SysEx of size {0}", (object)bytes.Length));
         Logger.Log(bytes);
         Form1.m_CurrentPatch.DecodeSysexData(ref bytes);
     }), (object)null);
 }
예제 #9
0
    protected virtual void OnSysExMessageReceived(SysExMessageEventArgs e)
    {
        EventHandler <SysExMessageEventArgs> handler = SysExMessageReceived;

        if (handler != null)
        {
            context.Post(delegate(object dummy)
            {
                handler(this, e);
            }, null);
        }
    }
예제 #10
0
        /// <summary>
        /// Sysex messages received
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void HandleSysExMessageReceived(object sender, SysExMessageEventArgs e)
        {
            context.Post(delegate(object dummy)
            {
                string result = "\n\n";;

                foreach (byte b in e.Message)
                {
                    result += string.Format("{0:X2} ", b);
                }
                sysExRichTextBox.Text += result;
            }, null);
        }
예제 #11
0
        public void HandleSysExMessageReceived(object sender, SysExMessageEventArgs e)
        {
            MIDIInterpreterInstance.context.Post(delegate(object dummy)
            {
                string result = "\n\n";;

                foreach (byte b in e.Message)
                {
                    result += string.Format("{0:X2} ", b);
                }

                sysExRichTextBox.Items.Add(result);
            }, null);
        }
 void inDevice_SysExMessageReceived(object sender, SysExMessageEventArgs e)
 {
     if (InvokeRequired)
     {
         BeginInvoke(new MethodInvoker(delegate
         {
             CheckInstrumentNote(e);
         }));
     }
     else
     {
         CheckInstrumentNote(e);
     }
 }
 void midiPlaybackSequencer_SysExMessagePlayed(object sender, SysExMessageEventArgs e)
 {
     if (InvokeRequired)
     {
         BeginInvoke(new MethodInvoker(delegate
         {
             OnSysex(e);
         }));
     }
     else
     {
         OnSysex(e);
     }
 }
예제 #14
0
        private void HandleSysExMessageReceived(object sender, SysExMessageEventArgs e)
        {
            InputDevice id = (InputDevice)sender;

            MidiRoutes[id.DeviceID].SendMessages(om, e.Message);
            if (debug)
            {
                Console.Write("SysEx: " + e.Message.SysExType + " ");
                for (int i = 0; i < e.Message.Length; i++)
                {
                    Console.Write("{0:X} ", e.Message[i]);
                }
                Console.WriteLine();
            }
        }
예제 #15
0
        private void HandleSysExMessage(object sender, SysExMessageEventArgs e)
        {
            if (!DataResponseMessage.TryParse(e.Message, out var response))
            {
                AddUnconsumedMessage();
                return;
            }
            if (response.DeviceId != DeviceId || response.ModelId != ModelId)
            {
                AddUnconsumedMessage();
                return;
            }
            LinkedList <TaskCompletionSource <byte[]> > sourcesToComplete = new LinkedList <TaskCompletionSource <byte[]> >();

            lock (sync)
            {
                var node = consumers.First;
                while (node != null)
                {
                    var consumer = node.Value;
                    if (consumer.ExpectedAddress == response.Address && consumer.ExpectedSize == response.Length)
                    {
                        sourcesToComplete.AddLast(consumer.TaskCompletionSource);
                        consumers.Remove(node);
                    }
                    node = node.Next;
                }
            }
            foreach (var source in sourcesToComplete)
            {
                source.TrySetResult(response.Data);
            }
            if (sourcesToComplete.Count == 0)
            {
                UnconsumedMessageHandler?.Invoke(this, response);
                AddUnconsumedMessage();
            }

            void AddUnconsumedMessage()
            {
                // TODO: Limit the buffer size.
                lock (sync)
                {
                    unconsumedMessages.AddLast(e.Message);
                }
            }
        }
예제 #16
0
        /// <summary>
        ///     Callback called when data dump is received from device
        /// </summary>
        private void OnSysExMessageReceived(object sender, SysExMessageEventArgs e)
        {
            _timer.Stop();

            _device.StopRecording();
            _device.Dispose();

            var actualLength = e.Message.Length - SysExUtils.DumpPaddingSize;

            if (actualLength != ExpectedDumpLength)
            {
                throw new InvalidDumpSizeException(ExpectedDumpLength, actualLength);
            }

            _logger.Receive("Received Patch");

            DataDumpReceived?.Invoke(this, new AnalogPatchDumpReceivedEventArgs(new Patch(e.Message)));
        }
예제 #17
0
        /// <summary>
        /// Sysex messages received
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void HandleSysExMessageReceived(object sender, SysExMessageEventArgs e)
        {
            context.Post(delegate(object dummy)
            {
                int ticks = GetTicks();

                string result = "\n\n";;
                foreach (byte b in e.Message)
                {
                    result += string.Format("{0:X2} ", b);
                }

                sysExRichTextBox.Text += result;

                // insert event
                SysExMessage SMsg = new SysExMessage(e.Message.GetBytes());
                track1.Insert(ticks, SMsg);
            }, null);
        }
예제 #18
0
        public string GetDetail()
        {
            string res = "";

            if (RawState is ChannelMessageEventArgs)
            {
                ChannelMessageEventArgs msg = (ChannelMessageEventArgs)RawState;
                res += "MessageType: " + msg.Message.MessageType.ToString() + "\t";
                res += "Command: " + msg.Message.Command.ToString() + "\t";
                res += "Channel: " + msg.Message.MidiChannel.ToString() + "\t";
                res += "Note: " + msg.Message.Data1.ToString() + "\t";
                res += "Velocity: " + msg.Message.Data2.ToString();
            }
            if (RawState is SysExMessageEventArgs)
            {
                SysExMessageEventArgs msg = (SysExMessageEventArgs)RawState;
                res += "MessageType: " + msg.Message.MessageType.ToString() + "\t";
                res += "SysExType: " + msg.Message.SysExType.ToString() + "\t";
                res += "RawBytes(Hex): ";
                foreach (byte b in msg.Message)
                {
                    res += string.Format("{0:X2} ", b);
                }
            }

            if (RawState is SysCommonMessageEventArgs)
            {
                SysCommonMessageEventArgs msg = (SysCommonMessageEventArgs)RawState;
                res += "MessageType: " + msg.Message.MessageType.ToString() + "\t";
                res += "SysCommonType: " + msg.Message.SysCommonType.ToString() + "\t";
                res += msg.Message.Data1.ToString() + msg.Message.Data2.ToString();
                res += msg.Message.Data2.ToString();
            }

            if (RawState is SysRealtimeMessageEventArgs)
            {
                SysRealtimeMessageEventArgs msg = (SysRealtimeMessageEventArgs)RawState;
                res += msg.Message.MessageType.ToString() + "\t";
                res += "SysRealtimeType: " + msg.Message.SysRealtimeType.ToString();
            }

            return(res);
        }
예제 #19
0
        private void HandleSysExMessage(object sender, SysExMessageEventArgs e)
        {
            var message = e.Message;
            var data    = new byte[message.Length];

            message.CopyTo(data, 0);

            Console.WriteLine(BitConverter.ToString(data));

            if (message.Length == 15 &&
                message[3] == 0x06 && // General information
                message[4] == 0x02 && // Identity reply
                message[5] == 0x41)   // Roland
            {
                int deviceId         = message[2] + 1;
                int familyCode       = message[6] + (message[7] << 8);
                int familyNumberCode = message[8] + (message[9] << 8);
                int revision         = message[10] + (message[11] << 8) + (message[12] << 16) + (message[13] << 24);
                var response         = new IdentityResponse(deviceId, familyCode, familyNumberCode, revision);
                IdentityReceived?.Invoke(response);
            }
        }
예제 #20
0
 void m_Sequencer_SysExMessagePlayed(object sender, SysExMessageEventArgs e)
 {
 }
예제 #21
0
 private static void Sequencer_SysExMessagePlayed(object sender, SysExMessageEventArgs e)
 {
     Console.WriteLine("SysExMessagePlayed");
 }
예제 #22
0
 private void InputDevice_SysExMessageReceived(object sender, SysExMessageEventArgs e)
 {
     Console.WriteLine(e);
 }
예제 #23
0
        /// <summary>
        ///     Callback called when data dump is received from device
        /// </summary>
        private void OnSysExMessageReceived(object sender, SysExMessageEventArgs e)
        {
            switch (e.Message.Length)
            {
            case ExpectedCommonDumpLength + SysExUtils.DumpPaddingSize:
                _logger.Receive("Received Patch.Common");
                _commonDump = e.Message;
                break;

            case ExpectedModifiersDumpLength + SysExUtils.DumpPaddingSize:
                _logger.Receive("Received Patch.Modifiers");
                _modifiersDump = e.Message;
                break;

            case ExpectedPartialDumpLength + SysExUtils.DumpPaddingSize:
            {
                // At 11 byte we have partial number, so we check value at that byte
                var partial = (DigitalPartial)e.Message[10];

                switch (partial)
                {
                case DigitalPartial.First:
                    _logger.Receive($"Received Patch.PartialOne");
                    _partialsDump[0] = e.Message;
                    break;

                case DigitalPartial.Second:
                    _logger.Receive($"Received Patch.PartialTwo");
                    _partialsDump[1] = e.Message;
                    break;

                case DigitalPartial.Third:
                    _logger.Receive($"Received Patch.PartialThree");
                    _partialsDump[2] = e.Message;
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(partial), partial, null);
                }

                break;
            }

            default:
                throw new InvalidDumpSizeException();
            }

            _dumpCount++;

            if (_dumpCount == 5)
            {
                _timer.Stop();

                _device.StopRecording();
                _device.Dispose();

                DataDumpReceived?.Invoke(this, new DigitalPatchDumpReceivedEventArgs(
                                             new Patch(_commonDump, _partialsDump, _modifiersDump)
                                             ));
            }
        }
예제 #24
0
 private void HandleSysExMessagePlayed(object sender, SysExMessageEventArgs e)
 {
 }
예제 #25
0
 private void InputDevice_SysExMessageReceived(object sender, SysExMessageEventArgs e)
 {
     //MessagesTextBox.Text += $"SysEX: {e.Message.MessageType}\n";
 }
        void CheckInstrumentNote(SysExMessageEventArgs e)
        {
            if (labelMidiInputDeviceState.Text == "None Connected")
            {
                if (e.Message.Length == 18)
                {
                    if (e.Message.GetBytes()[3] == 8)
                    {
                        labelMidiInputDeviceState.Text = "Squier";
                    }
                    else if (e.Message.GetBytes()[3] == 0x0A)
                    {
                        labelMidiInputDeviceState.Text = "Mustang";
                    }
                }
            }
            else
            {
                TextBox[] tb = GetNoteBoxes();

                if (e.Message.Length == 18)
                {
                    if (checkBoxEnableClearTimer.Checked)
                    {
                        resetCount--;
                        if (resetCount <= 0)
                        {
                            bool allzero = true;
                            for (int x = 0; x < 6; x++)
                            {
                                if (tb[x].Text.Length > 0 &&
                                    tb[x].Text != "0")
                                {
                                    allzero = false;
                                    break;
                                }
                            }
                            if (allzero)
                            {
                                foreach (var tbox in tb)
                                {
                                    tbox.Text = "";
                                }
                                resetCount = resetTime;
                            }
                        }
                    }
                }
                if (e.Message.Length == 8)
                {
                    resetCount = resetTime;

                    byte[] b = e.Message.GetBytes();

                    int noteString = b[5] - 1;

                    byte[] offsets = new byte[] { 0x40, 0x3B, 0x37, 0x32, 0x2D, 0x28 };

                    bool isStrum = b[4] == 5;


                    if (isStrum)
                    {
                        var dtNowStrum = DateTime.Now;

                        var dtStrumTime = (dtNowStrum - dtLastStrum);


                        if (checkChordMode.Checked == false ||
                            (checkChordMode.Checked == true && checkBoxChordStrum.Checked == true))
                        {
                            if (!checkBoxChordStrum.Checked)
                            {
                                ClearNoteBoxes();
                                ClearHoldBoxes();
                            }
                        }


                        tb[noteString].Text = (guitar6Notes[noteString]).ToString();
                        if (checkTwoNotePowerChord.Checked || checkThreeNotePowerChord.Checked)
                        {
                            if (checkTwoNotePowerChord.Checked)
                            {
                                if (noteString > 0)
                                {
                                    int noteP1 = tb[noteString].Text.ToInt();
                                    if (!noteP1.IsNull())
                                    {
                                        int offset = 2;
                                        if (noteString == 3)
                                        {
                                            offset = 3;
                                        }
                                        tb[noteString - 1].Text = (noteP1 + offset).ToString();
                                    }
                                }
                            }
                            if (checkThreeNotePowerChord.Checked)
                            {
                                if (noteString > 1)
                                {
                                    int noteP1 = tb[noteString].Text.ToInt();
                                    if (!noteP1.IsNull())
                                    {
                                        int offset = 2;
                                        if (noteString == 3 || noteString == 2)
                                        {
                                            offset = 3;
                                        }
                                        tb[noteString - 2].Text = (noteP1 + offset).ToString();
                                    }
                                }
                            }
                        }

                        if (checkChordMode.Checked == false ||
                            (checkChordMode.Checked == true && checkBoxChordStrum.Checked == true))
                        {
                            if (checkBoxChordStrum.Checked == true)
                            {
                                GetHoldBoxes()[noteString].Text = tb[noteString].Text;
                            }
                            else
                            {
                                PlaceHeldNotesIntoHoldBoxes();
                            }
                        }
                        else
                        {
                            PlaceHeldNotesIntoHoldBoxes();
                        }

                        if (checkRealtimeNotes.Checked)
                        {
                            if ((checkChordMode.Checked == true && checkBoxChordStrum.Checked == true) == false)
                            {
                                EditorPro.BackupSequence();
                                PlaceNote(SelectNextEnum.UseConfiguration);
                                ClearNoteBoxes();
                                ClearHoldBoxes();
                            }
                        }

                        if (checkBoxPlayMidiStrum.Checked)
                        {
                            if (dtStrumTime.TotalMilliseconds > 10)
                            {
                                PlayHoldBoxMidi();
                            }
                        }

                        dtLastStrum = DateTime.Now;
                    }
                    else
                    {
                        guitar6Notes[noteString] = b[6] - offsets[noteString];
                        tb[noteString].Text      = (guitar6Notes[noteString]).ToString();
                    }


                    if (checkBoxClearIfNoFrets.Checked == true)
                    {
                        bool allzero = true;
                        for (int x = 0; x < 6; x++)
                        {
                            if (tb[x].Text.Length > 0 &&
                                tb[x].Text != "0")
                            {
                                allzero = false;
                                break;
                            }
                        }
                        if (allzero)
                        {
                            StopHoldBoxMidi();
                            ClearHoldBoxes();
                            ClearNoteBoxes();
                        }
                    }
                }
            }
        }
예제 #27
0
 private void HandleSysExMessagePlayed(object sender, SysExMessageEventArgs e)
 {
     //     outDevice.Send(e.Message); Sometimes causes an exception to be thrown because the output device is overloaded.
 }
예제 #28
0
 private static void Indevice_SysExMessageReceived(object sender, SysExMessageEventArgs e)
 {
     SendEncoded(e.Message, "sysex");
     //  client.Send(e.Message.MessageType.ToString());
 }