The key in which a song is played depends on the vocal-range of the singer. As musicians we have to accommodate that in different ways for different instruments. What I've found to be a simple solution is to store lyrics with chords in the key actually played and combine that with a tuning offset per musician. For guitarists a positive offset translates to the position of the capo while a negative means down-tuning. Every guitar-player in a band may have his own preferences wrt how to play a song. A song in A-major may be ok in standard tuning for one, while another prefer a capo in the 2nd position and yet another prefer a capo in the 5th. Similarly some keyboard-players do not feel equally comfortable with every key and prefer to tune their keyboard up or down a number of semi-tones.
My suggestion is thus to:
- Store chords as present with bracketed chords as the standard where embedded in lyrics
- Have the noted key for the song synchronised with chords when transposing
- Add a user-specific tuning-offset attribute for each song where the offset in number of semitones can be noted
- Each user should have access to adjust his/her tuning offsets even if the user have no regular write access
- All user offsets should be adjusted along with embedded chords and the key of the song when transposing.
- Lists should be displayed with the key actually played along with the individual tuning offset
- Lyrics should then be transposed when rendered on screen according to the users noted offset
- The tuning-offset for each user must be clearly visible in the performance interface as a number prefixed with + or -. It should preferably also be visible in the song-list and set-lists
An example:
A song played in A-major would have lyrics with embedded chords in A.
Keyboard-player 1 is happy to play in any key and does register any tuning offset
Keyboard-player 2 is a rookie who doesn't master much beyond C-major and use an offset of -3. His display of lists will show the key played and the offset. Lyrics rendered with embedded chords will display chords for playing in C-major (A minus -3 semitones)
Guitarist 1 plays lead which doesn't fly too well with capos, and will thus not note an offset
Guitarist 2 is ok with playing in A with standard tuning, but prefer the same chord-shapes should the song be transposed up, and thus note 0 as an offset to be adjusted with transposition
Guitarist 3 prefer to play the song in G and puts a capo in position 2 with a tuning offset of +2. His lyrics will be rendered with chords for playing in G (A minus +2 semitones).
Then the singer asks to go up a half step from A to Bb. Transposing of the song would then increment all noted tuning offsets accordingly:
Keys1: has no offset and will now read chords as written in Bb.
Keys2: had -3 now incremented to -2 semitones and still have lyrics+chords rendered as in C-major
Guitar1: like KB1
Guitar2: had offset set to 0 that now gets incremented to +1 and will still have lyrics with chords rendered in A
Guitar3: had offset set to +2 that now gets incremented to +3 and still have lyrics+chords rendered in G