Skip to content

RyanButler53/Total-Serialism

Repository files navigation

Total Serialism

Total-Serialism is a containerized app to generate Customizable Total Serial Style sheet music.

Features

  • Generates Total Serial pdf sheet music in seconds
  • Customizable Features:
    • Choice of 15 different instruments
    • Set unique or random Row numbers and types for all instruments
    • Set a dynamic for each row
    • Pieces can be an arbitrary length
    • Set Tempo
    • Set Time Signature
    • Set piece title and composer
    • Export Parts

Requirements:

  • Python3 with PyQt6 installed
  • Docker Desktop

Build:

First you will need to build the docker image for the C++/Lilypond part of the project: docker build -t totalserialism:latest .

Run:

./run

If you don't have pyqt installed, you can specify a seed for randomness with

sh score.sh <seed>. docker run -v <path to store scores>:/TotalSerialism/scores totalserialism:latest sh score.sh <seed>

Alternatively, you can specify an input file and output filename. The input file must be in the same form as below or it will not work. Then run

sh score.sh <output_filename> <input_filename> docker run -v <path to store scores>:/TotalSerialism/scores totalserialism:latest sh score.sh <title_filename> <input file>

Tests:

There are a 3 non rigorous unit tests written using google test. They can be run with the script

sh unitTests.sh

There is also a longer fuzz testing script. Fuzz testing leverages the lilypond compiler's error messages:

sh fuzzTest.sh <numTests> <max_parallel_tests>

It checks if there are no errors or warnings from the lilypond compiler. The lilypond compiler is slow and this test takes some time to run. The number of tests defaults to 10, max parallel tests defaults to 4.

Release:

  • Release 1.0 code freeze: 10/24/24
  • Release 1.1.0 code freeze: 5/26/25

Roadmap

  • Grand Plans for 2.0
    • Export Midi files
    • Gui could be improved
    • App should be able to be run from a pre-built and pushed docker image.
  • No Tickets have been written (5/26/25)
  • Email requests to keymckeyface@gmail.com

Notes:

Input Files are in this format. It's typically easier to use the gui if you have PyQt6 installed.

11 10 9 8 7 6 5 4 3 2 1 0 // Pitch P0 Row
0 1 2 3 4 5 6 7 8 9 10 11 // Rhythm P0 Row
7 8 9 3 0 11 6 10 4 5 1 2 // Articulation P0 Row
120 // Tempo
9/8 // Time Signature
Title // Title
Composer Name // Composer
14 // Number of rows in the piece, (piece length)
3 // Number of instruments
trombone // Instrument 1 name
1 0 10 1 3 2 1 1 3 10 7 10 6 5 // Row Numbers
RI I RI RI I R I R R RI RI R R R // Row Types
7 1 9 5 2 7 7 6 6 0 8 8 6 1 // Row Dynamics
violin
4 0 10 10 8 0 11 4 2 1 0 0 6 9 // Row Numbers
P RI R RI RI I I RI RI R RI RI RI R // Row Types
5 2 1 7 9 8 10 6 2 5 5 8 7 0 // Row Dynamics
bass
0 8 0 10 0 7 4 11 10 4 0 10 6 6 // Row Numbers
R RI P RI RI P R P R R R P RI R // Row Types
9 5 1 6 10 8 0 10 10 5 0 6 6 6 // Row Numbers

Available Instruments:

  • violin
  • viola
  • cello
  • bass
  • oboe
  • bassoon
  • clarinet
  • piccolo
  • flute
  • trombone
  • trumpet
  • frenchhorn
  • tuba
  • piano
  • harp

Instruments must be spelled in this specific spelling in the instrument input files

Available Time Signatures:

  • 4/4 (Default)
  • 1/4
  • 3/8
  • 2/4
  • 5/8
  • 6/8
  • 3/4
  • 7/8
  • 9/8
  • 5/4
  • 11/8
  • 12/8
  • 6/4
  • 3/2
  • 13/8
  • 7/4
  • 15/8

About

Generates customizable Total Serial style sheet music

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •