Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
    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);
    }