Accordi e aggregati verticali¶
import os
import sys
path = os.path.abspath('rappresenta')
sys.path.append(path)
from main import *
Introduzione ¶
Nel capitolo precedente abbiamo visto come sia possibile creare delle relazioni orizzontali nello sviluppo di una linea melodica che può assumere diverse forme:
- una sola linea melodica eseguita da una sola voce è una monodia.
melo = [69, 74, 76, 77, 75, 74, 0, 72, 67, 62, 66, 70]
mdur = [0.25, 0.25, 0.25, 0.25, 0.5, 0.5, 0.25, 0.25, 0.25, 0.25, 0.5, 0.5]
voce1 = PSeq(melo, mdur)
voce1.start()
voce1.join()
- più linee melodiche differenti eseguite sovrapposte da più voci in una dimensione orizzontale formano una polifonia
voce1 = [72, 72, 71, 69, 77, 74, 76, 72]
mdur1 = [0.75, 0.25, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]
voce2 = [64, 65, 67, 69, 67, 72, 74, 72, 71, 69, 67, 79]
mdur2 = [0.25, 0.25, 0.25, 0.25, 0.5, 0.5, 0.25, 0.25, 0.25, 0.25, 0.5, 0.5]
voce3 = [60, 64, 65, 67, 64]
mdur3 = [1, 1, 1, 0.5, 0.5]
voce1 = PSeq(voce1, mdur1)
voce2 = PSeq(voce2, mdur2)
voce3 = PSeq(voce3, mdur3)
voce1.start()
voce2.start()
voce3.start()
voce1.join()
voce2.join()
voce3.join()
- una o più linee (dimensione orizzontale) che fondano le altezze su strutture armoniche (accordi - dimensione verticale) sono una melodia.
melo = [84, 79, 76, 79, 77, 77, 79, 77, 76, 74, 76, 76]
mdur = [0.25, 0.25, 0.25, 0.25, 0.5, 0.5, 0.25, 0.25, 0.25, 0.25, 0.5, 0.5]
armo = [[60,64,67,72], [60,65,69,72], [62,65,67,71], [60,64,67,72]]
adur = [1, 1, 1, 1]
voce1 = PSeq(melo, mdur)
voce2 = PSeq(armo, adur)
voce1.start()
voce2.start()
voce1.join()
voce2.join()
Ognuna di queste forme può assumere una funzione sintattica all'interno di un preciso linguaggio musicale.
una monodia ad esempio può svilupparsi secondo le regole e la grammatica del canto gregoriano così come di un brano atonale.
una polifonia invece può essere costruita secondo le regole del contrappunto piuttosto che del sistema seriale.
una melodia si può sviluppare all'interno di diversi sistemi armonici come l'armonia classica, l'armonia funzionale propria dei linguaggi Jazz piuttosto che la giustapposizione accordale tipica dei linguaggi pop.
Le sintassi di alcuni tra questi linguaggi saranno affrontate in capitoli dedicati.
Se consideriamo la nota come la minima unità semantica di un qualsiasi linguaggio musicale, possiamo considerare gli accordi come la minima unità semantica di quelli che si fondano su sistemi armonici (dimensione verticale).
Accordi ¶
Gli accordi sono formati da tre o più note sovrapposte.
Possono essere di diverso tipo come maggiori, minori, diminuiti, di settima, di nona, etc.

