SongSprouter is a fun algorithmic music composition application. It composes a song completely automatically as a melody over a chord progression, then writes a minimal arrangement of the song as a MIDI file and plays it. You can then modify aspects of the arrangement such as the tempo, the chordal rhythm, which instrument is used for each part, and the loudness balance between the parts. You can also modify the composition itself by dragging notes and chords around on the staff, and then perhaps resume the automatic composing to see what it does with your edits. You can save the songs that you like and play them back at any time. You can also rate songs to tell SongSprouter how to gradually adjust its composing parameters toward what you like, and (advanced) you can even directly adjust the parameters yourself to see how it affects what gets composed.
SongSprouter runs on Microsoft Windows, from Windows XP through Windows 10. It is free to download, and here is the page for downloading it.
Here is a very short song that SongSprouter composed. Click any song image to hear the song (and click it again to stop playback).
Very short songs like that one that are just four measures long are usually composed in less than 20 seconds, so you can quickly generate those one after another for real-time fun. Longer songs take exponentially longer to compose, and so are better done in the background. Here's a somewhat longer one, which doesn't loop back through a second time like the first one.
Here's a longer one with multiple sections that are marked with red bar lines.
And an even longer one (except that this one does not loop back). The three sections are in different keys.
Click here for a page of more SongSprouter songs.
The following video shows SongSprouter in action as it composes a new very short song. It shows notes and chords being shifted from an initially random state to places where they make increasing musical sense.
The notes are jumping around due to the way that the algorithm works. It begins with a set of melody notes that have completely random pitches and times, which provides the full context for the algorithm to work with. (Sometimes the chords are initally random as well, and other times they begin with basic preset chord progressions.) Then it goes into a loop where it selects a note or chord and looks at nearby pitches and times to which it could be shifted. It scores each possible move according to several dozen parameters that judge musical sensibility, and then moves the note or chord to the place that has the highest score. It stops composing when it reaches a state where it cannot find a move for any chord or melody note that would improve the total score of the song.
Next is a video of composing a somewhat longer song, which takes longer. (The composing time is roughly proportional to the square of the number of melody notes, because every note can affect every other note.)
This video also demonstrates how you can interrupt composing to play what it has composed so far, to hear if it's worth continuing with that song. You can also resume composing while it's playing what it had composed up to that point, to save time. This video also shows how you can go into the menus to modify the arrangement while it's composing and/or playing (though you need to restart playback to hear the updated MIDI file).
Click here for a page of more SongSprouter composing videos.
Here's the list of commands in the help view. Most everything has a keyboard shortcut for working quickly.
There are sets of nested menus for options (also known as preferences), modifying the arrangement that's written to a MIDI file, modifying the probability that various song properties will be randomly chosen for each new song, and adjusting the composing parameters that judge musical sensibility. Samples of those menus can be found on the following pages.
Options (aka Preferences)
The Arrangement
Song Property Probabilities
Composing Parameters
SongSprouter is written in Allegro Common Lisp from Franz Inc..
The author of SongSprouter is Ken Cheetham.