I'm trying to write a computer program to generate simple random chord progressions. Is there a way of ranking chords based on how nice they will sound after the previous ones?

Any advice would be amazing, thanks.


3 Answers 3


That is a very complex question. If you are just looking for simplicity, you could follow some fairly straight-forward guidelines though.

Choose some "candidate" chords. I would think I, ii (minor), iii (minor), IV, V, and vi (minor) are all very good candidates for a nice sounding progression. vii° could be a used very sparingly (it would be a diminished chord, which are very dissonant).

Choose the order of the progression. (Note that these are not requirements for chord progressions in general, but they do provide some programmatic "rules" for a nice sounding progression).

  1. Start the progression on I or VI (I for a "major" sounding song, VI-minor for a "minor" sounding song). It's very common (and familiar sounding) to start songs this way.
  2. Make sure each chord in the progression shares at least one note with the chord before it. This is very natural sounding, as it helps to transition between the chords. An example would be going from I to V (in the key of C, this would be a C-chord to a G-chord. This sounds good partly because they share the 'G' note).
  3. Limit the progression to about 7 chords maximum. It can be off-putting if there is no repetition or consistency in a progression. And they don't have to be 7 different chords (I-IV-V-IV is a very common progression, for instance), but I wouldn't let your pattern get longer than that. (7 is not a completely arbitrary choice on my part, as it's how many chords it takes to complete a Circle Progression from I).
  4. End the progression on the chord you started with. If you started with I, end on I. It provides "resolution" to the listener. If you want an example of the tension left by not resolving, listen to a song that ends on IV ("Like a Stone" by Audioslave comes to mind haha)

These are just some basic guidelines, but it could be a start for what you're trying to do. Good luck!

EDIT: I don't want to make an assumption about your knowledge of musical notation. So, just to be clear, when I say I, ii, iii, IV, V, vi, and vii°, these would translate to (in the key of C) C, D-minor, E-minor, F, G, A-minor, and B-diminished, respectively.

  • 2
    It is common to use lower case to indicate minors. So, that would be I, ii, iii, IV, V, vi. I don't know how they indicate diminished. Commented Aug 23, 2011 at 16:36
  • 2
    I've edited the answer, thanks! I had completely forgotten about that convention. Now that you've reminded me, I believe dimished is lowercase with a degree symbol (like vii°). Commented Aug 23, 2011 at 17:00

Use the chord ladder to determine your chord progression. There's a thorough explanation of it here, but basically, you want to move down the ladder.

Chord Ladder

So the iii goes to the vi, which can go to either the ii or the IV. Note that in the last measure, you can either resolve to the I, ending your progression or you can go back to the second rung and play the vi and then go either to a ii or IV.

You could follow this in either major or minor. So either do I ii iii IV V vi vii* for Major or i ii* III iv V VI vii* for minor

So pick major or minor. Then pick a chord to start on. Then follow the chord ladder (making a random choice if one is available). When selecting chords, either play two consecutive chords for 2 beats each, or play one chord for 1 or 2 measures. Always end on your I.

It won't be the most interesting thing musically, and you may get the odd funny result, but it will almost always sound pleasing.


The answer by jadarnel27 is a good one, but there are other scenarios one would prefer when a computer program is created.

For example:

1) Your computer program can be used to create abstract forms of music. Which brings other interesting questions to the table: what is random? And how to connect randomness?

I would like to advise you not (only) to think (to much) in the 'progression way'

Example: Your computer program creates a 'chord' (so this means multiple sounding notes) Now the question is: how to build the next chord and connect those notes. For example (easy one) C (c-e-g) to G (g-b-d) would go like: c->b e->d g=g

You can play with these connections (look at big band composers but also Stravinsky) learn how you can connect chords. You could find standards that would apply to all chord connections.

Believe me, the most strange random chords will sound awesome.

You can also think in upper structures, so: CMaj7(b9, b13) would be a C chord and a C#min chord at the same time. How can they move in combination?

Long story short: think of ways 'how to connect' the chords, if this is a consistent one, your music will sound coherent.

PS: Also take a look (=listen) at Stockhausen how he deals with this question.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.