# Twelve Tone Generator TUI Application for composing serialism music. Features: - Generate 12 Tone Matrix - Play 12 Tone rows with over 15 instruments - Loop and/or Sequence 12 tone rows - Generate Serialized Octave Sequences based on tone matrix - Generate Serialized Rhythm Sequences based on tone matrix - Save Matrices and Other Sequences for later use ## Installation Guide ## Main Page The main page consists of a 12 Tone Matrix. The only part of the main page that really needs explaining is the tri-colored table below the matrix. - The TONE row contains the tones of P0 row. - RTHM is the rhythmic division assigned to a given note. - OCTV is the octave assigned to a given note. The rhythmic division and octave will always be the same for their associated note, the order just changes when you play a row other than P0. When you do begin playback, this tri-colored table will be replaced with the row that is currently being played. ## Commands | Command | Action | Page | |---|---|---| | `P0-P11` | Play Prime Row | Main Page | | `I0-I11` | Play Inversion Row | Main Page | | `R0-R11` | Play Retrograde Row | Main Page | | `i0-i11` | Play Retrograde Inversion Row | Main Page | | `loop ` | Play row X times in loop | Main Page | | `seq ,... ` | Play sequence of rows, comma separated | Main Page | | `r` OR `regen` | Regenerate Matrix | Main Page | | `s` OR `settings` | Go To Settings Page | Main Page | | `h` OR `help` | Open This Document | Main Page | | `q` OR `quit` | Quit Application | Main Page, Settings Page | | Setting ID | Edit Setting | Settings Page | __Advanced Commands:__ - Loop a sequence: - `loop seq ,` - Example: `loop 5 seq P0,R3,i11,I0` - Debug - `debug`: Open up python console via breakpoint() ## Settings: - BPM - Set the BPM of the overall project, between 30 - 300 BPM - INSTRUMENT - Select an instrument for playback - OCTAVE - Select base octave for playback - OCTAVE_RANDOMIZATION - `0` Only play base octave - `1` Randomize octaves, increasing octave range by +1 and -1 (example: base octave = 3, octave range = 2-4) - `2` Randomize octaves, increasing octave range by +2 and -2 (example: base octave = 3, octave range = 1-5) - `3` Randomize octaves, increasing octave range by +3 and -3 (example: base octave = 1, octave range = 1-4) - When the range would result in an octave higher than 5 or lower than 0, it clamps range to fit 0-5 - RHYTHM_COMPLEXITY - `0` No Rhythmic Complexity, Will play default division - `1` Will play a rhythm based on sequence generated by tone matrix - `2` Will play a rhythm based on sequence generated by tone matrix, Including rests (if rest probability is greater than 0) - `3` Will play a random rhythm not based on a sequence - DEFAULT_DIVISION - `0` Whole Note - `1` Half Note - `2` Quarter Note - `3` Eight Note - REST_PROBABILITY - The probability in which a rest will occur during playback when RHYTHM_COMPLEXITY = 2 - SAVE_SETTINGS - Save current settings to a file, will automatically load when you restart the program - SAVE_MATRIX - Save the current tone matrix to a file, you can manually load this later - LOAD_MATRIX - Load a previously saved tone matrix