/** * Copyright © Underground Rekordz 2019 * License: MIT (https://github.com/UndergroundRekordz/Musicpulator/blob/master/LICENSE) * Author: Jacob Jensen (bausshf) */ module musicpulator.melodies; import musicpulator.direction; import musicpulator.musicalprogression; /** * Gets the melodic progression based on the analysis of a set of note directions. * Params: * directions = The note directions to analuyze and get the progression of. * Returns: * The melodic progression best fitting the analysis. */ MusicalProgression getProgression(NoteDirection[] directions) { import std.algorithm : all; if (!directions || !directions.length) { return MusicalProgression.none; } if (directions.all!(d => d == NoteDirection.forward)) { return MusicalProgression.steady; } if (directions.all!(d => d == NoteDirection.upwards)) { return MusicalProgression.upwards; } if (directions.all!(d => d == NoteDirection.downwards)) { return MusicalProgression.downwards; } // TODO: More analysis. return MusicalProgression.unknown; }