110 likes | 126 Views
This program generates musical chord progressions based on user input and applies various constraints to create harmonically correct compositions. The output is a lilypond file that can be viewed on a webpage.
E N D
Automated Musical Part Writing Kevin Deisz
Input • Positive integer - dictates the number of chords to be created • Instrument file (python) - file that is written to dictate certain rules in order to write for different ensembles
Process • Creates an array of size that was input • Follows the chord progression map for a major key to fill up the entire array with random new chords
Process - Domains • Creates four arrays - one for each instrument that was input • Loops through a newly created map and adds all possible values for voice for each chord to the corresponding array
Process - Constraints • Spacing error - no two voices can be more than one octave apart (more than 7 notes between) • Voice crossing error - higher voices cannot go lower than lower voices and vice versa
Process - Constraints (cont.) • Parallel fifths - no two voices can move in the same direction and end and begin with 4 notes in between • Parallel octaves - same as parallel fifths except with 7 notes in between
Process - Constraints (cont.) • All of these constraints can be broken down into binary constraints - all one function
Process - Constraints (cont.) • A new map is created in which every voice is added • Every voice then has a corresponding array of pairs that contain neighbors and a pointer to the function
Process - CSP • All three maps - assignments, domains and constraints - are then passed to the csp function • Since all of the constraints were already given and all of the possible values already calculated - the music is returned
Extra Methods • At this point, the basic arrays of notes are returned • Top two voices are then passed to an ornamentation method, which adds eighth notes • Another method makes the last note a whole note
Output • The python program outputs a text file in the format of a lilypond file • Python program then executes the lilypond utility (“lilypond --png file.ly”) • File is then displayed on a webpage • http://www.tjhsst.edu/~kdeisz/musicwriter