Pular para conteúdo

Acordes

Módulo de acordes.

O módulo de acordes conta com funções e ferramentas necessárias para a geração de acordes.

acorde(cifra)

Gera as notas de um acorde partindo de uma cifra.

Parameters:

Name Type Description Default
cifra str

Um acorde em forma de cifra.

required

Returns:

Type Description
dict[str, list[str]]

Um dicionário com as notas e os graus correspondentes.

Examples:

>>> acorde('C')
{'notas': ['C', 'E', 'G'], 'graus': ['I', 'III', 'V']}
>>> acorde('F#')
{'notas': ['F#', 'A#', 'C#'], 'graus': ['I', 'III', 'V']}
Source code in notas_musicais/acordes.py
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
def acorde(cifra: str) -> dict[str, list[str]]:
    """
    Gera as notas de um acorde partindo de uma cifra.

    Parameters:
        cifra (str): Um acorde em forma de cifra.

    Returns:
        Um dicionário com as notas e os graus correspondentes.

    Examples:
        >>> acorde('C')
        {'notas': ['C', 'E', 'G'], 'graus': ['I', 'III', 'V']}

        >>> acorde('F#')
        {'notas': ['F#', 'A#', 'C#'], 'graus': ['I', 'III', 'V']}
    """

    if 'm' in cifra:
        notas, graus = _menor(cifra)
    elif '°' in cifra:
        nota, _ = cifra.split('°')
        tonica, terca, quinta = triade(nota, 'menor')
        notas = [tonica, terca, semitom(quinta, intervalo=-1)]
        graus = ['I', 'III-', 'V-']
    elif '+' in cifra:
        nota, _ = cifra.split('+')
        tonica, terca, quinta = triade(nota, 'maior')
        notas = [tonica, terca, semitom(quinta, intervalo=1)]
        graus = ['I', 'III', 'V+']
    else:
        graus = ['I', 'III', 'V']
        notas = triade(cifra, 'maior')

    return {'notas': notas, 'graus': graus}

semitom(nota, *, intervalo)

Calcula a distância em semitons para uma outra nota usando intervalos.

Parameters:

Name Type Description Default
nota str

Uma nota qualquer.

required
intervalo int

Um intervalo em semitons.

required

Returns:

Type Description
str

Uma nota correspondente ao intervalo.

Examples:

>>> semitom('C', intervalo=+1)
'C#'
>>> semitom('c', intervalo=-1)
'B'
Source code in notas_musicais/acordes.py
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
def semitom(nota: str, *, intervalo: int) -> str:
    """
    Calcula a distância em semitons para uma outra nota usando intervalos.

    Parameters:
        nota (str): Uma nota qualquer.
        intervalo (int): Um intervalo em semitons.

    Returns:
        Uma nota correspondente ao intervalo.

    Examples:
        >>> semitom('C', intervalo=+1)
        'C#'

        >>> semitom('c', intervalo=-1)
        'B'
    """
    posicao = NOTAS.index(nota.upper()) + intervalo

    return NOTAS[posicao % 12]

triade(nota, tonalidade)

Gera tríades a partir de uma tônica e uma tonalidade.

Parameters:

Name Type Description Default
nota str

Uma nota da qual se deseja obter um acorde.

required
tonalidade str

Tonalidade na qual será formado o acorde.

required

Returns:

Type Description
list[str]

A tríade do acorde referente a nota e a tonalidade.

Examples:

>>> triade('C', 'maior')
['C', 'E', 'G']
>>> triade('C', 'menor')
['C', 'D#', 'G']
Source code in notas_musicais/acordes.py
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
def triade(nota: str, tonalidade: str) -> list[str]:
    """
    Gera tríades a partir de uma tônica e uma tonalidade.

    Parameters:
        nota (str): Uma nota da qual se deseja obter um acorde.
        tonalidade (str): Tonalidade na qual será formado o acorde.

    Returns:
        A tríade do acorde referente a nota e a tonalidade.

    Examples:
        >>> triade('C', 'maior')
        ['C', 'E', 'G']

        >>> triade('C', 'menor')
        ['C', 'D#', 'G']
    """
    GRAUS = (0, 2, 4)
    notas_da_escala = escala(nota, tonalidade)['notas']

    return [notas_da_escala[grau] for grau in GRAUS]