Change key in sequence. Transposing music chords

Hi, I need some help in finding a solution to take manual transposing work (changing music chords) from one key to another.

Currently I have 1000+ chord sheets on Word. Each basically divided in two, one line key notes and the following the corresponding lyrics. When I need to change the main key from ie F to G, I have to manually change all the chords on the sheet which I prefer to automate.

Here is an example of a song with two different keys:

Here is the sequence of how the notes change from one to another:
Screenshot 2023-08-14 at 20.52.40

To change the notes from F to G is two notes so all other chords must +2 on the sequence. That is not what I am worried about but the chord sheet itself.
The chords correspond to the lyric so the positions are relative and change per song.

How would I go about to create a structure that is similar to the screenshot and have the functionality to change the key notes at will?

Clarifying question:

Are you asking how you could build this out in Bubble - meaning to retype all of the songs again and store then in the Bubble database and then create a tool that you can add/edit/view songs in the future?

Or are you asking how you can create a tool in Bubble that will read in a word document, replace these notes as specified and then save it back again as a word doc?

Well this is in my area of familiarity.

You will not be able to do this entirely in Bubble, at least not realistically.

It’s also not as straight forward as shifting up or down an interval. You (technically) need to pay attention to enharmonics, and allow users to render the sharp or flat version of a key (e.g guitar players will like C# major, pianists will like Db major).

So, here’s how I would go about doing it:

Write out each lead sheet in an Excel/Google sheet manually. In column 1, have the chord, and in column 2, have the lyrics for that chord. So each time you change chord, start a new row. Have another column for the song name/ID too.

Use a Python script to parse each song and create all of the key variations. Mingus library is pretty good for this (it’ll require you to format your chords in a particular way). Add a fourth column which is the key.

So, now you have a table of songs with the chords for each key.

In Bubble, your data types will be:


  • name (text)
  • Key Variations (list of Key Variations)
  • composer (text)
  • any other fields you want e.g difficulty

Key Variation

  • Key (an Option Set ‘Key’ which has all of the possible keys)
  • Chord Texts (List of Chord Texts)
  • Song (Song)

Chord Text

  • chord (text)
  • lyric (text)

So, the first three Chord Texts for Amazing Grace might be

C7 A-
F mazing
F7 grace, how

Display these in a repeating group.

I appreciate that’s hardly no code or low code but there’s not another reasonable way to process that data usefully in Bubble.

EDIT: I have an unusual familiarity with this question as I’m developing a music e-learning platform for my other business so needed to generate hundreds of chords and intervals…

1 Like

On that topic, would this work?

This could easily be incorporated into Bubble but I have no idea if it is musically correct…

The main part that I am after is to transpose (change the notes on chord sheet) the key when needed. As the example above F to G. So if I have to retype all the chord sheets for all songs that would be fine. Thereafter have all the songs on the platform and not in Word any longer.

Thanks so much for the response, it makes sense to do it as you describe.

In my case it can technically just move up or down an interval. This will not be a commercial app so I have some play room with imperfections.

Is this a case where a horizontal table would come in handy to display the lyrics horizontally as seen with the screenshot of my song?

How would I go about where a lyric (the word ‘that’ from the first verse) has two chords namely C7/E? Perhaps with a hack to also split the word in two to make it work.
C7 th
/ a
E t

Could you provide me with a link to a good tutorial on Python using the Mingus library for my use case?

I will setup as described, test the database structure and frontend layout before going deep in Python and revert back. I appreciate the help @georgecollier

It’s not two chords, it’s C7 with E as the root note. But it doesn’t make a difference because we just format each chord as text.

There aren’t really any tutorials for this - try ChatGPt and see how you go…

This topic was automatically closed after 70 days. New replies are no longer allowed.