atonatui/README.md
2026-08-09 21:20:57 -04:00

102 lines
3.9 KiB
Markdown

# 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
### Prerequisites
`atonatui` requires the **FluidSynth** audio engine to be installed on your system:
- **Arch Linux:** `sudo pacman -S fluidsynth`
- **Ubuntu/Debian:** `sudo apt install fluidsynth`
- **macOS (Homebrew):** `brew install fluidsynth`
- **Windows:** Download the binaries and add them to your system PATH.
### Installation
```bash
pipx install atonatui
```
## 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 <count> <P0-i11>` | Play row X times in loop | Main Page |
| `seq <P0-i11>,<P0-i11>... ` | 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 <x> seq <P0-i11>,<P0-i11>`
- 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
# Upcoming Features
- Support independent generation, saving, and loading for rhythm and octave rows
- Support loading of custom soundfonts
- Support custom input of Tone Row + Rhythm and Octave rows
- Output rows to midi
- Up arrow functionality so users can rerun commands easily