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); } } }
private void Strum4E() { MidiLogic.StopNote(_mOut, SelectedChannel, S4Value); }
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++; } } }); }