Пример #1
0
        private void HandleNoteSelectionChanged(object sender, PropertyChangedEventArgs e)
        {
            ItemExtender <IScaleNote, bool> source = sender as ItemExtender <IScaleNote, bool>;

            if (source == null)
            {
                return;
            }

            // TODO remove this debug code once I get the velocity initialized correctly
            if (double.IsNaN(Velocity))
            {
                Dispatcher.Invoke(DispatcherPriority.Send, new Action(() => Velocity = 0.8f));
            }

            if (source.Value == true)
            {
                _midiLink.InjectNoteOn(source.Item.MidiNoteNumber, (int)(Velocity * 127));
                _notes.Where(item => !Equals(sender, item)).Execute(item => item.Value = false);
            }
            else
            {
                _midiLink.InjectNoteOff(source.Item.MidiNoteNumber, 0);
            }
        }
Пример #2
0
        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            FrameworkElement fe = container as FrameworkElement;

            ItemExtender <IScaleNote, bool> extender = item as ItemExtender <IScaleNote, bool>;

            if (extender == null)
            {
                return(null);
            }
            else if (extender.Item.Name.StartsWith("C#") || extender.Item.Name.StartsWith("F#"))
            {
                return((DataTemplate)fe.FindResource("BlackKeyTemplateC"));
            }
            else if (extender.Item.Name.StartsWith("D#") || extender.Item.Name.StartsWith("A#"))
            {
                return((DataTemplate)fe.FindResource("BlackKeyTemplateD"));
            }
            else if (extender.Item.Name.Contains("#"))
            {
                return((DataTemplate)fe.FindResource("BlackKeyTemplateG"));
            }
            else
            {
                return((DataTemplate)fe.FindResource("WhiteKeyTemplate"));
            }
        }
Пример #3
0
        public void HandleNoteOff(int noteNumber, int velocity, MidiChannel channel = MidiChannel.Omni)
        {
            ItemExtender <IScaleNote, bool> note = Notes.FirstOrDefault(n => n.Item.MidiNoteNumber == noteNumber);

            if (note != null && note.Value)
            {
                note.Value = false;
            }
        }
Пример #4
0
 private void AddNotes(int bottomNoteIndex, int topNoteIndex)
 {
     for (int i = bottomNoteIndex; i <= topNoteIndex; i++)
     {
         ItemExtender <IScaleNote, bool> item = new ItemExtender <IScaleNote, bool>(Scale.EqualTemperedScale[i], false);
         item.PropertyChanged += HandleNoteSelectionChanged;
         _notes.Add(item);
     }
 }
Пример #5
0
        public void HandleNoteOn(int noteNumber, int velocity, MidiChannel channel = MidiChannel.Omni)
        {
            ItemExtender <IScaleNote, bool> note = Notes.FirstOrDefault(n => n.Item.MidiNoteNumber == noteNumber);

            if (note != null && !note.Value)
            {
                //Dispatcher.BeginInvoke(DispatcherPriority.Send, new Action(() => Velocity = velocity / 127d));
                note.Value = true;
            }
        }