Initial Implementation KISS Automatic composition system for bass, percussion, piano, and three horns using patterns from the Quaternion Group. This will be a paramaterized, deterministic system. All decisions will be made by sequencing the group table. The Group Table ------------ The first 8 rows will be the standard Quarternion Group table. (alt 1 - 1,2,3,4,5,6,7,8) The next 8 rows will be generated from the first 8 starting with the 1st column and then selecting the third column following. (alt 3 - 1,4,7,2,5,8,3,6) The next 8 rows will be generated from the first 8 starting with the 1st column and then selecting the fifth column following. (alt 5 - 1,6,3,8,5,2,7,4) The next 8 rows will be generated from the first 8 starting with the 1st column and then selecting the seventh column following. (alt 7 - 1,8,7,6,5,4,3,2) 32 rows total. Since 32 = 2 to the 5th it is relatively prime to all odd numbers giving us these paths through the expanded table. 1,2,3,4,5,... 3,6,9,12,15,... 5,10,15,20,25,... 7,14,21,28,3,... ... ... 31,30,29,28,27,... 16 paths through 32 rows provides ample variety while still maintaining the symmetry inherent in the Quaternion Group. Variants, Parameters, Libraries, and States ------------ Each variant like volume, tempo, harmonic tempo, chord sequence, bass rhythm, percussion rhythm, etc. will be controlled by a parameter. These parameters will change during the course of the piece and this change will be controlled by a row in the extended table or a path through the extended table. Parameters can also control parameters. Libraries will define the chords, progressions, scales, bass patterns, etc. used in the piece. The libraries are limiting factors in the composition. By changing the libraries you change the possibilities for the generated music. It is the composers choice to control an element of composition using a library or a variant. Generally speaking if you are trying to generate a certain type or style of music the libraries can be used to define that type or style. A state includes the start of the piece and the sets of variants, parameters, and libraries in use and their current value. A state also includes the progress of any parameter through the extended table or row that is controlling it. Saving a state is saving the piece at that point in time. Since the system is deterministic loading a state loads the piece and playing the loaded piece will always play the same piece. User Interface ------------ The user controls the music through a control panel with buttons for Stop, Play, New, Save, and Select and sliders for volume and tempo. Stop stops the playback and retains the current state. Play plays the music from the current state. New loads and new state and plays the music. Save saves the current state to a database. Select displays the saved states in reverse chronological order in four columns. A listen button, a load button, the date and time the state was saved, and the name of the state. This interface provides the user with the ability to name or rename each state by typing in the fourth column. The listen button toggles playback without loading the state. This allows the user to sample the music before loading. The load button loads the state and closes the table. After loading the user can then adjust the volume or tempo, save the state at the current time, or play the state. The state loaded when the New button is pressed creates a new starting point and parameter set based on states that have already been saved. In a sense the New button tries to create music similar to the music that has already been saved. This could be done deterministically or non-deterministically. In the user interface and documentation state will be called piece or song. The user can record pieces using third party software like Audacity. Composer Interface ------------ The easy composer interface involves editing the existing libraries and assiging parameters to variants. It also includes export to MusicXML functionality. The advanced composer interface involves creating libraries and variants. This customizes the composition system without changing the code. This can be done without breaking the user interface. The advanced composer interface can also change the instrumentation. The system is completey usable without the advanced program interface so this difficult piece of conceptualization can be saved for last but should be kept in mind during coding. The top level composer interface involves editing the program code. This can change both the composer and the user interface and results in a new version or a fork of the code which may break the user interface in that saved selections may not play correctly or at all.