In questo articolo, capostipite di una serie, voglio presentare un approccio di composizione musicale seriale basato sulla successione di Fibonacci. Come ben sapete, il mondo dell’atonalità e del serialismo è pieno di esperimenti matematici di ogni genere, fondamentalmente incentrati sulle permutazioni e sulle trasformazioni già prescritte dalla dodecafonia (i.e., retrogrado, inverso, inverso del retrogrado).
La successione di Fibonacci offre, a mio parere, delle possibilità interessanti per la creazione sia di sequenze melodiche, sia per la generazione di triadi (in modo libero o aleatorio). I risultati che desidero presentare, non sono, inoltre, vincolati da regole predefinite in modo rigido, in quanto penso che, dopo gli svariati esperimenti sia della scuola di Schoenberg, che di quella avanguardistica di Darmstadt, si sia giunti alla constatazione che nè troppe regole, nè tantomeno un eccesso di libertà possono giovare ai risultati compositivi.
Brevissima introduzione alla successione di Fibonacci
Quella di Fibonacci, è una successione matematica crescente, definita dalle seguenti semplici regole:
![Espressione matematica della successione di Fibonacci](https://www.bonaccorso.eu/wp-content/uploads/2024/05/fibonacci-jpg.webp)
Dunque, la successione sarà: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, … etc. Una proprietà molto interessante che è stata dimostrata è che al tendere di n all’infinito il rapporto tra due termini successivi tende alla sezione aurea φ:
![Il limite per n che tende all'infinito del rapporto tra due termini consecutivi della successione di Fibonacci tende alla sezione aurea.](https://www.bonaccorso.eu/wp-content/uploads/2024/05/fibonacci_lim-jpg.webp)
Trasformazione della successione di Fibonacci per creare musica seriale
La successione è divergente e ha una crescita molto rapida, pertanto è abbastanza complicato utilizzarla direttamente, tuttavia, è sempre possibile trasformare i suoi termini in valori compresi tra 0 e 11 (i.e, le 12 note della scala cromatica), con un semplice stratagemma:
def fibonacci_mod_12(n): a = 1 b = 1 f = [1 % 12, 1 % 12] if n < 3: return f for _ in range(2, n): c = a + b a = b b = c f.append(c % 12) return f
Per cercare di ottenere una quantità di dati statisticamente significativa, ho creato una tabella (disponibile anche come file CSV a questo link), contentenete 1000000 di elementi, a cui ho associato la scala cromatica partendo dal La (i.e, La = 0, La# = 1, …, Sol# = 11). Questa è una scelta del tutto arbitraria, che non altera in alcun modo le proprietà della serie e può essere modificata a piacimento partendo da qualsiasi nota, che chiameremo, per comodità “fondamentale”.
La tabella integrale è riportata di seguito:
Fibonacci Serial Music
La prima colonna indica l’ordinale del corrispondente valore della successione di Fibonacci (f), la seconda il numero (f mod 12) e la terza, la nota corrispondente.
Proprietà statistiche della sequenza generata
La prima analisi da compiere è quella di generare la distribuzione di probabilità discreta di tutte le note. Il primo passo è visualizzare i conteggi di ogni singola nota partendo sempre dalla condizione che la popolazione, pur essendo molto ampia, non è infinita:
Ci sono alcune osservazioni che si possono fare dopo l’analisi visiva del grafico:
- La distribuzione non ha alcun elemento corrispondente alla nota Re# (n = 6). Ciò significa che, partendo dalla nota “fondamentale”, mancherà sempre la quarta eccedente (i.e., il tritono – per buona pace dei contrappuntisti medievali!)
- Ci sono due note statisticamente dominanti, il La# e il Re, ovvero, la seconda minore e la quarta giusta.
- Tutte le altre note si presentano in modo abbastanza omogeneo, con lievi diminuzioni per il Do#, Mi, Fa e Sol#.
La distribuzione di probabilità è pertanto:
![Distribuzione di probabilità delle note secondo la sequenza derivata dalla successione di Fibonacci](https://www.bonaccorso.eu/wp-content/uploads/2024/05/fibonacci_p-jpg.webp)
Se adesso consideriamo l’entropia di una distribuzione uniforme p = 1/12 per ogni nota, avremo la situazione di massima incertazza/informazione:
Quindi, escludendo ogni altra forma di combinazione, durata, altezza, etc. e limitandoci a un’ottava, 3.6 bit è la massima entropia possibile. Nel nostro caso, ho calcolato l’entropia con un breve snippet in Python:
import numpy as np n = 1000000 sequence = fibonacci_mod_12(n) p = np.bincount(sequence, minlength=12) / n H_fib = -np.dot(p, np.log2(p + 1e-12).T)
Il valore H_fib è uguale a circa 3.2 bit, quindi sensibilmente minore del massimo, ma pur sempre abbastanza alto per garantire una sequenza relativamente “disordinata” e, pertanto, anche informativa.
Il termine 1e-12 è stato aggiunto alla probabilità per evitare un errore quando p = 0. Bisogna però ricordardare che, in questo caso, il limite matematico è comunque uguale a 0, pertanto non vi è alcuna forzatura.
Alcuni esempi di sequenze melodiche
Adesso presento alcuni esempi di sequenze melodiche su più ottave sulla linee del contralto-soprano. Essi si basano su diversi approcci di gestione della sequenza “madre”, basati sia su scelte volontarie che puramente aleatorie.
Sequenza iniziale
La sequenza iniziale è molto semplice e si basa sulla presenza di due La# dovuti ai primi due numeri (1, 1) della successione di Fibonacci. Il risultato è il seguente:
Il risultato è melodicamente un pò sgraziato nella prima parte, ma acquista un carattere più brillante (anche se fortemente atonale) a partire dal La# alla seconda ottava.
Sequenza aleatoria basata sulla distribuzione ricavata dalla sequenza di Fibonacci
Utilizzando Python e Numpy, è molto semplice generare un numero arbitrario di valori causali estratti dalla distribuzione multinomiale mostrata in precedenza. Lo snippet per produrre un numero arbitrario di estrazioni causali, basato sulla funzione np.random.choice(…), è questo:
import numpy as np np.random.seed(1000) notes = ['A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#'] f = np.unique(sequence[:, 0]).astype(np.int8) vals = [notes[i] for i in np.random.choice(f, size=f.shape, replace=False, p=pf)]
Impostando il valore della random seed con un valore prefissato è possible riprodurre l’esperimento. Nel caso precedente, ho chiesto (terzo argomento di np.random.multinomial(…)) di estrarre 12 note che ho rappresentato in due sequenze alternative:
L’effetto di “camminata” è molto forte nelle prime sei crome, ma risulta un pò “appiattito” nella successione La – La – La – La# – La – La (ed. per questo ho inserito la seconda variante). Tuttavia, il risultato complessivo è un ottimo spunto per un motivo di apertura da cui far scuturire sviluppi più complessi.
Sequenza aleatoria basata sulla distribuzione uniforme dell’intero campione
Per lavorare con sequenze melodiche (o armoniche) basate sull’intero campione di 1000000 di valori, consiglio vivamente di scaricarlo e utilizzare il seguente script Python per inserirlo in una lista:
import csv import numpy as np sequence = list() with open('fibonacci_notes.csv', 'r', newline='') as csvfile: datareader = csv.reader(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL) for row in datareader: sequence.append(row) sequence = np.array(sequence)
In questo caso, il file si trova nella stessa cartella dello script e si chiama “fibonacci_notes.csv”. Se la vostra configurazione è diversa, modificate il percorso secondo le vostre esigenze.
Procedendo come nell’esempio precedente, la generazione può avvenire utilizzando sempre la funzione np.random.choice(…) senza specificare la distribuzione di probabilità, questo farà sì che Numpy la consideri uniforme:
n = 16 np.random.seed(1000) vals = [notes[int(i)] for i in np.random.choice(sequence[:, 0], size=n)]
In questo snippet, ho utilizzato gli array “sequence” e “notes” definiti in quelli precedenti. Il risultato per n=16 estrazioni, con un tempo comune e qualche leggera variazione ritmica è il seguente:
Conclusioni
In questa introduzione, ho mostrato come utilizzare la successione di Fibonacci per generare sequenze aleatorie melodiche. Le possibilità sono molteplici e sono convinto che sia possibile ottenere risultati molto interessanti dal punto di vista artistico.
Nei prossimi articoli, analizzerò le sequenze armoniche e altre metodologie non aleatorie per iniziare a comporre periodi più corposi e adatti anche a organici a più voci. Per qualunque domanda, vi prego di contattarmi tramite l’apposito modulo.
Per approfondimenti sull’analisi musicale atonale
- Pur essendo caratterizzata da forti contrapposizioni stilistiche, la produzione musicale del primo Novecento manifesta al contempo una certa unità di fondo, resa oggi più evidente grazie alla distanza storica che tende ad appianare posizioni ideologiche e culturali ormai lontane dalla nostra sensibilità
- È proprio a partire da questi presupposti che prende le mosse questo volume: spaziando attraverso il repertorio della prima metà del secolo ― da Debussy a Stravinskij, da Schoenberg a Bartók, da Webern a Messiaen ―, ci si sofferma più sugli elementi in comune che non sulle specificità stilistiche individuali
- Una parte significativa del volume è dedicata ad esplorare, con l’aggiunta di apporti originali, le potenzialità della Teoria degli insiemi di classi di altezze, la metodologia analitica più appropriata per indagare questo tipo di musica
- Leggi di più
Se ti piace l’articolo, puoi sempre fare una donazione per supportare la mia attività. Basta un caffè! E non dimenticarti di iscriverti alla mia newsletter settimanale!
Last update on 2024-07-01 / Affiliate links / Images from Amazon Product Advertising API