L’altezza (o frequenza) di un suono è il parametro legato alla sensazione di gravità/acutezza che si percepisce e dipende dalle frequenze di variazione delle onde elementari che compongono l’onda sonora.
Possiamo specificare questo parametro in tre diversi tipi di notazione simbolica:
from IPython.display import HTML
HTML('<center><img src="esempi/Simboli.png" width="40%"></center>')
Simboli alfabetici - determinano l'altezza come nomi di una scala o un modo. Sono relative alle regole sintattiche (rapporti intervallari) del sistema di regole musicali di riferimento.
Esempi: Scala di Do maggiore, Scala di Fa minore, Modo frigio, etc.
from IPython.display import HTML
HTML('<center><img src="esempi/Nomi.png" width="40%"></center>')
Guido d'Arezzo - Inno a San Giovanni Battista (1028 ca.)
from IPython.display import HTML
HTML('<center><video width="40%" controls> <source src="media/nomi.mp4"></video></center>')
Gradi - determinano l'altezza come posizioni in una scala o in un modo. Sono relative alle regole musicali (rapporti intervallari) del sistema di riferimento ma non univochi in quanto permettono una trasposizione dinamica del modello intervallare (un I grado può essere un do, oppure un fa, oppure un sol...).
Esempi: Scala maggiore, Scala per toni interi, Scala pentatonica, etc.
from IPython.display import HTML
HTML('<center><img src="esempi/Gradi.png" width="40%"></center>')
Rapporti intervallari - determinano l'altezza come distanza da un'altezza di riferimento (root note) in genere definita con il valore 0. L'unità può corrispondere al semitono o a un altro passo di riferimento. Non sono relative alle regole musicali (rapporti intervallari) di alcun sistema di riferimento e non sono univochi in quanto la loro altezza dipende dalla root note.
do re mi fa sol la si 0 2 4 5 7 9 11
from IPython.display import HTML
HTML('<center><img src="esempi/Intervalli.png" width="40%"></center>')
from IPython.display import HTML
HTML('<center><img src="esempi/Midi.png" width="40%"></center>')
Oltre ai valori midi esistono altre rappresentazioni simboliche assolute impiegate:
from IPython.display import HTML
HTML('<center><img src="esempi/Altezze.png" width="63%"></center>')
from IPython.display import HTML
HTML('<center><img src="esempi/Frequenze.png" width="40%"></center>')
Un'onda periodica è data da un fenomeno vibratorio che si ripete identico a se stesso a intervalli di tempo uguali.
Possiamo rappresentare graficamente un onda attraverso un sistema di riferimento cartesiano:
La frequenza di un suono periodico è misurata in Hertz o cps (cicli per secondo) ovvero si misura quante volte il periodo si ripete uguale in un secondo.
import os
import sys
sys.path.insert(0, os.path.abspath('moduli'))
import parametri as par
%matplotlib inline
freq = 4# Frequenza (Hz o cps)
par.sine(freq)
L'orecchio umano nelle sue condizioni ottimali percepisce suoni compresi tra 20 e 20.000 Hz.
Nella seguente tabella i rapporti tra alcune unità di misura appena esposte.
Nota | MIDI | Rapporto | Frequenza (Hz) | |
---|---|---|---|---|
Do | 60 | $1:1$ | 261.6 | |
Do# o Reb | 61 | $\sqrt[12]{2}$ | 277.2 | |
Re | 62 | $\sqrt[12]{2^2}$ | 293.7 | |
Re# o Mib | 63 | $\sqrt[12]{2^3}$ | 311.1 | |
Mi | 64 | $\sqrt[12]{2^4}$ | 329.6 | |
Fa | 65 | $\sqrt[12]{2^5}$ | 349.2 | |
Fa# o Solb | 66 | $\sqrt[12]{2^6}$ | 370.0 | |
Sol | 67 | $\sqrt[12]{2^7}$ | 390.0 | |
Sol# o Lab | 68 | $\sqrt[12]{2^8}$ | 415.3 | |
La | 69 | $\sqrt[12]{2^9}$ | 440.0 | |
La# o Sib | 70 | $\sqrt[12]{2^{10}}$ | 466.2 | |
Si | 71 | $\sqrt[12]{2^{11}}$ | 493.9 | |
Do | 72 | $2:1$ | 523.3 |
Nella tradizione musicale occidentale i rapporti fra le altezze sono stati il primo parametro che è stato organizzato secondo regole specifiche:
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/viderunt.mov"></video></center>')
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/ruper.mov"></video></center>')
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/merulo.mov"></video></center>')
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/bach_can.mov"></video></center>')
Questo parametro in termini musicali è dato dal rapporto tra i suoni più deboli (pianissimissimo) e quelli più forti che caratterizzano la dinamica di un brano.
La dinamica di un suono in fisica si definisce con il termine ampiezza in quanto descrive l’ampiezza delle variazioni dell’onda sonora rispetto allo stato di quiete e fornisce una misura dell’energia da essa trasportata.
Se prendiamo in considerazione l'aspetto fisico acustico e non la percezione umana questo parametro è indipendente dalla frequenza e per convenzione rappresentato da valori compresi tra -1.0 e +1.0.
import os
import sys
sys.path.insert(0, os.path.abspath('moduli'))
import parametri as par
%matplotlib inline
freq = 8 # Frequenza (Hz o cps)
amp = 0.2 # Ampiezza (tra 0.0 e 1.0)
par.vsine(freq, amp)
par.sine(freq, amp)
Il termine ampiezza è troppo generico e per evitare confusione aggiungiamo un aggettivo per distinguere tre differenti modalità di misurazione:
import numpy as np
import os
import sys
sys.path.insert(0, os.path.abspath('moduli'))
import parametri as par
%matplotlib inline
n = 12 # Numero di valori
a = par.amp(n) # Valori ampiezza istantanea
print('Ampiezze istantanee: ' + str(a))
a = np.abs(a) # Valori assoluti
a = np.amax(a) # Restituisce il valore più alto
print('Ampiezza di picco: ' + str(a))
a = par.amp(n) # Valori ampiezza istantanea
a = a**2 # Eleva al quadrato
a = np.mean(a) # Calcola la media aritmetica
a = np.sqrt(a) # Calcola la radice quadrata
a = np.round_(a, 2) # Approssima a due decimali
print('Root Mean Square: ' + str(a))
par.img(n)
Ampiezze istantanee: [ 0. 0.86 0.65 0.34 0.59 0.34 -0.61 -0.85 -0.21 -0.04 -0.34 0.03] Ampiezza di picco: 0.86 Root Mean Square: 0.5
La principale differenza tra ampiezza di picco e RMS sta nel fatto che la prima è un valore univoco indipendente dall'andamento del segnale mentre la seconda essendo una media è strettamente legata all'andamento dell'inviluppo del segnale.
import os
import sys
sys.path.insert(0, os.path.abspath('moduli'))
import parametri as par
%matplotlib inline
par.sf('media/pizz.wav')
par.sf('media/tenuto.wav')
Ampiezza di picco: 0.88 Root Mean Square: 0.12
Ampiezza di picco: 0.91 Root Mean Square: 0.25
In musica è importante misurare non solo le ampiezze ma anche i rapporti che intercorrono tra suoni con intensità differenti.
Questo parametro è anche comunemente chiamato volume o fattore di amplificazione e possiamo rappresentarlo in due diversi modi:
from IPython.display import HTML
HTML('<center><img src="esempi/Dinamiche.png" width="36%"></center>')
Quartica - Unità di misura assoluta espressa in valori decimali compresi tra 0.0 e 1.0. La più vicina alla percezione umana riguardo i cambiamenti di intensità dei suoni. Per calcolare i valori corretti dobbiamo elevare l'ampiezza lineare alla quarta potenza. Essendo compresi tra 0.0 e 1.0 l'ambito (range) rimane lo stesso.
$$a^4$$
Decibels (dB) - Unità di misura relativa espressa in valori decimali compresi tra 0.0 e -inf (o +inf a seconda del tipo di misurazione). Misura la differenza di intensità tra l'ampiezza di un suono rispetto a un'ampiezza di riferimento. Un suono con ampiezza di -6.02 dB sarà sempre forte la metà rispetto a un suono la cui ampiezza è stata presa come riferimento per la misurazione. Per calcolare i valori corretti dobbiamo utilizzare la seguente formula dove $a$ è il valore dell'ampiezza lineare del suono che vogliamo misurare mntre $a0$ è l'ampiezza del suono di riferimento (1.0).
$$20*\log_{10}(\frac{a}{a0})$$
import os
import sys
sys.path.insert(0, os.path.abspath('moduli'))
import parametri as par
%matplotlib inline
par.curve()
Alcuni rapporti tra queste unità di misura.
Segno | Vel | lin | quart | dB | |
---|---|---|---|---|---|
pppp | 12 | 0.1 | 0.0001 | -20 | |
ppp | 24 | 0.2 | 0.0016 | -14 | |
pp | 44 | 0.3 | 0.0081 | -10 | |
p | 54 | 0.4 | 0.0256 | -8 | |
mp | 64 | 0.5 | 0.0625 | -6 | |
mf | 74 | 0.6 | 0.1296 | -4 | |
f | 84 | 0.7 | 0.2401 | -3 | |
ff | 94 | 0.8 | 0.4096 | -2 | |
fff | 114 | 0.9 | 0.6561 | -1 | |
ffff | 127 | 1.0 | 1.0000 | 0 |
E formule di conversione
import numpy as np
ampvel = 0.5 * 127
velamp = 64 / 127
ampqrt = 0.5**4
qrtamp = pow(0.0625, 1/4) # radice ennesima di x = x**(1/radice ennesima)
ampdb = 20 * np.log10(0.5)
dbamp = 10**(-6/20)
print(ampvel)
print(velamp)
print(ampqrt)
print(qrtamp)
print(ampdb)
print(dbamp)
63.5 0.5039370078740157 0.0625 0.5 -6.020599913279624 0.5011872336272722
sull'asse orizzontale le frequenze in scala logaritmica.
Le curve, chiamate curve di uguale livello sonoro o isofoniche, dicono quale pressione sonora è necessaria, alle diverse frequenze, per dare la medesima impressione di intensità. L'unità di misura è il phon che rappresenta dunque l'udibilità soggettiva dell'orecchio umano, che in determinati casi, non coincide con la differenza oggettiva che due suoni hanno tra loro.
from IPython.display import HTML
HTML('<center><img src="esempi/isofoniche.png" width="40%"></center>')
Nella tradizione musicale occidentale i rapporti fra le dinamiche sono stati il terzo parametro (dopo tempo e ritmo) che è stato organizzato secondo specifiche modalità a fini espressivi:
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/mozart.mov"></video></center>')
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/schumann.mov"></video></center>')
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/debussy.mov"></video></center>')
Il timbro è quella particolare qualità del suono che permette di distinguere due suoni con uguale ampiezza e altezza e consente all'ascoltatore di identificare la fonte sonora, rendendola distinguibile da ogni altra.
Il timbro dei suoni naturali è influenzato da moltissimi parametri variabili come ad esempio le caratteristiche fisiche dei materiali della sorgente sonora e dal modo in cui è messo in vibrazione.
Tutti questi parametri concorrono a formare una rappresentazione fisica del timbro di quel suono ovvero la sua forma d'onda, che descrive come varia nel tempo la pressione atmosferica (o il voltaggio di un segnale) nel produrre quel determinato suono.
Nelle celle sottostanti sono illustrate tre diverse forme d'onda:
import os
import sys
import IPython.display as ipd
sys.path.insert(0, os.path.abspath('moduli'))
import parametri as par
%matplotlib inline
par.puro()
ipd.Audio('media/puro.mp3')
/Users/andreavigani/anaconda3/lib/python3.11/site-packages/matplotlib/cbook/__init__.py:1340: ComplexWarning: Casting complex values to real discards the imaginary part return np.asarray(x, float)
par.periodico()
ipd.Audio('media/periodico.mp3')
par.noise()
ipd.Audio('media/noise.mp3')
Gli elementi principali che contribuiscono alla caratterizzazione delle forme d'onda sono due:
I suoni presenti in natura non producono mai suoni puri (onde sinusoidali perfette) ma sono caratterizzati da forme d'onda differenti tra loro e dunque da suoni complessi.
Un suono complesso è il risultato della sovrapposizione (somma) di più suoni puri ognuno con frequenza, ampiezza e fase differenti secondo il teorema enunciato dal fisico francese J.Fourier nei primi anni dell'800:
Qualunque segnale periodico può essere scomposto nella somma di un eventuale termine costante e di segni sinusoidali, dei quali il primo, avente lo stesso periodo e quindi la stessa frequenza del segnale considerato, si chiama prima armonica o fondamentale, e gli altri, aventi periodi sottomultipli e quindi frequenze multiple, si chiamano armoniche superiori
import os
import sys
sys.path.insert(0, os.path.abspath('moduli'))
import parametri as par
%matplotlib inline
par.fourier()
Per chiarire ulteriormente possiamo pensare uno spettro sonoro come un accordo musicale le cui singole note sono eseguite da suoni sinusoidali (un singolo suono puro per ogni nota) che l'orecchio umano non percepisce come un accordo formato da più note ma come un singolo suono con un determinato timbro.
from IPython.display import HTML
HTML('<center><img src="esempi/Fourier.png" width="14%"></center>')
Ogni suono puro che concorre a formare uno spettro complesso può essere chiamato suono armonico o parziale.
La differenza terminologica tra queste due definizioni è sottile e implica la conoscenza del tipo di spettro a cui si riferisce.
Fondamentalmente gli spettri sonori possono essere suddivisi in due grandi famiglie la cui differenziazione è data dai rapporti frequenziali intercorrenti tra le componenti pure che li formano.
Spettri armonici. Le frequenze dei parziali seguono rapporti formati da numeri interi:
I parziali possono essere chiamati anche armonici dove il suono (usualmente) più grave che corrisponde al rapporto 1:1 è chiamato fondamentale ed è quello che generalmente caratterizza l'altezza percepita di quel suono complesso, mentre i parziali successivi sono chiamati primo armonico, secondo armonico, e via dicendo fino idealmente a infinito.
La forma d'onda di questi suoni complessi può essere solamente periodica.
In questo caso, stabilita la frequenza fondamentale in Hertz per ricavare le frequenze degli armonici basterà moltiplicarne il valore per i numeri interi.
from IPython.display import HTML
HTML('<center><img src="esempi/Serie_armonica.png" width="63%"></center>')
from IPython.display import Audio
Audio('media/armonico.mp3')
Spettri inarmonici. Le frequenze dei parziali non seguono alcun rapporto particolare, o meglio non sono in rapporto con un suono fondamentale che è assente.
La forma d'onda di questi suoni può essere sia periodica che aperiodica.
from IPython.display import Audio
Audio('media/inarmonico.mp3')
Possiamo affermare che tutti i suoni possibili sono formati da spettri compresi tra:
le cui caratteristiche oscillano tra suoni inarmonici, suoni quasi armonici e suoni armonici.
import os
import librosa
import IPython.display as ipd
sys.path.insert(0, os.path.abspath('moduli'))
import parametri as par
%matplotlib inline
sr = 22050 # Frequenza di campionamento
path = os.path.abspath('media/tenuto.wav') # Path file
offset = 1 # Offset in secondi
w_size = 1024 # Window size (in samples)
y, sr = librosa.load(path, sr=sr,offset=offset, duration=(1/sr)*w_size) # Assegna le ampiezze istantanee di y
par.plotFFT(y,sr,150)
ipd.Audio('media/tenuto.wav')
Le tipologie di spettri sonori che abbiamo appena descritto si riferiscono a fotografie di un suono.
Il suono però comincia dal silenzio, segue una parabola ben delineata e scandita in diverse fasi temporali e infine torna al silenzio.
Possiamo schematizzare il susseguirsi di queste fasi nel modo seguente:
Queste tre fasi costituiscono quello che viene definito l'inviluppo d'ampiezza di un suono.
Nella figura sottostante sono illustrati gli inviluppi di ampiezza caratteristici di alcuni strumenti musicali.
from IPython.display import HTML
HTML('<center><img src="media/envs.png" width="55%"></center>')
Durante queste fasi il contenuto spettrale del suono emesso non è costante ma varia nel tempo e dunque il timbro di un suono è determinato dall'evoluzione del contenuto spettrale nel tempo.
Ogni singolo parziale segue un proprio inviluppo d'ampiezza, che sovrapposto agli inviluppi degli altri parziali forma l'inviluppo spettrale di un suono.
Ad esempio lo spettro del suono di un pianoforte è molto più vicino al rumore bianco al suo attacco (nei primi millisecondi) quando il martelletto colpisce le corde, si stabilizza in uno spettro armonico ricco dato dalle caratteristiche fisiche del corpo dello strumento nella fase di sostegno per poi rarefarsi vero pochi suoni puri di risonanza quasi-armonici nella fase di rilascio.
from IPython.display import HTML
HTML('<center><img src="media/spettro.png" width="100%"></center>')
import IPython.display as ipd
ipd.Audio('media/crotalo.wav')
Le relazioni che intercorrono tra sorgente sonora, caratteristiche fisiche dell'onda sonora generata (altezza, intensità e timbro) e la percezione multisensoriale di entrambe sono molto complesse e abbracciano diversi ambiti di studio (psicoacustica, antropologia culturale, neuroscienze, etc.).
Osserviamo un percussionista con un tamburo e una bacchetta.
Nel momento in cui la bacchetta colpisce la pelle dello strumento viene prodotto un suono.
Il nostro cervello dopo aver osservato (percezione visiva) una o più volte il gesto che genera quel determinato suono e aver ascoltato (percezione auditiva ) il suono prodotto da quel determinato gesto crea una connessione tra i due sensi, includendo nella nostra memoria esperenziale queste nuove informazioni.
Con il passare degli anni ed il moltiplicarsi delle esperienze visivo/auditive, nel nostro cervello si crea un immenso database di suoni correlati a oggetti e a gesti che ci permette di immaginare quel determinato tamburo ogni qualvolta ne sentiamo il suono corrispondente, anche attraverso una registrazione, in assenza di uno stimolo visivo.
E' presto detto che ciò vale anche nel caso inverso, ovvero nel momento in cui osserviamo quel tamburo possiamo richiamare alla memoria e "pensare" il suono (o i suoni) che può produrre, così come hanno fatto (quasi) tutti i compositori che non avevano a disposizione campionatori o registratori nell'atto di comporre un brano per uno o più strumenti, e ancor più nell'orchestrare amalgame di timbri più o meno omogenei.
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/schubert.mov"></video></center>')
Nel corso della stratificazione culturale propria della tradizione musicale occidentale il timbro è stato il quarto parametro del suono sviluppato organicamente e il processo appena descritto (assieme ad altre importanti concause) ha favorito l'astrazione del pensiero musicale.
Un suono rappresenta se stesso anche simbolicamente e non l'oggetto che lo ha prodotto, svincolandolo dall'esistrere solo ad un livello esperenziale/percettivo.
Tre esempi del percorso timbrico nella storia della musica occidentale.
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/bach_suite.mov"></video></center>')
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/webern.mov"></video></center>')
Le caratteristiche estetiche e le sintassi che stanno alla base di questa forma d'arte risiedono proprio nel principio di non riconoscibilità della sorgente sonora.
"...rumore acusmatico si dice di un suono che si ascolta senza scoprirne le cause. Ebbene, questa è la definizione stessa dell'oggetto sonoro, questo elemento di base della musica concreta, musica la più generale che sia, di cui la testa sarebbe vicino al cielo e i cui piedi toccherebbero il regno dei morti..." (J. Peignot)
Partendo da questa idea i suoni impiegati in queste composizioni vengono organizzati nel tempo attraverso sistemi di regole i cui elementi sintattici sono i parametri fisico/morfologici del suono stesso dove il timbro è il parametro principale.
Non esiste un oggetto/strumento che produce suono ma un oggetto sonoro che è suono ri-prodotto (e non prodotto) da sistemi (orchestre) di altoparlanti chiamati acusmonium.
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/acusmatica.mov"></video></center>')
from IPython.display import HTML
HTML('<center><img src="media/acusmonium.png" width="60%"></center>')
A partire dal secondo '900 nella musica d'arte inoltre si è sviluppata una corrente musicale che persegue la creazione di un musica acusmatica strumentale dove il timbro storicizzato di strumenti acustici appartenenti alla tradizione musicale occidentale viene snaturato in oggetto sonoro destoricizzato sia attraverso l'impiego di mezzi elettroacustici (elaborazione del suono in tempo reale e la sua diffusione) sia atterverso l'impiego di tecniche strumentali aumentate (multifonici, col legno, soffi, etc.) come nel brano di L.Nono "...a Pierre, dell'azzurro silenzio, inquietum" - 1985
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/nono.mov"></video></center>')
Nel paragrafo precedente abbiamo osservato come, secondo il teorema di Fourier tutti i suoni possono essere scomposti come sommatoria di sinusoidi ognuna con una propria frequenza, una propria ampiezza e una propria fase.
La funzione sinusoidale può rappresentare una legge oraria chiamata moto armonico semplice che è un moto periodico lungo un asse rettilineo detto origine (O).
$x(t) = a * sin(\omega t + \varphi)$
Dal punto di vista cinematico può essere visto come:
from IPython.display import HTML
HTML('<center><video width="95%" controls loop autoplay> <source src="media/sine.mp4"></video></center>')
import os
import sys
sys.path.insert(0, os.path.abspath('moduli'))
import parametri as par
%matplotlib inline
freq = 5 # Cambia i parametri...
amp = 1
fase = 0.5
par.sinepar(freq,amp,fase)
I concetti fisici di periodo e fase sono stati impiegati anche come regole procedurali in diverse sintassi della tradizione musicale occidentale.
Pensiamo al retrogrado, all'inversione o alle tecniche contrappuntistiche dell'epoca barocca oppure nel secondo '900 ai compositori minimalisti come S.Reich.
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/reich.mov"></video></center>')
Strettamente correlato al parametro timbro e alle relazioni tra sorgente sonora e percezione dell'informazione musicale c'è il parametro spazio che è l'ultimo in ordine di tempo indagato a fini espressivi nella tradizione musicale occidentale anche se nel passato ci sono stati periodi in cui era già entrato a far parte della sintassi musicale dell'epoca come nei brani per cori spezzati nella Venezia di fine '500.
from IPython.display import HTML
HTML('<center><img src="media/cori.png" width="60%"></center>')
Musica su supporto - diffusione tramite altoparlanti che possono essere posizionati a piacere nell'ambiente d'ascolto realizzando spazi acustici inediti.
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/stocki.mov"></video></center>')
Live electronics - relazioni percettive complesse tra la sorgente sonora acustica (strumenti) e sorgenti sonore virtuali (altoparlanti).
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/boulez_dialogue.mov"></video></center>')
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/laptop.mov"></video></center>')
La misurazione del tempo è stata la prima scienza esatta dell’antichità.
Le uniche certezze provenivano dai fenomeni astronomici.
I suoni (e di conseguenza la musica) esistono solo nel tempo, in un tempo non reversibile se non nella memoria.
Per questo motivo dobbiamo definire alcuni parametri atti a misurare il tempo, o meglio misurare una sequenza di eventi o azioni che si svolgono nel tempo per poterli organizzare (comporre) in ritmo e tradurli in linguaggi simbolici interpretabili da esecutori umani o da software.
Possiamo specificare qualsiasi tipo di evento sonoro nel tempo scegliendo almeno due tra i seguenti parametri:
from IPython.display import HTML
HTML('<center><img src="esempi/Onsets.png" width="40%"></center>')
from IPython.display import HTML
HTML('<center><img src="esempi/DeltaT.png" width="40%"></center>')
from IPython.display import HTML
HTML('<center><img src="esempi/Durate.png" width="60%"></center>')
A seconda delle situazioni e degli ambienti software possiamo impiegare oppure la coppia tempi delta e durate come nell'immagine precedente oppure la coppia onset e durate come nelle daw oppure nella rappresentazione MIDI sotto forma di piano roll.
In entrmbe i casi se:
import os
import sys
sys.path.insert(0, os.path.abspath('moduli'))
import parametri as par
%matplotlib inline
par.proll("esempi/Bach_1.mid")
Possiamo specificare ognuno di questi parametri attraverso due unità di misura differenti.
Tempo assoluto
Proprio dei linguaggi informatici, non è in alcun modo relativo alle regole di alcun sistema musicale di riferimento.
Unità di misura:
onsets = (0.0, 0.25, 0.5, 1) # secondi
durate = (0.25, 0.25, 0.5, 2)
delta = ( 0.25, 0.25, 0.5)
onsets = (0.0, 250, 500, 1000) # millisecondi
durate = (250, 250, 500, 2000)
delta = ( 250, 250, 500)
Tempo relativo
Tutti i valori sono definiti attraverso suddivisioni di una pulsazione regolare e può essere relativo alle regole di un sistema musicale di riferimento
Unità di misura (beat):
Possiamo rappresentare i valori in quattro modi diversi.
from IPython.display import HTML
print(' ')
print("Simboli numerici 16 16 8 2 4")
print("Simboli alfabetici s s e h q")
print("Notazione frazionale 1/4 1/4 1/2 2/1 1/1 (beat = quarto = 1)")
print("Fattori moltiplicazione 0.25 0.25 0.5 2 1 (beat = quarto = 1)")
print("Notazione proporzionale 1:4 1:4 2:4 8:4 4:4 (quantità : n_suddivisioni_beat)")
print("Simboli musicali")
HTML('<center><img src="esempi/Ritmo.png" width="36%"></center>')
Simboli numerici 16 16 8 2 4 Simboli alfabetici s s e h q Notazione frazionale 1/4 1/4 1/2 2/1 1/1 (beat = quarto = 1) Fattori moltiplicazione 0.25 0.25 0.5 2 1 (beat = quarto = 1) Notazione proporzionale 1:4 1:4 2:4 8:4 4:4 (quantità : n_suddivisioni_beat) Simboli musicali
Possiamo convertire facilmente le unità di misura temporali.
bpm = 78
print(bpm/60) # bpm --> bps
print(60000/bpm) # bpm --> ms
print(60/bpm) # bpm --> s
bps = 1.3
print(bps*60) # bps --> bpm
sec = 0.5
print(1/sec) # sec --> Hz (bps)
Hz = 4
print(1/Hz) # Hz --> sec
1.3 769.2307692307693 0.7692307692307693 78.0 2.0 0.25
Nel corso dei secoli l’uomo è passato dal ritmo naturale che ha a che fare con la ciclicità degli eventi che accadono in natura al ritmo musicale, basato invece su di una pulsazione regolare finita o infinita:
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/bach_cello.mov"></video></center>')
Dai greci a oggi il senso del tempo musicale si è modificato enormemente.
Dal battito regolare del Tactus (la sillaba breve) alla de-costruzione dello stesso in pulsazioni irregolari e poliritmie strutturali perseguite dai compositori europei e statunitensi nel secolo scorso, fino al ritorno di un beat ossessivo nella musica dei compositori minimalisti e nei diversi generi di musica Pop/Rock.
La seguente Figura illustra uno schema che comprende tutte le possibili tipologie di pulsazioni esistenti siano esse suddivisioni di un beat o meno.
from IPython.display import HTML
HTML('<center><img src="media/schema_puls.png" width="80%"></center>')
Regolare
Questo tipo si pulsazione può:
from IPython.display import HTML
import numpy as np
a = [0.25 for i in range(4)]
print(a)
HTML('<center><img src="media/puls_reg.png" width="40%"></center>')
[0.25, 0.25, 0.25, 0.25]
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/piano_phase.mov"></video></center>')
Metrica mensurale regolare
Figure ritmiche caratterizzanti e riconoscibili all’ascolto (pattern) che si ripetono uguali o variate nel corso dell’intera sequenza.
L’insieme di un gruppo di suddivisioni deve essere contenuto all’interno di un singolo beat o di suoi multipli.
E’ la pulsazione che ha caratterizzato la storia della musica occidentale dagli esordi fino ai giorni nostri.
Su di essa si basa tutta la teoria musicale occidentale, intesa sia come insieme di metodi per analizzare, classificare e comporre la musica e i suoi elementi, sia come relazioni tra la semiografia (notazione musicale) e la sua esecuzione.
Il suo percorso storico parte idealmente dalla ritmica greca, passa per il canto gregoriano e viene sviluppata con l’avvento della polifonia e del mensuralismo.
Codificata in teoremi di diversa natura, diventa un sistema unitario di organizzazione del tempo musicale che si sviluppa ulteriormente fino alle complesse vicende linguistiche del secondo ‘900.
from IPython.display import HTML
import numpy as np
a = 1/np.array([4 for i in range(4)])
b = 1/np.array([2 for i in range(2)])
c = 2/np.array([3 for i in range(3)])
print(a)
print(b)
print(np.round_(c,6))
HTML('<center><img src="media/puls_mmr.png" width="30%"></center>')
[0.25 0.25 0.25 0.25] [0.5 0.5] [0.666667 0.666667 0.666667]
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/mozart_piano.mov"></video></center>')
Metrica mensurale irregolare
In questa tipologia è perseguito il risultato musicale opposto rispetto a quella precedente:
una suddivisione irregolare e continuamente cangiante del beat che annulla la percezione di figure ritmiche riconoscibili all’ascolto e del beat stesso, relegandolo a semplice griglia temporale non espressa in millisecondi o secondi ma in bpm raggruppati o meno in misure musicali.
from IPython.display import HTML
import numpy as np
a = 1/np.array([2,10,10,10,5])
b = 1/np.array([12,3,12,2])
c = 1/np.array([3,2,6])
d = 1/np.array([4,1.33])
print(np.round_(a,2))
print(np.round_(b,2))
print(np.round_(c,2))
print(np.round_(d,2))
HTML('<center><img src="media/puls_mmi.png" width="50%"></center>')
[0.5 0.1 0.1 0.1 0.2] [0.08 0.33 0.08 0.5 ] [0.33 0.5 0.17] [0.25 0.75]
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/boulez_piano.mov"></video></center>')
Metrica non mensurale
Anche questo tipo di pulsazione corrisponde a una suddivisione del beat.
L’insieme di un gruppo di suddivisioni non è però necessariamente raggruppato in un beat o suoi multipli.
E’ simile alla precedente tipologia ma non ”imbrigliata” all’interno di misure.
Si presta a operazioni musicali di ritmica polimetrica e a creare brevi sequenze ritmiche percettivamente riconoscibili, ripetute più volte in loop (patterns irregolari).
Nel rappresentalra in notazione musicale spesso è utilizzata una scrittura proporzionale in campo aperto con o senza indicazione di misure.
from IPython.display import HTML
import numpy as np
a = 1/np.array([6,4,7,3,3,7,6])
print(np.round_(a,2))
HTML('<center><img src="media/puls_mnm.png" width="35%"></center>')
[0.17 0.25 0.14 0.33 0.33 0.14 0.17]
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/messiaen.mov"></video></center>')
Irregolare
Questo tipo di pulsazione corrisponde a una suddivisione irregolare assoluta di un tempo misurato in secondi o millisecondi.
Non c’è alcun tipo di relazione e rappresenta in un certo senso l’assenza se non la negazione della pulsazione.
La notazione può essere tradizionale in campo aperto.
Il beat non deve essere percepito, anche in presenza di cellule ritmiche.
from IPython.display import HTML
import numpy as np
a = np.array([0.12,0.23,1.23,0.56,2.58,2.56])
print(np.round_(a,2))
HTML('<center><img src="media/puls_irr.png" width="40%"></center>')
[0.12 0.23 1.23 0.56 2.58 2.56]
from IPython.display import HTML
HTML('<center><video width="60%" controls> <source src="media/stock.mov"></video></center>')