/// <summary> /// Reads a control change event from a MIDI stream /// </summary> /// <param name="br">Binary reader on the MIDI stream</param> public ControlChangeEvent(BinaryReader br) { byte c = br.ReadByte(); controllerValue = br.ReadByte(); if((c & 0x80) != 0) { // TODO: might be a follow-on throw new ApplicationException("Invalid controller"); } controller = (MidiController) c; if((controllerValue & 0x80) != 0) { throw new ApplicationException(String.Format("Invalid controllerValue {0} for controller {1}, Pos 0x{2:X}",controllerValue,controller,br.BaseStream.Position)); } }
/// <summary> /// Reads a control change event from a MIDI stream /// </summary> /// <param name="br">Binary reader on the MIDI stream</param> public ControlChangeEvent(BinaryReader br) { byte c = br.ReadByte(); controllerValue = br.ReadByte(); if ((c & 0x80) != 0) { // TODO: might be a follow-on throw new ApplicationException("Invalid controller"); } controller = (MidiController)c; if ((controllerValue & 0x80) != 0) { throw new ApplicationException(String.Format("Invalid controllerValue {0} for controller {1}, Pos 0x{2:X}", controllerValue, controller, br.BaseStream.Position)); } }
public static bool Write(bool overwrite) { string filename; if (overwrite && path != null) { filename = path; } else { Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog(); dlg.Filter = "CC Files (*.cc)|*.cc"; bool?result = dlg.ShowDialog(); if (result == false) { return(false); } filename = dlg.FileName; } string p = Path.ChangeExtension(filename, ".cc"); using (DataSet dataSet = new DataSet("Cuelist")) { dataSet.Tables.Add(GetSettingsTable()); dataSet.Tables.Add(CuelistCtrl.GetCueTable()); dataSet.Tables.Add(ScriptlistCtrl.GetScriptTable()); dataSet.Tables.Add(BeamerlistCtrl.GetBeamerTable()); dataSet.Tables.Add(MidiController.GetMidiMapTable()); try { dataSet.WriteXml(p); } catch (Exception e) { LogCtrl.Error(e.Message); DialogCtrl.Show(DialogType.ERROR, OptionType.OKCANCEL, "Error", "Couldn't write file!"); return(false); } } SetPath(p); CuelistCtrl.saved = true; RecentFilesCtrl.Add(p); LogCtrl.Status("Saved file: " + p); return(true); }
private void Window_Loaded(object sender, RoutedEventArgs e) { _deviceLocator = new MMDeviceLocator(); _midiController = new MidiController( ".\\nanoKONTROL2.controller", ".\\nanoKONTROL2.commands", new TraceLogger(), _deviceLocator); _midiController.ControlChanged += _midiController_ControlChanged; _controlGroups = new Dictionary <string, ControlGroupUserControl>() { { "Group 1", this.Group1 }, { "Group 2", this.Group2 }, { "Group 3", this.Group3 }, { "Group 4", this.Group4 }, { "Group 5", this.Group5 }, { "Group 6", this.Group6 }, { "Group 7", this.Group7 }, { "Group 8", this.Group8 } }; _midiController.Start(); }
// Update is called once per frame void Update() { if (handModel != null) { if (this.GetComponent <Collider>().bounds.Contains(handModel.GetPalmPosition())) { if (!handIsSet) { ControlHandTracker.getInstance().setControllingHandIsRight(!handModel.GetLeapHand().IsRight); handIsSet = true; } bool res = Vector3.Cross(handModel.GetLeapHand().PalmNormal.ToVector3(), Vector3.forward).x > 0; if (res != facingUp) { Debug.Log("palm facing Up : " + res); facingUp = res; MidiController.getInstance().setPalmFacingUp(facingUp); } bool closed = handModel.GetLeapHand().GrabStrength > 0.6; if (closed != handIsClosed) { Debug.Log("hand is closed : " + closed); handIsClosed = closed; ControlHandTracker.getInstance().setStaticHandIsClosed(handIsClosed); } } else if (handIsSet) { handIsSet = false; ControlHandTracker.getInstance().stopTracking(); foreach (MeshRenderer child in gameObject.GetComponentsInChildren <MeshRenderer>()) { child.material.color = Color.white; } } } }
public void ChannelModeMessages_have_the_proper_type(MidiController controller, Type type) { var message = ControlChangeMessage.Create(8, controller, 127); message.Should().BeOfType(type); }
private static object _getValue(SelectedItem item) => MidiController.GetValue(item.Item, item.Object);
public static ControlChangeMessage Create(int channel, MidiController controller, byte value) { return(Create(channel, (byte)controller, value)); }
/// <summary> /// Creates a control change event /// </summary> /// <param name="absoluteTime">Time</param> /// <param name="channel">MIDI Channel Number</param> /// <param name="controller">The MIDI Controller</param> /// <param name="controllerValue">Controller value</param> public ControlChangeEvent(long absoluteTime, int channel, MidiController controller, int controllerValue) : base(absoluteTime,channel,MidiCommandCode.ControlChange) { this.Controller = controller; this.ControllerValue = controllerValue; }
public void Initialize(Control control, ControlGroup controlGroup, MidiController midiController, ILogger logger, IDeviceLocator deviceLocator) { _deviceLocator = deviceLocator; _controlGroup = controlGroup; }
protected void TransmitControl(int channel, MidiController controller, int value) { var message = ControlChangeMessage.Create(channel, controller, (byte)value); TransmitEvent(message); }
private void HandleControlChange(MidiController controller, int controllerValue) { ControlChange?.Invoke(controller, controllerValue); }
private void HandleMidiMessageReceived(object sender, MidiInMessageEventArgs e) { MidiIn source = sender as MidiIn; if (source == null) { return; } if (e.MidiEvent == null) { return; } MidiChannel channel = (MidiChannel)e.MidiEvent.Channel; MidiCommandCode commandCode = e.MidiEvent.CommandCode; if (e.MidiEvent.CommandCode == MidiCommandCode.NoteOn && (e.MidiEvent as NoteEvent).Velocity == 0) { commandCode = MidiCommandCode.NoteOff; } if (commandCode == MidiCommandCode.NoteOff) { int noteNumber = (e.MidiEvent as NoteEvent).NoteNumber; int velocity = (e.MidiEvent as NoteEvent).Velocity; DelegateToListeners(listener => listener.HandleNoteOff(noteNumber, velocity, channel), channel); } else if (commandCode == MidiCommandCode.NoteOn) { int noteNumber = (e.MidiEvent as NoteEvent).NoteNumber; int velocity = (e.MidiEvent as NoteEvent).Velocity; DelegateToListeners(listener => listener.HandleNoteOn(noteNumber, velocity, channel), channel); } else if (commandCode == MidiCommandCode.KeyAfterTouch) { int noteNumber = (e.MidiEvent as NoteEvent).NoteNumber; int velocity = (e.MidiEvent as NoteEvent).Velocity; DelegateToListeners(listener => listener.HandleNotePressure(noteNumber, velocity, channel), channel); } else if (commandCode == MidiCommandCode.ControlChange) { MidiController controller = (e.MidiEvent as ControlChangeEvent).Controller; if (controller == MidiController.AllNotesOff) { DelegateToListeners(listener => listener.HandleAllNotesOff(channel), channel); } else if (controller == MidiController.ResetAllControllers) { DelegateToListeners(listener => listener.HandleResetControllers(channel), channel); } else { int controllerNumber = (int)controller; int value = (e.MidiEvent as ControlChangeEvent).ControllerValue; DelegateToListeners(listener => listener.HandleControlChange(controllerNumber, value, channel), channel); } } else if (commandCode == MidiCommandCode.ChannelAfterTouch) { int value = (e.MidiEvent as ChannelAfterTouchEvent).AfterTouchPressure; DelegateToListeners(listener => listener.HandleChannelPressure(value, channel), channel); } else if (commandCode == MidiCommandCode.PitchWheelChange) { int value = (e.MidiEvent as PitchWheelChangeEvent).Pitch; DelegateToListeners(listener => listener.HandlePitchWheel(value, channel), channel); } }
public static void Read(string filename) { if (!CuelistCtrl.saved) { bool?result = DialogCtrl.Show(DialogType.QUESTION, OptionType.YESNO, "Open Cuelist", "Do you want to save the current cuelist?"); if (result == true) { if (!Write(false)) { return; } } } if (filename == null) { Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); dlg.Filter = "CC Files (*.cc)|*.cc"; bool?result = dlg.ShowDialog(); if (result == true) { filename = dlg.FileName; } else { return; } } using (DataSet dataSet = new DataSet("Cuelist")) { try { dataSet.ReadXml(filename); } catch (Exception e) { LogCtrl.Error(e.Message); DialogCtrl.Show(DialogType.ERROR, OptionType.OKCANCEL, "Error", "Can't open file!"); return; } DataTableCollection collection = dataSet.Tables; ClearCuelist(); for (int i = 0; i < collection.Count; i++) { DataTable table = collection[i]; switch (table.TableName) { case "Settings": SetSettingsFromTable(table); break; case "Script": ScriptlistCtrl.LoadScripts(table); break; case "Beamer": BeamerlistCtrl.LoadBeamers(table); break; case "MidiMap": MidiController.LoadMidiMap(table); break; default: CuelistCtrl.SetCuesFromTable(table); break; } } } CuelistCtrl.saved = true; SetPath(filename); CuelistCtrl.DisableEditMode(); RecentFilesCtrl.Add(filename); LogCtrl.Status("Open file: " + filename); }
public static ICommand Create(string name, Control control, ControlGroup controlGroup, MidiController midiController, ILogger logger, IDeviceLocator deviceLocator) { lock (_controllerCommandsLock) { InitializeCommands(); if (_controllerCommands.TryGetValue(control.Controller, out var commandInstance)) { return(commandInstance); } else { if (_commands.TryGetValue(name, out var _commandType) || _commands.TryGetValue(name + "Command", out _commandType)) { commandInstance = Activator.CreateInstance(_commandType) as ICommand; if (commandInstance != null) { commandInstance.Initialize(control, controlGroup, midiController, logger, deviceLocator); } _controllerCommands.Add(control.Controller, commandInstance); return(commandInstance); } } return(null); } }
/// <summary> /// Creates a control change event /// </summary> /// <param name="absoluteTime">Time</param> /// <param name="channel">MIDI Channel Number</param> /// <param name="controller">The MIDI Controller</param> /// <param name="controllerValue">Controller value</param> public ControlChangeEvent(long absoluteTime, int channel, MidiController controller, int controllerValue) : base(absoluteTime, channel, MidiCommandCode.ControlChange) { this.Controller = controller; this.ControllerValue = controllerValue; }
// Use this for initialization void Start() { handIsSet = false; facingUp = true; MidiController.getInstance().setPalmFacingUp(facingUp); }