Пример #1
0
        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;
        }
Пример #2
0
 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);
             }
         }
     }
 }