Exemplo n.º 1
0
        private void onMessageRecevied(object sender, MidiReceivedEventArgs e)
        {
            long time = CSoundManager.rc演奏用タイマ.nシステム時刻ms;              // lock前に取得。演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。

            int dev = int.Parse((sender as IMidiInput).Details.Id);

            lock (this.objMidiIn排他用)
            {
                if ((this.listInputDevices != null) && (this.listInputDevices.Count != 0))
                {
                    foreach (IInputDevice device in this.listInputDevices)
                    {
                        CInputMIDI tmidi = device as CInputMIDI;
                        if ((tmidi != null) && (tmidi.ID == dev))
                        {
                            for (int i = 0; i < e.Length / 3; i++)
                            {
                                tmidi.tメッセージからMIDI信号のみ受信(dev, time, e.Data, i);
                            }
                            break;
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
 private static void Input_MessageReceived(object sender, MidiReceivedEventArgs e)
 {
     if (e.Data.Length > 2)
     {
         //Console.WriteLine($"{e.Data[0].ToString("x2")} - {e.Data[1].ToString("x2")} - {e.Data[2].ToString("x2")}");
     }
 }
Exemplo n.º 3
0
        private void OnMessageReceived(object sender, MidiReceivedEventArgs args)
        {
            var data = args.Length == args.Data.Length && args.Start == 0
                ? args.Data : args.Data.Skip(args.Start).Take(args.Length).ToArray();
            var message = new Model.Midi.MidiMessage(data, args.Timestamp);

            MessageReceived?.Invoke(this, message);
        }
Exemplo n.º 4
0
        private void ConsumeMidiEvent(object?sender, MidiReceivedEventArgs message)
        {
            var converted = ConvertToMidiEvent(message);

            if (converted != null)
            {
                _eventBus.Publish(converted);
            }
        }
Exemplo n.º 5
0
 private void MidiInput_MessageReceived(object sender, MidiReceivedEventArgs e)
 {
     if (FilterMidiMsg(e.Data))
     {
         vMixer.remoteSet = true;
         DecodeMsg(e.Data);
         //Just in case the message cannot be decoded, reset the flag
         vMixer.remoteSet = false;
     }
 }
Exemplo n.º 6
0
        void ProcessMessageReceived(object sender, MidiReceivedEventArgs e)
        {
            var messageType = (MessageType)(e.Data[0] >> 4);

            // managed-midi breaks on clock message through Port.Send
            if (messageType != MessageType.Clock)
            {
                MessageReceived.Invoke(e);
            }

            // Extract the information from the MIDI byte array,
            // and invoke the respective callbacks

            switch (messageType)
            {
            case MessageType.NoteOn:
            {
                var noteNumber = (int)e.Data[1];
                var velocity   = (int)e.Data[2];
                if (velocity != 0)
                {
                    NoteOn.Invoke(noteNumber, velocity);
                }
                else
                {
                    NoteOff.Invoke(noteNumber);
                }
                break;
            }

            case MessageType.NoteOff:
            {
                var noteNumber = (int)e.Data[1];
                NoteOff.Invoke(noteNumber);
                break;
            }

            case MessageType.ControlChange:
            {
                var ccNumber = (int)e.Data[1];
                var value    = (int)e.Data[2];
                ControlChange.Invoke(ccNumber, value);
                break;
            }

            case MessageType.Clock:
            {
                CalculateMidiClock(e.Timestamp);
                break;
            }

            default: break;
            }
        }
Exemplo n.º 7
0
        //private static void PatchChange(int value, int channel, int device = 0)
        //{

        //    MidiOutDevice(device).Send(MidiMessage.ChangePatch(value, channel).RawData);

        //}
        //public static void CCOut(string allparams)
        //{
        //    string[] words = allparams.Split('|');
        //    new Thread(() =>
        //    {
        //        Thread.CurrentThread.IsBackground = true;
        //        try
        //        {
        //            CCOut(Convert.ToInt16(words[0]), Convert.ToInt16(words[1]), Convert.ToInt16(words[2]),Midi.MidiOutDeviceNumber);
        //        }
        //        catch (Exception ex)
        //        {

        //              Debug.WriteLine("CCOut:", ex);
        //        }
        //    }).Start();
        //}
        //public static void NoteOut(string allparams)
        //{
        //    string[] words = allparams.Split('|');
        //    new Thread(() =>
        //    {
        //        Thread.CurrentThread.IsBackground = true;
        //        Thread.CurrentThread.Priority = ThreadPriority.Highest;
        //        try
        //        {
        //            int n, v, c, l;
        //            if (int.TryParse(words[0], out n) && int.TryParse(words[1], out v) && int.TryParse(words[2], out c) && int.TryParse(words[3], out l))
        //            {
        //                NoteOut(n,v,c,l, Midi.MidiOutDeviceNumber);
        //            }
        //            else
        //            {
        //                 Debug.WriteLine("NoteOut:","Failed to input:"+ allparams);
        //            }
        //        }
        //        catch (Exception ex)
        //        {

        //              Debug.WriteLine("NoteOut:", ex);
        //        }
        //    }).Start();
        //}
        //public static void PatchChange(string allparams)
        //{
        //    string[] words = allparams.Split('|');
        //    new Thread(() =>
        //    {
        //        Thread.CurrentThread.IsBackground = true;
        //        try
        //        {
        //            PatchChange(Convert.ToInt16(words[0]), Convert.ToInt16(words[1]), Midi.MidiOutDeviceNumber);
        //        }
        //        catch (Exception ex)
        //        {

        //             Debug.WriteLine("PatchChange:", ex);
        //        }
        //    }).Start();
        //}

        private static void Event_Received(object sender, MidiReceivedEventArgs eargs)
        {
            MidiEvent e = MidiEvent.Convert(eargs.Data, 0, eargs.Length).First();

            Debug.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(e, Newtonsoft.Json.Formatting.Indented));
            Debug.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(MidiEvent.Convert(eargs.Data, 0, eargs.Length).First(), Newtonsoft.Json.Formatting.Indented));
            try
            {
                //// Exit if the MidiEvent is null or is the AutoSensing command code
                if (e.EventType == MidiEvent.ActiveSense)
                {
                    return;
                }
                else if (e.EventType == MidiEvent.CC)
                {
                    //TODO: value is wrong
                    Midi.SetCCValue(e.Channel, (int)e.Msb, (int)e.Lsb);
                }
                //else if ( e.EventType == MidiEvent.TimingClock)
                //{
                //    rawticks++;
                //    if (rawticks % tickdivider == 0)
                //    {
                //    //    if (clockrunning )
                //        {
                //            Combustion.Tick();
                //        }
                //    }
                //}
                //else if ( e.EventType == MidiEvent.StartSequence)
                //{
                //    rawticks = 0;
                //    clockrunning = true;
                //    Combustion.Start();
                //}
                //else if ( e.EventType == MidiEvent.StopSequence)
                //{
                //    clockrunning = false;

                //    Combustion.Stop();
                //}
                else
                {
                    Debug.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(e, Newtonsoft.Json.Formatting.Indented));
                    Debug.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(MidiEvent.Convert(eargs.Data, 0, eargs.Length).First(), Newtonsoft.Json.Formatting.Indented));
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }
Exemplo n.º 8
0
 public AlsaMidiInput(AlsaSequencer seq, AlsaMidiPortDetails appPort, AlsaMidiPortDetails sourcePort)
 {
     this.seq  = seq;
     this.port = appPort;
     byte [] buffer = new byte [0x200];
     seq.StartListening(port.PortInfo.Port, buffer, (buf, start, len) => {
         var args = new MidiReceivedEventArgs()
         {
             Data = buf, Start = start, Length = len, Timestamp = 0
         };
         MessageReceived(this, args);
     });
 }
Exemplo n.º 9
0
 void OnMidiData(object a, MidiReceivedEventArgs midi)
 {
     // If the data is for this control
     if (IsForMe(midi.Data))
     {
         if (midi.Data[0] == MidiEvent.NoteOn)
         {
             NoteOn(midi.Data);
         }
         if (midi.Data[0] == MidiEvent.NoteOff)
         {
             NoteOff(midi.Data);
         }
     }
 }
Exemplo n.º 10
0
        private void Input_MessageReceived(object sender, MidiReceivedEventArgs e)
        {
            var response = new MidiResponse(e.Data);

            if (_responseHandlers.TryRemove(e.Timestamp, out var handler))
            {
                handler(response);
            }


            if (MidiResponse != null)
            {
                MidiResponse(this, new MidiResponseReceivedEventArgs(response));
            }
        }
Exemplo n.º 11
0
    void OnMidiData(object a, MidiReceivedEventArgs midi)
    {
        // If the data is for this control
        if (IsForMe(midi.Data))
        {
            // IEncoder is being rotated upwards
            if (IsEncoderUp(midi.Data))
            {
                OnEncoderUp(midi.Data);
            }

            // Encoder is being rotated downwards
            if (IsEncoderDown(midi.Data))
            {
                OnEncoderDown(midi.Data);
            }
        }
    }
Exemplo n.º 12
0
        private void onMidiMessageReceived(object sender, MidiReceivedEventArgs e)
        {
            Debug.Assert(sender is IMidiInput);
            var senderId = ((IMidiInput)sender).Details.Id;

            try
            {
                for (int i = e.Start; i < e.Length;)
                {
                    readEvent(e.Data, senderId, ref i, out byte eventType, out byte key, out byte velocity);
                    dispatchEvent(eventType, key, velocity);
                }
            }
            catch (Exception exception)
            {
                var dataString = string.Join("-", e.Data.Select(b => b.ToString("X2")));
                Logger.Error(exception, $"An exception occurred while reading MIDI data from sender {senderId}: {dataString}");
            }
        }
        private void OnMidiMessageReceived(object sender, MidiReceivedEventArgs e)
        {
            if (Output == null)
            {
                return;
            }

            if (Calculator != null && e.Data[0] == MidiEvent.NoteOn)
            {
                var note     = e.Data[1];
                var velocity = e.Data[2];
                var newValue = Calculator.Calculate(velocity);

                Output.Send(new byte[] { MidiEvent.NoteOn, note, Convert.ToByte(newValue) }, e.Start, e.Length, e.Timestamp);
                OnVelocityConverted?.Invoke(velocity, newValue);
            }
            else
            {
                Output.Send(e.Data, e.Start, e.Length, e.Timestamp);
            }
        }
Exemplo n.º 14
0
        private void Message_Received(object sender, MidiReceivedEventArgs eargs)
        {
            MidiEvent e = MidiEvent.Convert(eargs.Data, 0, eargs.Length).First();

            if (e.EventType == MidiEvent.CC)
            {
                int CC    = (int)e.Msb;
                int value = (int)e.Lsb;
                if ((CC >= 48) && (CC <= 55))
                {
                    Faders[CC - 48] = value;
                }
                return;
            }



            int NoteNumber = (int)e.Msb;

            if (NoteNumber >= 84 && NoteNumber <= 88 && ((int)CurrentPageType) != (NoteNumber - 84))
            {
                pagetypehistory.Add(CurrentPageType);
                CurrentPageType = (PageType)(NoteNumber - 84);
            }

            else if (shiftdown && (NoteNumber == 66 || NoteNumber == 67) && e.EventType == MidiEvent.NoteOn)
            {
                pagetypehistory.Add(CurrentPageType);
                if (NoteNumber == 67)
                {
                    CurrentPageType = Enum.GetValues(typeof(PageType)).Cast <PageType>().Where(ze => (int)ze > (int)CurrentPageType).OrderBy(ze => ze).FirstOrDefault();
                }
                else if (NoteNumber == 67)
                {
                    CurrentPageType = Enum.GetValues(typeof(PageType)).Cast <PageType>().Where(ze => (int)ze < (int)CurrentPageType).OrderByDescending(ze => ze).FirstOrDefault();
                }
            }
            else if (NoteNumber == 98 & (e.EventType == MidiEvent.NoteOn || e.EventType == MidiEvent.NoteOff))
            {
                shiftdown = !shiftdown;
            }
            else if (CurrentPageType == PageType.Seq64 && e.EventType == MidiEvent.NoteOn)
            {
                if (NoteNumber <= 63)
                {
                    if (shiftdown)
                    {
                        Seq64Length = NoteNumber + 1;
                    }
                    else
                    {
                        Seq64[NoteNumber] = !Seq64[NoteNumber];
                    }
                }
                if (NoteNumber == 89)
                {
                    foreach (var x in Seq64.Keys.ToList())
                    {
                        Seq64[x] = false;
                    }
                }
            }
            else if (CurrentPageType == PageType.Clip && e.EventType == MidiEvent.NoteOn)
            {
                if (NoteNumber <= 63)
                {
                    Clips[NoteNumber] = !Clips[NoteNumber];
                }
                if (NoteNumber == 89)
                {
                    foreach (var x in Clips.Keys.ToList())
                    {
                        Clips[x] = false;
                    }
                }
            }
            else if (CurrentPageType == PageType.Seq8a && e.EventType == MidiEvent.NoteOn)
            {
                if (NoteNumber <= 63)
                {
                    Seq8a[(NoteNumber - NoteNumber % 8) / 8][NoteNumber % 8] = !Seq8a[(NoteNumber - NoteNumber % 8) / 8][NoteNumber % 8];
                }
                if (NoteNumber == 89)
                {
                    foreach (var x in Seq8a.Keys.ToList())
                    {
                        foreach (var y in Seq8a[x].Keys.ToList())
                        {
                            Seq8a[x][y] = false;
                        }
                    }
                }
            }
            else if (CurrentPageType == PageType.Seq8b && e.EventType == MidiEvent.NoteOn)
            {
                if (NoteNumber <= 63)
                {
                    Seq8b[(NoteNumber - NoteNumber % 8) / 8][NoteNumber % 8] = !Seq8b[(NoteNumber - NoteNumber % 8) / 8][NoteNumber % 8];
                }
                if (NoteNumber == 89)
                {
                    foreach (var x in Seq8b.Keys.ToList())
                    {
                        foreach (var y in Seq8b[x].Keys.ToList())
                        {
                            Seq8b[x][y] = false;
                        }
                    }
                }
            }
            else if (CurrentPageType == PageType.Chord && e.EventType == MidiEvent.NoteOn)
            {
                if (NoteNumber <= 63)
                {
                    if (Chords[(NoteNumber - NoteNumber % 8) / 8].Contains(NoteNumber % 8))
                    {
                        Chords[(NoteNumber - NoteNumber % 8) / 8].Remove(NoteNumber % 8);
                    }
                    else
                    {
                        Chords[(NoteNumber - NoteNumber % 8) / 8].Add(NoteNumber % 8);
                    }
                }
                if (NoteNumber == 89)
                {
                    foreach (var x in Chords.Keys.ToList())
                    {
                        Chords[x].Clear();
                    }
                }
            }
            DrawPage();
        }
Exemplo n.º 15
0
 private static void Input_MessageReceived(object sender, MidiReceivedEventArgs e)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 16
0
 private static RawMidiMessage ConvertMessage(MidiReceivedEventArgs args) =>
 args.Length == args.Data.Length && args.Start == 0
     ? new RawMidiMessage(args.Data)
     : new RawMidiMessage(args.Data.Skip(args.Start).Take(args.Length).ToArray());
Exemplo n.º 17
0
 public void UpdateState(MidiReceivedEventArgs args)
 {
     rawData = args.Data;
 }
Exemplo n.º 18
0
        private void Input_MessageReceived(object sender, MidiReceivedEventArgs e)
        {
            if (e.Length != 3)
            {
                return;
            }

            var x = e.Data[0];
            var y = e.Data[1];
            var z = e.Data[2];

            if (x == 0x90)
            {
                if (y < 0x18)
                {
                    var channel = y & 0x07;
                    var mode    = (y & 0xFC) >> 3;

                    if (mode < 3 && z != 0)
                    {
                        var value = (Mode)(mode + 1);

                        Channels[channel].Mode = (Channels[channel].Mode == value) ? 0 : value;
                    }
                    if (z == 0x7F)
                    {
                        Channels[channel].ButtonPresses++;
                    }
                }

                Backward = (y == 0x5B && z == 0x7F);
                Forward  = (y == 0x5C && z == 0x7F);
                Stop     = (y == 0x5D && z == 0x7F);
                Play     = (y == 0x5E && z == 0x7F);
                Rec      = (y == 0x5F && z == 0x7F);
            }
            else if (x == 0xb0)
            {
                var channel = y & 0x07;
                if (z == 0x3F)
                {
                    Channels[channel].Select = 127;
                }
                else if (z == 0x7F)
                {
                    Channels[channel].Select = 0;
                }
                else if ((z & 0x40) > 0)
                {
                    Channels[channel].Select -= z & 0x03;
                }
                else
                {
                    Channels[channel].Select += z & 0x03;
                }

                Channels[channel].Select = Math.Max(Math.Min(Channels[channel].Select, 127), 0);
            }
            else if ((x & 0xe0) > 0)
            {
                var channel   = x & 0x07;
                var intensity = y;
                Channels[channel].Intensity = intensity;
            }

            Console.SetCursorPosition(0, 0);

            Console.WriteLine($"{x:X2} {y:X2} {z:X2}.");
            Console.WriteLine();

            Console.WriteLine("  M   | I   IL  | S   SL  | ");

            for (var i = 0; i < 8; i++)
            {
                Console.WriteLine(
                    $"- " +
                    $"{((int)Channels[i].Mode):000} | " +
                    $"{Channels[i].Intensity:000} " +
                    $"{Channels[i].IntensityLog:000} | " +
                    $"{Channels[i].Select:000} " +
                    $"{Channels[i].SelectLog:000} | " +
                    $"{Channels[i].ButtonPresses}" +
                    $"   ");
            }

            Console.WriteLine();
            Console.WriteLine(Play ? "Play" : "    ");
            Console.WriteLine(Rec ? "Rec" : "    ");
            Console.WriteLine(Stop ? "Stop" : "    ");
        }
Exemplo n.º 19
0
        private object?ConvertToMidiEvent(MidiReceivedEventArgs message)
        {
            var data = message.Data;

            if (!data.Any())
            {
                return(null);
            }

            switch (data[0])
            {
            case MidiEvent.NoteOn:
            {
                var keyIndex = data[1];
                var velocity = data[2];

                // For key up, sometimes NoteOff is not
                // sent, but instead NoteOn with velocity = 0
                if (velocity == 0)
                {
                    return(new KeyReleased(keyIndex));
                }
                return(new KeyPressed(keyIndex, velocity));
            }

            case MidiEvent.NoteOff:
            {
                var keyIndex = data[1];
                return(new KeyReleased(keyIndex));
            }

            // Helpful: https://www.midi.org/specifications-old/item/table-1-summary-of-midi-message
            case MidiEvent.CC:
            {
                var pedalId  = data[1];
                var position = data[2];

                switch (pedalId)
                {
                case 64:
                    if (position > 0)
                    {
                        return(new SustainPedalPressed());
                    }
                    return(new SustainPedalReleased());

                case 66:
                    if (position > 0)
                    {
                        return(new SostenutoPedalPressed());
                    }
                    return(new SostenutoPedalReleased());

                case 67:
                    if (position > 0)
                    {
                        return(new SoftPedalPressed());
                    }
                    return(new SoftPedalReleased());
                }

                break;
            }
            }

            // No other events, return null
            return(null);
        }