Skip to content

Harmonic field

harmonic_field(tonic, key)

Generate a Harmonic Field based on the tonic note and key.

Parameters:

Name Type Description Default
tonic str

First degree of the Harmonic Field.

required
key str

Key to the field. E.g major, minor, etc...

required

Returns:

Type Description
dict[str, list[str]]

A Harmonic Field.

Examples:

>>> harmonic_field('c', 'major')
{'chords': ['C', 'Dm', 'Em', 'F', 'G', 'Am', 'B°'], 'degrees': ['I', 'ii', 'iii', 'IV', 'V', 'vi', 'vii°']}
>>> harmonic_field('c', 'minor')
{'chords': ['Cm', 'D°', 'D#', 'Fm', 'Gm', 'G#', 'A#'], 'degrees': ['i', 'ii°', 'III', 'iv', 'v', 'VI', 'VII']}
Source code in musical_notes/harmonic_field.py
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def harmonic_field(tonic: str, key: str) -> dict[str, list[str]]:
    """
    Generate a Harmonic Field based on the tonic note and key.

    args:
        tonic: First degree of the Harmonic Field.
        key: Key to the field. E.g major, minor, etc...

    Returns:
        A Harmonic Field.

    Examples:
        >>> harmonic_field('c', 'major')
        {'chords': ['C', 'Dm', 'Em', 'F', 'G', 'Am', 'B°'], 'degrees': ['I', 'ii', 'iii', 'IV', 'V', 'vi', 'vii°']}

        >>> harmonic_field('c', 'minor')
        {'chords': ['Cm', 'D°', 'D#', 'Fm', 'Gm', 'G#', 'A#'], 'degrees': ['i', 'ii°', 'III', 'iv', 'v', 'VI', 'VII']}
    """
    notes, _degrees = scale(tonic, key).values()
    chords = [triad_in_the_scale(note, notes) for note in notes]
    degrees = [
        convert_degrees(chord, degree)
        for chord, degree in zip(chords, _degrees)
    ]

    return {'chords': chords, 'degrees': degrees}