ekaszubski/Chromosound
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Revised and refined description: ---------------------------------------------------------------------- Data: -------------- - Determine a measure repeat length - rhythm length will be determined based on the time, the beat resolution, and this value - note: the rhythm does not determine beat length, only beat start times - Determine a rhythm (parse rhythm genes using RhythmFSM) - Determine a sequence of notes (parse note sequence using the rhythm as commits and the NoteFSM) - For each note in the sequence, encode a beat-synchronized note modifier (to potentially change the pitch or duration of the note slightly from the pre-determined values) - Raw data (building blocks) - Rhythm component sequence \__ Rhythm - Rhythm modifier sequence _/ \ - Note component sequence > NoteSequence - Note modifier sequence ______________/ - Pooled data (global data built from the local data of all individuals; most modifier genes pick a value from these pools) - Rhythm pool - Note sequence pool - Measure repeat length pool - Time pool Algorithm: -------------- - Algorithm description: - Each individual will directly encode a rhythm and a note modifier sequence - Rhythm: sequence of "commit" genes; in other words, times during which notes must start being played - Each rhythm component gene specifies how long to wait prior to performing a commit * Question: should the commit gene reset the state of the NoteFSM to some base state? * Answer: no; however, this information should instead be reset at the beginning of each measure *sequence* (see measure repeat length) - Note modifier sequence: sequence of *changes* to the pitch and duration values of the current note * Question: how many of these genes to we store? * Problem: without knowing the rhythm, we can't know what the number of commits/measure is * Answer: * an arbitrary yet consistent value (for all genes in the simulation); units: (genes/beat) * so if our time is 4/4 and our beat resolution is 1/16, we can have at most 4*16 beats/measure * so the total number of genes to store is genes/beat * beats/measure / beat_resolution - At the beginning of each generation: - The rhythm component sequence and note component sequence will be parsed from each individual in the population - This will yield one unique rhythm component sequence and note component sequence per individual - The rhythm component sequence will be compiled into a rhythm - Using the rhythm and a note modifier sequence, the note component sequence will be compiled into a note sequence - At the beginning of each measure sequence: - All FSMs in the hierarchy below the measure sequence will be reset - Changes to the key, time, measure sequence length, and rhythm (ie. the currently selected subset of all pooled data) are applied - At the beginning of each measure: - Measure modifiers are applied (temporarily change some property of the current measure) - At the beginning of each note: - Note modifiers are applied (see above)
About
Genetic process for evolving continuous, infinite streams of music
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published