Пример #1
0
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)
Пример #2
0
    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)
Пример #3
0
def get_key(score: music21.stream.Score) -> str:
    return score.analyze('key').tonic.fullName