Skip to content

ekaszubski/Chromosound

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

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

No packages published