acco = [[60,64,67],[60,64,67,70],[67,69,70],[64,69,75]]
adur = [2,2,2,2]
voce1 = PSeq(acco, adur)
voce1.start()
voce1.join()
La loro costruzione necessita di due ingredienti:
- una nota fondamentale (root note) caratterizzata da un'altezza definita che può essere definita in due modi:
- esplicitamente indicando il nome della nota (F#Min $\rightarrow$ accordo di fa diesi minore).
- facendo riferimento al tipo di scala e al grado sul quale costruire l'accordo (IVMaj $\rightarrow$ accordo maggiore sul quarto grado).
- un set di intervalli che applicati alla fondamentale permettono di derivare le altre note dell'accordo.
Possiamo definirli in diversi modi a seconda della prassi del linguaggio musicale di riferimento.
nella prassi barocca attraverso delle cifre poste sulla linea melodica della parte più bassa (basso continuo). Gli interpreti realizzavano le armonie improvvisando estemporaneamente su uno strumento a tastiera come clavicembalo o organo oppure a pizzico come l'arciliuto.
nella prassi classica accade qualcosa di simile ma le armonie sono realizzate e scritte in una partitura, non improvvisate.
nella prassi jazz e pop sono indicate da sigle alfabetico/numeriche poste sulla linea melodica del canto o comunque la più alta (l'opposto della prassi barocca) e gli interpreti realizzano anche in questo caso le armonie improvvisando estemporaneamente.
nei linguaggi informatici sono indicate da numeri o simboli e possono essere formalizzati attraverso algoritmi.
Triadi ¶
Per ridurre il campo esponiamo alcune caratteristiche degli accordi che valgono per tutti i linguaggi armonici trattando come esempio l'armonia tonale classica.
L'accordo fondamentale è la triade ovvero un accorfo formato da tre note: la fondamentale la terza e la quinta indipendentemente dalla loro posizione.

acco = [[60,64,67],[64,72,79],[55,72,76],[64,79,84]]
adur = [2,2,2,2]
voce1 = PSeq(acco, adur)
voce1.start()
voce1.join()
Ogni grado (rappresentato attraverso un numero romano) di una scala di qualsiasi tipo può essere utilizzato come fondamentale.

magg = [[60,64,67],[62,65,69],[64,67,71],[65,69,72],[67,71,74],[69,72,76], [71,74,77]]
mino = [[60,63,67],[62,65,68],[62,65,69],[63,67,70],[63,67,71],[65,68,72],[65,69,72],[67,70,74],[67,71,74],[68,72,75],[69,72,75],[70,74,77],[71,74,77]]
esat = [[60,64,68],[62,66,70],[64,68,72],[66,70,72],[68,72,74],[70,72,76]]
adur = [1,1,1,1,1,1,1,1,1,1,1,1,1]
seq = [magg, mino, esat]
for i in seq:
voce1 = PSeq(i, adur)
voce1.start()
voce1.join()
I gradi diatonici di una scala hanno dei nomi legati alla loro funzione armonica ovvero un particolare rapporto di equlibrio che si instaura tra loro.
- I - Tonica.
- II - Sopratonica.
- III - Mediante o modale.
- IV - Sottodominante.
- V - Dominante.
- VI - Sopradominante.
- VII - Sensibile.
Tipi ¶
Le triadi possono essere di seconda, di terza, di quarta, etc. a seconda dell'intervallo preso come riferimento del sistema armonico.
Ad esempio nel sistema tonale classico le triadi sono di terza ovvero costruite attraverso una sovrapposizione di M3, m3, A3, d3.
Le combinazioni intervallari delle triadi costruite sulla scala maggiore definiscono tre tipi di triadi:
- maggiore - 3M + 3m - sul I, IV e V.
- minore - 3m + 3M - sul II, III e VI.
- diminuita - 3m + 3m - sil VII.
La scala minore armonica aggiunge la triade aumentata costruita sul III.

magg = [[60,64,67],62,64,[65,69,72],[67,71,74],69, 71]
mino = [60,[62,65,69],[64,67,71],65,67,[69,72,76], 71]
dimi = [60,62,64,65,67,69,[71,74,77]]
augh = [60,62,[63,67,71],65, 67,68,71]
adur = [1,1,1,1,1,1,2]
seq = [magg, mino, dimi, augh]
for i in seq:
voce1 = PSeq(i, adur)
voce1.start()
voce1.join()
Alcuni trattatisti nell'indicare il grado sul quale è costruito l'accordo utilizzano lettere maiuscole per gli accordi maggiori (IV) mentre lettere minuscole per gli accordi minori (iv) ma in ambito informatico questa rappresentazione potrebbe innescare a diverse problematiche.
Rivolti ¶
Tutti gli accordi (non solo le triadi) può presentarsi con una qualsiasi nota che lo compone come nota più bassa.
Per le triadi:
- stato fondamentale - posizione originale (accordo di quinta).
- primo rivolto - la terza come nota più bassa (accordo di sesta).
- seondo rivolto - la quinta come nota più bassa (accordo di quarta e sesta).

Notiamo come il grado della scala sia indicato sempre con un numero romano mentre il rivolto un numero arabo.
acco = [[60,64,67],[64,67,72],[67,72,76]]
adur = [2,2,2]
voce1 = PSeq(acco, adur)
voce1.start()
voce1.join()
Intervalli consonanti e dissonanti ¶
Il sistema armonico tonale ha ereditato dal contrappunto i concetti di consonanza e dissonanza.
Tra i due linguaggi però ci sono delle sottili differenze.
Per l'armonia un intervallo consonante è caratterizzato da una sonorità stabile.
PNote([60,64,67],2)
<main.PNote at 0x15e38bf50>
Mentre un intervallo dissonante è instabile e necessita di una risoluzione su uno consonante.
acco = [[56,60,66], [55,62,67]]
adur = [2,2]
voce1 = PSeq(acco, adur)
voce1.start()
voce1.join()
Come retaggio storico ereditao dal contrappunto sono considerati:
- consonanti gli intervalli perfetti o giusti e le terze e le seste maggiori o minori. Nel contrappunto si distingueva tra consonanze perfette (le prime due) e imperfette le terze e le seste).

acco = [[60,60],[60,63],[60,64],[60,67], [60,72]]
adur = [2,2,2,2,2]
voce1 = PSeq(acco, adur)
voce1.start()
voce1.join()
dissonanti gli intervalli eccedenti o diminuiti e le seconde, settime e none maggiori o minori.
Gli intervalli dissonanti sono quelli che generano il senso del movimento in musica.
acco = [[60,61],[60,62],[60,66],[60,70], [60,71]]
adur = [2,2,2,2,2]
voce1 = PSeq(acco, adur)
voce1.start()
voce1.join()
- la quarta giusta rappresentano un'eccezione:
- se isolata è dissonante
- se al di sotto c'è una terza maggiore o minore o un quinta perfetta è considerata consonante.

acco = [[67,72],[67,72,76],[64,67,72],[60,67,72]]
adur = [2,4,2,3]
voce1 = PSeq(acco, adur)
voce1.start()
voce1.join()
Voci e raddoppi ¶
L'armonia classica a partire dal settecento è pensata a quattro parti (chiamate voci anche se non cantate).
Questo avviene indipendentemente dall'organico strumentale dove alcuni strumenti possono raddoppiare parti di un'armonia comunque pensata a a quattro parti.
Le quattro parti possono essere contrassegnate per definizione come le quattro voci del canto ognuna con il proprio ambito.

Se nel contrappunto ogni voce aveva una propria chiave (chiavi antiche).

Nella scrittura moderna sono disposte su due righi ognuno dei quali contiene due voci.

Huston abbiamo un problema: le triadi sono formate da tre note mentre in questo caso le voci sono quattro.
Soluzione: raddoppiamo una nota che come regola estrememente generale è da scegliere secondo questo ordine di preferenza:
- fondamentale
- quinta
- terza
- altro
La sensiblie se parte di un accordo costruito sulla dominante o sul VII grado non dovrebbe mai essere raddoppiata perchè può sia dare problemi di condotta delle parti sia un senso di vuoto diminuemdo l'effetto tensivo caratteristico di questi accordi.

acco = [[55, 59, 62, 71],[47,53,62,71]]
adur = [3,3]
voce1 = PSeq(acco, adur)
voce1.start()
voce1.join()
Parti strette e late ¶
Gli accordi possono assumere due posizioni:
- stretta (armonia a parti strettte) quando le tre voci superiori sono il più vicino possibile ovvero comprese nell'ottava. Generalmente restituisce una sonorità più piccola, netta.

acco = [[48, 60, 64, 67],[48,64,67,72],[48,67,72,76]]
adur = [2,2,2]
voce1 = PSeq(acco, adur)
voce1.start()
voce1.join()
- lata (armonia a parti late) quando le parti sono più o meno equidistanti l'una dall'altra e l'intervallo tra soprano e tenore è maggiore di un ottava. In genere questa posizione restituisce una sonorità più piena.

acco = [[48, 52, 60, 64],[48,55,64,72],[48,60,67,76]]
adur = [2,2,2]
voce1 = PSeq(acco, adur)
voce1.start()
voce1.join()
Queste due posizioni sono quasi sempre presenti entrambe in un brano e la scelta di una o dell'altra dipende da molti fattori tra i quali la condotta melodica delle parti piuttosto che il registro delle voci o degli strumenti impiegati.
Recondite armonie ¶
Alcuni brevi esempi di sistemi armonici costruiti su accordi che si basano su armonie differenti ripetto a quelle costruite sulla scala maggiore e minore.
- C.Debussy - Sistemi armonici di culture extraeuropee.
- B.Bartok - Sistemi armonici della tradizione musicale popolare.
- I.Stravinskij - Politonalità.
- P.Hindemit - Sistema armonico proprio.
- G.Grisey - Armonia spettrale.
- S.Reich - iterazione singolo accordo.
Sono tutti autori del '900 che hanno ricercato nuovi linguaggi fondando il loro pensiero musicale sull'aspetto verticale della musica dopo la dissoluzione dell'armonia classica di fine '800 realizzata da autori come R.Wagner, G.Malher, R.Strauss, etc.
Terminologia ¶
- Monodia - singola voce (linea melodica).
- Polifonia - sovrapposizione di più voci (linee melodiche).
- Melodia - linea melodica fondata su rapporti armonici.
- Accordo - sovrapposizione di tre o più note interpretabile come unità sintattica.
- Basso continuo - cifratura del basso propria dell'epoca barocca.
- Basso numerato - cifratura del basso propria dell'epoca calssica e moderna.
- Triade - accordo base dell'armonia classica occidentale formato da tre note.
- Gradi diatonici - nomi dei gradi di una scala su base armonica.
- Rivolti - cambiano a seconda della nota più bassa.
- Raddoppi - raddoppiare una nota dell'accordo in un brano con più di tre voci.
- Parti strette o late - tipo do disposizione delle note di un accordo.
Domande sospese ¶
- Riflessioni sui rapproti tra sistemi accordali e armonici, significati musicali ed emozioni nei brani proposti nel paragrafo [Recondite armonie]().
- Il significato musicale di un brano cambia a seconda della disposizione armonica delle voci (parti strette o late) oppure è la scelta dipende solamente dall'organico strumentale?
- Gli accordi dissonanti devono sempre risolvere su accordi consomanti?
- La struttura accordale (il tipo di accordo) influenza sempre il discoorso musicale oppure è un parametro indipendente?
- Realizzare agglomerati sonori accordali in Audacity tenendo presente che devono essere percepite e rappresentate come unità sintattiche.
Rappresentazioni informatiche ¶
Codice ¶
Per una rappresentare gli accordi all'interno del modulo python che stiamo esplorando dobbiamo definire due classi principali:
- TertianChordTemplate - nel quale sono definiti i tipi di accordo e gli intervalli senza specificare l'altezza della fondamentale (root note). Per ogni tipo di armonia esiste una classe dedicata (SecondalChordTemplate, QuartalChordTemplate, SecondaryChordTemplate). In questo paragrafo prenderemo in considerazione solo gli accordi costruiti secondo l'armonia per terze.
- Chord - attraverso il quale viene costruito l'accordo indicando l'altezza della fondamentale.
Sono necessarie due classi e non una per permetterci di soddisfare entrambe le sintassi principali impiegate ai nostri giorni nello specificare la fondamentale:
- CMaj - attraverso il nome della nota diatonica.
template = TertianChordTemplate.parse('CMaj') # .parse() formatta la stringa in modo che sia lettta correttamente da Chord
accordo = template.create_chord() # crea l'accordo
print(accordo) # N.B. la T iniziale sta per Tertian
TCMaj [C, E, G]
- IVMaj - attraverso il grado di una scala di riferimento.
# Tipo scala Fondamentale
tonalita = Tonality.create(ModalityType.Major, DiatonicTone('F'))
temp = TertianChordTemplate.parse('IVMaj')
chor = temp.create_chord(tonalita) # Specifica la tonalità
print(chor)
TIVMaj [Bb, D, F]
I tipi di accordo definiti in una collezione interna alla classe TertianChordType sono:

Dato lo scopo esclusivamente teorico e dimostrativo dei paragrafi dedicati alla rappresentazione informatica questa non è una lista esaustiva ed alcune sigle possono differire ad esempio da quelle impiegate nel jazz o nel pop.
Possiamo aggiungere note estranee ai tipi di accordo attraverso la seguente sintassi.
template = TertianChordTemplate.parse('CMajSus4+#9+b13')
accordo = template.create_chord()
print(accordo)
TCMajSus4A:9 m:13 [C, F, G, D#, Ab]

PNote([60,65,67,75,80],2)
<main.PNote at 0x105daecc0>
Possiamo anche indicare una fondamentale differente (rivolto) con il simbolo @ seguito dall'indice della nota che vogliamo come fondamentale a partire da 1 (sx).
template = TertianChordTemplate.parse('CMajSus4+#9+b13@2')
accordo = template.create_chord()
print(accordo)
TCMajSus4A:9 m:13@2 [F, C, G, D#, Ab]

PNote([53,60,67,75,80],2)
<main.PNote at 0x15e3e9400>
Vorrei sottolineare come la sintassi attraverso la quale andiamo a specificare le sigle degli accordi l'abbiamo stabilita noi mediando tra la prassi e la sintassi del linguaggio musicale da rappresentare e le caratteristiche proprie della sintassi del linguaggio informatico che stiamo impiegando.
Musica ¶
Approfondiamo tre aspetti semiografici legati agli argomenti di questo capitolo.
! /Applications/Frescobaldi.app/Contents/MacOS/Frescobaldi
qt.qpa.fonts: Populating font family aliases took 117 ms. Replace uses of missing font family "Monospace" with one that exists to avoid this cost.
Accordi ¶
Per scrivere degli accordi dobbiamo includere le altezze tra i simboli < > e successivamente specificare la durata.
\version "2.24.3" \language "english"
\relative c' {
Alcune particolarità riguardo le legature di valore.
\relative c' {
<c e g>2~ 2
<c e g>2~ <c e g c>
<c~ e g~ b> <c d g c>
}
StaffGroup ¶
Possiamo ottenere diversi tipi di raggruppamento dei righi musicali:
- semplice sovrapposizione di voci.
<<
\new Staff \relative { c''1 c }
\new Staff \relative { c''1 c }
>>
- con parentesi quadra iniziale (StaffGroup) e le stanghette di battuta che collegano tutti i righi.
\new StaffGroup
<<
\new Staff \relative { c''1 c }
\new Staff \relative { c''1 c }
\new Staff \relative { c''1 c }
>>
- con parentesi quadra iniziale (ChoirGroup) e le stanghette di battuta indipendenti per ogni rigo.
\new ChoirStaff << \new Staff \relative { c''1 c } \new Staff \relative { c''1 c }
- con parentesi graffa iniziale (GrandStaff) e le stanghette di battuta che collegano tutti i righi.
\new GrandStaff
<<
\new Staff \relative { c''1 c }
\new Staff \relative { c''1 c }
\new Staff \relative { c''1 c }
>>
- partiture per Pianoforte.
\new PianoStaff
<<
\new Staff \relative { c''1 c }
\new Staff \relative { c''1 c }
>>
Suono ¶
Per quanto riguarda questo aspetto possiamo pensare gli accordi come morfologie sonore complesse da impiegare come unità sintattiche.
Il procedimento è simile a quello illustrato nel capitolo precedente ma su più tracce.
