Exemple #1
0
        public void OperatorUpdate()
        {
            if (!this.config.midiInputInSeparateThread)
            {
                this.Update();
            }

            int numMessages = this.buffer.Count;
            var commands    = new MidiCommand[numMessages];

            for (int i = 0; i < numMessages; i++)
            {
                bool result = this.buffer.TryDequeue(out commands[i]);
                if (!result)
                {
                    throw new System.Exception("Someone else is dequeueing!");
                }
            }

            this.commandsSinceLastTick = commands;
        }
Exemple #2
0
        private void ChannelMessageReceived(
      object sender,
      ChannelMessageEventArgs e
    )
        {
            //System.Diagnostics.Debug.WriteLine(
              //  "MIDI channel message on channel " + e.Message.MidiChannel +
              //  " with command " + e.Message.Command +
              //  ", data1 " + e.Message.Data1 +
              //  ", data2 " + e.Message.Data2
              //);
              MidiCommand command;
              if (e.Message.Command == ChannelCommand.Controller) {
            double value = (double)e.Message.Data2 / 127;
            command = new MidiCommand() {
              type = MidiCommandType.Knob,
              index = e.Message.Data1,
              value = value,
            };
              } else if (
            e.Message.Command == ChannelCommand.NoteOn ||
            e.Message.Command == ChannelCommand.NoteOff
              ) {
            double value = (double)e.Message.Data2 / 127;
            command = new MidiCommand() {
              type = MidiCommandType.Note,
              index = e.Message.Data1,
              value = value,
            };
              } else if (e.Message.Command == ChannelCommand.ProgramChange) {
            command = new MidiCommand() {
              type = MidiCommandType.Program,
              index = e.Message.Data1,
            };
              } else {
            return;
              }
              this.buffer.Enqueue(command);

              List<Binding> triggered = new List<Binding>();
              BindingKey genericKey = new BindingKey(command.type, -1);
              if (this.bindings.ContainsKey(genericKey)) {
            triggered.AddRange(this.bindings[genericKey]);
              }
              BindingKey key = new BindingKey(command.type, command.index);
              if (this.bindings.ContainsKey(key)) {
            triggered.AddRange(this.bindings[key]);
              }
              foreach (Binding binding in triggered) {
            binding.callback(command.index, command.value);
              }
        }
Exemple #3
0
        private void ChannelMessageReceived(
            int deviceIndex,
            object sender,
            ChannelMessageEventArgs e
            )
        {
            MidiCommand command;

            if (e.Message.Command == ChannelCommand.Controller)
            {
                double value = (double)e.Message.Data2 / 127;
                command = new MidiCommand()
                {
                    deviceIndex = deviceIndex,
                    type        = MidiCommandType.Knob,
                    index       = e.Message.Data1,
                    value       = value,
                };
                this.config.midiLog.Append(
                    "MIDI message on " + MidiInput.GetDeviceName(deviceIndex) +
                    " channel " + e.Message.MidiChannel +
                    " updating knob #" + e.Message.Data1 +
                    " to value " + value
                    );
            }
            else if (
                e.Message.Command == ChannelCommand.NoteOn ||
                e.Message.Command == ChannelCommand.NoteOff
                )
            {
                double value = (double)e.Message.Data2 / 127;
                command = new MidiCommand()
                {
                    deviceIndex = deviceIndex,
                    type        = MidiCommandType.Note,
                    index       = e.Message.Data1,
                    value       = value,
                };
                var onOrOff = e.Message.Command == ChannelCommand.NoteOn ? "ON" : "OFF";
                this.config.midiLog.Append(
                    "MIDI message on " + MidiInput.GetDeviceName(deviceIndex) +
                    " channel " + e.Message.MidiChannel +
                    " updating note #" + e.Message.Data1 +
                    " to " + onOrOff +
                    " with value " + value
                    );
            }
            else if (e.Message.Command == ChannelCommand.ProgramChange)
            {
                command = new MidiCommand()
                {
                    deviceIndex = deviceIndex,
                    type        = MidiCommandType.Program,
                    index       = e.Message.Data1,
                };
                this.config.midiLog.Append(
                    "MIDI message on " + MidiInput.GetDeviceName(deviceIndex) +
                    " channel " + e.Message.MidiChannel +
                    " updating program to #" + e.Message.Data1
                    );
            }
            else
            {
                return;
            }
            this.buffer.Enqueue(command);

            List <Binding> triggered  = new List <Binding>();
            var            genericKey = new InnerBindingKey(deviceIndex, command.type, -1);

            if (this.bindings.ContainsKey(genericKey))
            {
                triggered.AddRange(this.bindings[genericKey]);
            }
            var key = new InnerBindingKey(deviceIndex, command.type, command.index);

            if (this.bindings.ContainsKey(key))
            {
                triggered.AddRange(this.bindings[key]);
            }
            foreach (Binding binding in triggered)
            {
                string message = binding.callback(command.index, command.value);
                if (message != null)
                {
                    this.config.midiLog.Append(
                        "Binding \"" + binding.config.BindingName +
                        "\" triggered: " + message
                        );
                }
            }
        }
Exemple #4
0
        public void OperatorUpdate()
        {
            if (!this.config.midiInputInSeparateThread) {
            this.Update();
              }

              int numMessages = this.buffer.Count;
              if (numMessages == 0) {
            this.commandsSinceLastTick = new MidiCommand[0];
            return;
              }

              var commands = new MidiCommand[numMessages];
              for (int i = 0; i < numMessages; i++) {
            bool result = this.buffer.TryDequeue(out commands[i]);
            if (!result) {
              throw new System.Exception("Someone else is dequeueing!");
            }
              }

              this.commandsSinceLastTick = commands;
        }