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')