Forget about the new seasonal soundtracks in the Steam release; procedurally generate the new music tracks, which will be played with a random set of instruments, in random styles, that were generated in the world being played. I'm sure it'll all come together and sound fine.
Would something like this be doable? Are the descriptions detailed enough? What beside a Synthesizer would one need?
I am pretty sure it is. I wanted to script a procedural music generator for a long time, problem being finding an easy way to convert text strings to midi files. Basically, how I imagine things going:
Your civilization would spawn with a number of scales with whole tones, choosing from 5 notes (a pentatonic scale) to 7, then randomly turning some flat or sharp and picking one of the notes as its starting point. At the same time, if you want to go all crazy, why not randomize time signature as well, making binary (2/2, 4/4, 8/8 etc.) and ternary (3/8, 6/8, 9/8, waltz-like sounding) or even weirder stuff possible.
Then, you need to generate multiple tracks for multiple instruments and for each rhythm instrument, you generate a small section of its track, which can be repeated: You'd let the code pick between a variation of algorithms:
- Chords: Just strike a chord of 3 notes on that scale after another. You would need to lower the chance to actually pick a note that is right next to the one that was just picked, because on larger scales, you might get dissonant sounding half-tones. Also, sometimes repeat and halve the duration of that particular chord being played. Should contain somewhere between 1-2 chords per measure.
- Arpeggio: Take the chord and play it note note by note in a randomized fashion, 1-3-5-3 or 1-3-5, or 1-5-3-5 etc., then move onto the next.
- Keeping the same base note: You fill up the generated rhythm with the same note, then switch out a few of them, going like 1-1-5-1-1-4-1-1-3-4-3-2 or something.
Putting a few blocks together, you have your verse/bridge/chorus.
Generate a different section for chorus with the same time measure and scale or even switch scale *slightly*, starting off from a higher note etc. The human mind is wired to like repetition, so re-using the same rhythm might lead to more favorable, though less complex music.
The lead instrument will have a completely alternate, more varied rhythm, so you generate your rhythm section for a whole verse/bridge/chorus. The way it will generate which note to play is that it looks at the lowest note of the current measure's chord and the next one, plays (
or has an exceedingly high probability to play) the current one or an entire octave above or below (
same note, just a whole range higher or lower). The next chord's lowest note will be stored in a variable as the "goal", to which the melody strives to get, having a higher probability to move closer to it. You could also make it go and try to pick any of the other notes of that chord as goal note, with a smaller chance of course. Also, have a random chance to remove that goal note from the rhythm section's chord, because why not.
Then, convert the whole thing into midi and dread at what monstrosity your dwarves like to listen to. Each combination of rhythm and scale would be a different style, I guess.
I did some music lessons when I was way younger, for 5 years about 15 years ago or so, so I guess asking Rick Beato would be the right thing to do. It would be awesome as an idea, yet probably
exceedingly CPU intensive.
Edit: Also, tempo should matter too, being defined by style and changing the rhythm algorithm. You might want to have a chance of holding notes longer after an arpeggio or at the end of the time measure for making it sound more peaceful. A way to make the weird time signatures sound better would be to keep in mind breaking them down, like 7/4 = 4/4 + 3/4, practically generating 4/4 measures and a 3/4 measures within a block alternately.