private void GenerateNextProgression() { if (sequenceNumber % 3 != 0) { currentKey = (MusicalKey)Random.Range(1, (int)MusicalKey.count); // maybe switch key // currentKey = currentKey == MusicalKey.CMajor ? MusicalKey.CMinor : MusicalKey.CMajor; // maybe switch key } currentProgression = (Progression)Random.Range(1, (int)Progression.count); // get random progression switch (currentProgression) { case Progression.None: Debug.LogError("Error in progression assignment"); break; case Progression.TonicDominantTonic: chordQueue.Enqueue(chordController.GetChordOfType(currentKey, ChordFunction.tonic)); chordQueue.Enqueue(chordController.GetChordOfType(currentKey, ChordFunction.dominant)); chordQueue.Enqueue(chordController.GetChordOfType(currentKey, ChordFunction.tonic)); chordNumber += 3; break; case Progression.TonicSubdominantTonic: chordQueue.Enqueue(chordController.GetChordOfType(currentKey, ChordFunction.tonic)); chordQueue.Enqueue(chordController.GetChordOfType(currentKey, ChordFunction.subdominant)); chordQueue.Enqueue(chordController.GetChordOfType(currentKey, ChordFunction.tonic)); chordNumber += 3; break; case Progression.TonicDominantSubdominantTonic: chordQueue.Enqueue(chordController.GetChordOfType(currentKey, ChordFunction.tonic)); chordQueue.Enqueue(chordController.GetChordOfType(currentKey, ChordFunction.dominant)); chordQueue.Enqueue(chordController.GetChordOfType(currentKey, ChordFunction.subdominant)); chordQueue.Enqueue(chordController.GetChordOfType(currentKey, ChordFunction.tonic)); chordNumber += 4; break; case Progression.count: Debug.LogError("Error in progression assignment"); break; default: Debug.LogError("Error in progression assignment"); break; } sequenceNumber++; }