void Parse() { var parts = (from i in code.Split(',') select i.Trim()).ToArray(); sequence = new NoteTrigger[parts.Length]; for (var i = 0; i < parts.Length; i++) { var noteTrigger = new NoteTrigger() { duration = 1, volume = 0.9f }; var pda = (from x in parts[i].Split(':') select x.Trim()).ToArray(); if (pda.Length >= 1) { float hz; if (float.TryParse(pda[0], out hz)) { noteTrigger.hz = hz; noteTrigger.noteNumber = -1; } else { noteTrigger.hz = Note.Frequency(pda[0]); noteTrigger.noteNumber = Note.Number(noteTrigger.hz); } } if (pda.Length >= 2) { int duration; if (int.TryParse(pda[1], out duration)) { noteTrigger.duration = duration; } } if (pda.Length >= 3) { float volume; if (float.TryParse(pda[2], out volume)) { noteTrigger.volume = volume; } } sequence[i] = noteTrigger; } if (type == SequencerType.Down) { Reverse(); } lastCode = code; lastType = type; }
void NextBeat(float[] signals) { beatIndex++; if (beatDivider == 0 || beatIndex % beatDivider == 0) { if (!notes.IsEmpty) { var note = notes.Peek(); if (note.beat <= beatIndex) { position = 0; outputTrigger.SetValue(signals, 1); activeNote = notes.Pop(); var tr = (int)transpose.GetValue(signals); if (tr != 0) { if (activeNote.noteNumber >= 0) { activeNote.hz = Note.Frequency(activeNote.noteNumber + tr); } else { activeNote.hz += tr; } } activeNote.hz *= frequencyMultiply.GetValue(signals); if (notes.IsEmpty) { ChangeNoteTriggerPattern(); ScheduleNoteTriggers(beatIndex + activeNote.duration); } nextNote = notes.Peek(); if (tr != 0 && nextNote.noteNumber >= 0) { nextNote.hz = Note.Frequency(nextNote.noteNumber + tr); } nextNote.hz *= frequencyMultiply.GetValue(signals); } } } }