Beispiel #1
0
        public void FillNote(NoteEventReceivedEventArgs eventArgs)
        {
            if (eventArgs?.Command != MidiCommandCode.NoteOn)
            {
                return;
            }

            Channels.SelectMatching(c => c.Model == eventArgs.Channel);
            Notes.SelectMatching(c => c.Model == eventArgs.Note);
            Octaves.SelectMatching(o => o.Model == eventArgs.Octave);
        }
Beispiel #2
0
        private bool NoteIsActive(NoteEventReceivedEventArgs e)
        {
            var isActive = e.Command == MidiCommandCode.NoteOn && e.Velocity > 0;

            if (e.Command == MidiCommandCode.NoteOn && e.Velocity == 0)
            {
                isActive = false;
            }

            if (e.Command == MidiCommandCode.NoteOff)
            {
                isActive = false;
            }

            return(isActive);
        }
Beispiel #3
0
        private void MapMidiEvent(object sender, NoteEventReceivedEventArgs e)
        {
            Dispatcher.CurrentDispatcher.Invoke(() =>
            {
                if (e.Command == MidiCommandCode.NoteOn)
                {
                    LatestNote = e;
                }

                if (SelectedProfile == null)
                {
                    return;
                }

                var isActive           = NoteIsActive(e);
                var hasChangedMappings = false;
                foreach (var mapping in SelectedProfile.Mappings)
                {
                    var isMatch = mapping.Channel == e.Channel && mapping.Octave == e.Octave && mapping.Note == e.Note;
                    if (!isMatch)
                    {
                        continue;
                    }

                    var hasChanged = mapping.IsActive != isActive;
                    if (!hasChanged)
                    {
                        continue;
                    }

                    mapping.IsActive   = isActive;
                    hasChangedMappings = true;

                    foreach (var output in mapping.Outputs)
                    {
                        _orchestratorService.SetOutputState(output.Output.Id, mapping.IsActive);
                    }
                }

                if (hasChangedMappings)
                {
                    _orchestratorService.CommitChanges();
                }
            }, DispatcherPriority.Render);
        }
Beispiel #4
0
 private void FillFromPressedNote(object sender, NoteEventReceivedEventArgs e)
 {
     FillNote(e);
 }