Musica seriale basata sulla geniale successione di Fibonacci

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.

Musica basata sulla successione di Fibonacci

Brevissima introduzione alla successione di Fibonacci

Quella di Fibonacci, è una successione matematica crescente, definita dalle seguenti semplici regole:

Espressione matematica della successione di Fibonacci
Espressione matematica della successione di Fibonacci

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.
Il limite per n che tende all’infinito del rapporto tra due termini consecutivi della successione di Fibonacci tende alla sezione aurea φ.

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:

Sequenza musicale di Fibonacci
Sequenza musicale di Fibonacci: attraverso l’applicazione dell’operatore modulo (i.e, resto della divisione intera), i termini a saranno sempre nell’intervallo [0, 11].
Io ho creato la sequenza con una semplice funzione scritta in Python:

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
Distribuzione di probabilità delle note (ordinate in modo descrescente a intervalli di un semitono) secondo la sequenza derivata dalla successione di Fibonacci.

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:

Prima sequenza melodica generata dalla successione di Fibonacci

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:

Sequenza aleatoria di Fibonacci ripetuta in due varianti

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:

Sequenza aleatoria di 16 note basata sull'intera sequenza di Fibonacci contente 1000000 di campioni.

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

Sale
Tecniche per l'analisi della musica post-tonale
  • 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-06-19 / Affiliate links / Images from Amazon Product Advertising API

Share this post on:
FacebookTwitterPinterestEmail