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 QuickTime™ and a TIFF (Uncompressed) decompressor are needed to see this picture. 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