Esempio n. 1
0
 /// <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));
     }
 }
Esempio n. 2
0
        /// <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));
            }
        }
Esempio n. 3
0
        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();
        }
Esempio n. 5
0
 // 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;
             }
         }
     }
 }
Esempio n. 6
0
        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);
Esempio n. 8
0
 public static ControlChangeMessage Create(int channel, MidiController controller, byte value)
 {
     return(Create(channel, (byte)controller, value));
 }
Esempio n. 9
0
 /// <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;
 }
Esempio n. 10
0
 public void Initialize(Control control, ControlGroup controlGroup, MidiController midiController, ILogger logger, IDeviceLocator deviceLocator)
 {
     _deviceLocator = deviceLocator;
     _controlGroup  = controlGroup;
 }
Esempio n. 11
0
        protected void TransmitControl(int channel, MidiController controller, int value)
        {
            var message = ControlChangeMessage.Create(channel, controller, (byte)value);

            TransmitEvent(message);
        }
Esempio n. 12
0
 private void HandleControlChange(MidiController controller, int controllerValue)
 {
     ControlChange?.Invoke(controller, controllerValue);
 }
Esempio n. 13
0
        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);
            }
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
        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);
            }
        }
Esempio n. 16
0
 /// <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;
 }
Esempio n. 17
0
 // Use this for initialization
 void Start()
 {
     handIsSet = false;
     facingUp  = true;
     MidiController.getInstance().setPalmFacingUp(facingUp);
 }