예제 #1
0
 private void _mIn_MessageReceived(object sender, MidiInMessageEventArgs e)
 {
     //Only regard event if it matches selected channel
     if (e.MidiEvent.Channel == SelectedChannel)
     {
         if (e.MidiEvent.CommandCode == MidiCommandCode.NoteOn)
         {
             var noteOnEvent = (NoteEvent)e.MidiEvent;
             PlayFromInput(noteOnEvent);
         }
         if (e.MidiEvent.CommandCode == MidiCommandCode.NoteOff)
         {
             var noteEvent = (NoteEvent)e.MidiEvent;
             MidiLogic.StopNote(_mOut, SelectedChannel, noteEvent.NoteNumber);
         }
     }
 }
예제 #2
0
 private void Strum4E()
 {
     MidiLogic.StopNote(_mOut, SelectedChannel, S4Value);
 }
예제 #3
0
        private void StartMelody(int line)
        {
            var scale   = ChosenScale;
            int counter = 0;

            ThreadPool.QueueUserWorkItem(
                o =>
            {
                if (ProgressionPattern != null && ProgressionPattern.Count > 0)
                {
                    foreach (var root in ProgressionPattern)
                    {
                        var adjustedNote = NoteLogic.OctaveC[OctavePattern[counter % OctavePattern.Count] + 4] + scale.Steps[root % scale.Steps.Count] + ChosenKey.Offset;

                        switch (line)
                        {
                        case 1:
                            S1Value = adjustedNote;
                            break;

                        case 2:
                            S2Value = adjustedNote;
                            break;

                        case 3:
                            S3Value = adjustedNote;
                            break;

                        case 4:
                            S4Value = adjustedNote;
                            break;
                        }

                        MidiLogic.PlayNote(_mOut, SelectedChannel, adjustedNote);
                        Thread.Sleep(LengthPattern[counter % LengthPattern.Count]);
                        MidiLogic.StopNote(_mOut, SelectedChannel, adjustedNote);
                        counter++;
                    }
                }
                else
                {
                    for (int i = 0; i < scale.Steps.Count; i++)
                    {
                        var adjustedNote = NoteLogic.OctaveC[OctavePattern[counter % OctavePattern.Count] + 4] + scale.Steps[i % scale.Steps.Count] + ChosenKey.Offset;

                        switch (line)
                        {
                        case 1:
                            S1Value = adjustedNote;
                            break;

                        case 2:
                            S2Value = adjustedNote;
                            break;

                        case 3:
                            S3Value = adjustedNote;
                            break;

                        case 4:
                            S4Value = adjustedNote;
                            break;
                        }

                        MidiLogic.PlayNote(_mOut, SelectedChannel, adjustedNote);
                        Thread.Sleep(LengthPattern[counter % LengthPattern.Count]);
                        MidiLogic.StopNote(_mOut, SelectedChannel, adjustedNote);
                        counter++;
                    }
                }
            });
        }