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; }
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); } }
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 ); } } }
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; }