public static List <int> GenerateTonalIntervals(PLoopLayer layer) { var output = new List <int>(); for (int type = 0; type < ProceduralAudio.amountOfLayers + 1; type++) { if (type == (int)layer.layerType) { switch ((int)layer.layerType) { case 0: // melody output = GenerateChordBasedMelody(layer.rythm, new List <int> { 0, 2, 4 }); break; case 1: // countermelody output = GenerateMelody(layer.rythm, layer.soundOptionsAmount); break; case 2: // percussion output = GenerateMelody(layer.rythm, layer.soundOptionsAmount); break; case 3: // soundscape output = GenerateMelody(layer.rythm, layer.soundOptionsAmount); break; default: // chords output = LinkChordLine(layer.rythm, (int)layer.layerType - 4); // subtract 4 for other vars in enum break; } break; } } return(output); }
public static List <int> GenerateRythm(PLoopLayer layer) // custom amount of ticks allows for polyrythm { var layerRythm = new List <int>(); // amount of ticks is amount of notes to be played and tick for (int i = 0; i < layer.beatsPerMeasure; i++) { // use probability to decide if hit needs to be added layerRythm.Add((Random.Range(0, 10) + 1 <= layer.noteDensity) ? 1 : 0); // add 0s (pause) to set ticklength for (int tick = 1; tick < layer.beatLength; tick++) { layerRythm.Add(0); } } return(layerRythm); }