Exemple #1
0
        private void AddBinding(Binding binding, int deviceIndex)
        {
            var innerBindingKey = new InnerBindingKey(
                deviceIndex,
                binding.key.Item1,
                binding.key.Item2
                );

            if (!this.bindings.ContainsKey(innerBindingKey))
            {
                this.bindings.Add(innerBindingKey, new List <Binding>());
            }
            this.bindings[innerBindingKey].Add(binding);
        }
Exemple #2
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
                        );
                }
            }
        }