`dumb_composer`: A Rule-Based Classical Music Generator
During my dissertation research, I wrote a Python program that takes a Roman numeral analysis as input and outputs synthetic Classical music. I aimed to generate labeled data for training Roman-numeral analysis models like the one in my 2024 ISMIR paper, but I found that it did not improve the model’s performance.1
It was nevertheless a fun project and so I’ve posted it to my Github. While the program is arguably a sort of composer, it’s not a very good composer, and so I called it dumb_composer
.
Briefly, the way it works is described in the below graphic:2
Here’s an example of the results. The input chord labels are printed below the score.
I discuss this project in a little more detail in my forthcoming dissertation.
-
I should add that a much better way of generating verisimiltudinous Classical music would be to train a generative neural network. Moreover, it’s likely that a better approach for creating synthetic labeled data would be to train a generative neural network conditioned on the Roman numeral labels. (A network like RNBert could be of help in creating a dataset to train such a network.) ↩
-
The code for the first step (“Make chord progression”) was performed by a different script and is not included in the repository. ↩