def transpose_to_all_keys_gen(score: music21.stream.Score, keys: [str]=KEYS) \ -> Generator[music21.stream.Score, None, None]: for key in keys: score_key = score.analyze('key') if score_key.tonic.fullName == key: yield score else: interval = music21.interval.Interval(score_key.tonic, music21.pitch.Pitch(key)) yield score.transpose(interval)
def transpose(song: m21.stream.Score) -> m21.stream.Score: key = song.getElementsByClass(m21.stream.Part)[0].getElementsByClass( m21.stream.Measure)[0][4] if not isinstance(key, m21.key.Key): key = song.analyze("key") if key.mode == "major": interval = m21.interval.Interval(key.tonic, m21.pitch.Pitch("C")) elif key.mode == "minor": interval = m21.interval.Interval(key.tonic, m21.pitch.Pitch("A")) return song.transpose(interval)
def get_key(score: music21.stream.Score) -> str: return score.analyze('key').tonic.fullName